javascript - 传递/改变 jQuery UI 拖动事件

标签 javascript jquery jquery-ui jquery-events

我希望用户能够左右拖动水平菜单栏。我意识到有很多旋转木马和 slider 库都有这种行为——但没有一个适合这种情况。

当用户拖动一个LI时,是否可以将新的x-offset信息传递到first LI的left margin ?

我在这里试了一下:http://jsfiddle.net/n92ng9uz/

上述 fiddle 的主要问题是,偏移量仍应用于单个 LI,如果我阻止事件冒泡,拖动将不再平滑。

最佳答案

由于您在注释中指定要求在第一个 li 元素上使用 margin-left,而不是修改 ul< 的位置,我很确定使用 jQuery UI 可拖动无法轻松完成。如果我们要使 li 可拖动,我们就不会在其他 li 上捕获鼠标事件,如果我们要使 ul > 可拖动,我们不能轻易地让它只影响第一个 limargin-left 而不是 ul 的位置。

这是一个直接使用鼠标事件而不是使用 jQuery UI 的解决方案的现场演示:

var firstLI = $('li:first-child');

var initx = 0;
var dragstartx = 0;
var dragging = false;

$("ul").mousedown(function(e) {
    dragging = true;
    dragstartx = e.pageX;
    initx = parseInt(firstLI.css("marginLeft"), 10);
});

$("ul").mousemove(function(e) {
    if (dragging) {
        firstLI.css("marginLeft", (initx + e.pageX - dragstartx) + "px");
    }
});

$("ul").mouseleave(function(e) {
    dragging = false;
});

$("ul").mouseup(function(e) {
    dragging = false;
});
ul {
    list-style: none;
    margin: 0;
    padding: 0;
    overflow: hidden;
    white-space: nowrap;
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

ul > li {
    display: inline-block;
    padding: 10px;
}

ul > li:nth-child(odd) {
    background: orangered;
}

ul > li:nth-child(even) {
    background: gold;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul>
    <li>Link 1</li>
    <li>Link 2</li>
    <li>Link 3</li>
    <li>Link 4</li>
    <li>Link 5</li>
    <li>Link 6</li>
    <li>Link 7</li>
    <li>Link 8</li>
    <li>Link 9</li>
    <li>Link 10</li>
</ul>

JSFiddle 版本:https://jsfiddle.net/n92ng9uz/2/

关于javascript - 传递/改变 jQuery UI 拖动事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32455221/

相关文章:

javascript - 知道一个好的 jQuery 日期选择器(某种)插件吗?

jquery - 在 Datepicker JQuery UI (1.10.x) 和 JQuery (1.9.x) 中突出显示一整周

javascript - 检查函数是否采用数组或单值输入

javascript - 帮助需要绑定(bind) jquery .error()

jquery - 当滚动被禁用并溢出 : hidden 时捕获滚动

javascript - 异步任务完成后通知

java - "ASCII"上下左右箭头代码

javascript - jQuery append 文本是不可见的

javascript - 何时使用 this.props.children 以及为什么

javascript - 如何从服务响应中停止 html 上的多个事件处理程序 onclick?