【问题标题】:How should I integrate both jQueryUI draggable and sortable in my project?我应该如何在我的项目中集成 jQueryUI 可拖动和可排序?
【发布时间】:2012-04-23 23:25:13
【问题描述】:

我想在我的项目中集成 jQueryUI 可拖动和可排序,并使用 mousedown 和第一个 mousemove 事件之间的时间差来区分它们。我的部分代码如下:

var deltaX = self.mouse.startX - event.pageX,
    deltaY = self.mouse.startY - event.pageY;
if (self.mouse.mousedownTime - self.mouse.mousemoveTime < 700){                   
                // Drag down
                if(Math.abs(deltaX) < Math.abs(deltaY) && deltaY < 0){
                    $(self.el).draggable({disabled: false});
                    $(self.el).sortable({disabled: true});
                    $(self.el).draggable({axis: 'y'});
                    $(self.el).draggable({revert: true});
 ....
}
// Sorting action
else {
            $(self.el).sortable({disabled: false});
            $(self.el).draggable({disabled: true}); // global dragging
            $(self.el).sortable({containment: $(self.el).closest('.content')});
        }

但事情并不是我所期望的。每次我开始拖动元素时,firebug 中显示的 html 都有正确的可拖动/可排序类设置,但它对当前的拖动事件无效。例如,第一次拖动时,该元素既不可拖动也不可排序,尽管 html 已经有相应的类设置。第二次拖动时,它将是可拖动或可排序的。而且,如果您为当前拖动事件设置了可拖动/可排序的元素,则它仅在您下次拖动时才起作用。

总之,您期望当前事件的可拖动/可排序事件只会对下一个事件有效。我想知道这是 jQueryUI 应该是什么,还是我的代码有问题。我应该如何解决它?我应该如何在我的项目中集成可拖动和可排序?

【问题讨论】:

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


    【解决方案1】:

    这是一个预期的行为,要将插件挂接到元素上,它必须监听它何时会被拖放以及将被拖动到哪里。

    通常这两个插件并排工作。所以我认为没有办法做到这一点,而不使元素只能拖动,因为无论如何都需要拖动 droppable。

    【讨论】:

    • 但实际上有很多 iPhone 或 Android 应用程序可以将多种行为集成在一起,例如全局拖动、项目拖动、排序等。这些应用程序如何实现这一目标?并且在桌面浏览器中无法实现?
    • @chaonextdoor,当然,这正是我的意思,拖拽和两个接一个发生的行为,试图将它们分开没有意义吗?
    • 对不起,我不知道你为什么总是提到掉线。我想在这里集成的是在一个 ul 元素中拖动和排序。拖放并不总是伴随着拖动,对吧?这就是为什么 jQueryUI 有两个独立的交互:可拖动和可放置。您可以一起或单独使用它们。这完全取决于你。
    • @chaonextdoor,告诉我如何放下而不拖拽?对于排序,拖动的元素必须放在某处;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 2017-01-23
    • 2017-11-17
    • 1970-01-01
    相关资源
    最近更新 更多