【问题标题】:How can I override the drag event for jQuery ui sortable?如何覆盖 jQuery ui 可排序的拖动事件?
【发布时间】:2013-12-06 17:28:01
【问题描述】:

在 jQuery UI 网站上,它说“默认情况下,可排序项共享可拖动属性。”我认为这意味着可拖动的所有事件,可排序的也应该继承。然而,情况似乎并非如此。对于可排序的网格,我需要类似可拖动的“拖动”事件,以便我可以手动更新被拖动元素的 x 和 y 值。到目前为止,我已经能够使用 mousemove 事件和一些标志来获取被拖动元素的 X 和 Y 值,但是我无法获取它以便可以设置 X 和 Y 值。当我尝试设置这些值时,它们只会在下次触发事件时重置(它可能发生在 mousemove 事件之后)。有谁知道实现这一点的方法吗?

这是我迄今为止尝试过的一个小提琴:http://jsfiddle.net/turtlewaxer1100/CUXxn/5/

HTML

<div class="row grid span8">
    <div class="well span2 tile">A</div>
    <div class="well span2 tile">B</div>
    <div class="well span2 tile">C</div>
    <div class="well span4 tile">D</div>
</div>

CSS

.placeholder {
    border: 1px solid green;
    background-color: white;
    -webkit-box-shadow: 0px 0px 10px #888;
    -moz-box-shadow: 0px 0px 10px #888;
    box-shadow: 0px 0px 10px #888;
}
.tile {
    height: 100px;
    width: 100px;
}
.grid {
    margin-top: 1em;
}

JS

var dragging = false;

$(function () {
    $(".grid").sortable({
        start: dragging = function(e, ui) {
          return dragging = true;
        },
        stop: dragging = function(e, ui) {
          return dragging = false;
        },
        tolerance: 'pointer',
        revert: 'invalid',
        placeholder: 'span2 well placeholder tile',
        forceHelperSize: true,

        // Drag doesn't work as an event in sortable.
        drag: function() 
        {
            console.log("Drag fired!");
        }
    });

    // My attempt at a custom drag event. (can get values, but can't set them.)
    $(document).mousemove(function(e){
        if(dragging===true)
        {
            // Grab the sortable element being moved. 
            element = $(".ui-sortable-helper");

            // Show the current X and Y values. (get reset after manually setting them below)
            console.log("before: X: " + element.css("left") + ", Y: " + element.css("top"));   

            // Change the X and Y values to something arbitrary.
            element.css("left",0);
            element.css("top",0);

            // Show the X and Y values after the change. 
            console.log("after: X: " + element.css("left") + ", Y: " + element.css("top")); 
        }
    });
});

【问题讨论】:

    标签: javascript jquery jquery-ui jquery-ui-sortable jquery-ui-draggable


    【解决方案1】:

    尝试可排序的sort 事件。

     sort: function(event, ui) 
            {
                console.log("Drag fired!");
                ui.helper.css("left",0);
                ui.helper.css("top",0);
            }
    

    这是您更新后的jsfiddle

    【讨论】:

    • 太棒了!这正是我需要的。我想知道他们为什么不称那个事件为拖拽……看起来就是这样。谢谢。
    • 啊,因为它实际上是通过拖动元素来对元素进行排序。所以基本上它是一种;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    相关资源
    最近更新 更多