【问题标题】:jQuery Droppable: what is it listening for to trigger 'hover' property?jQuery Droppable:触发“悬停”属性在监听什么?
【发布时间】:2014-01-23 02:54:34
【问题描述】:

当设置一个 jQuery droppable 时,您可以根据悬停在它上面的可拖动对象来分配一个类(或函数),如下所示:

$(".myDroppable")
    .droppable({
        hoverClass : 'droppableStyle'
    })

简单且默认使用可拖动的 jQuery 效果很好。

但是,我正在研究一种依赖于触摸的解决方案,因此,我选择不使用 jQuery 可拖动对象作为拖动部分。但是,我仍然想使用 Droppables。

问题:什么是可放置的“侦听”以确定项目是否被拖到它上面?有什么方法可以从我的家中触发一些鼠标事件,使其在被拖动时可以拖动,这会发出 droppable 的 hoverClass 的信号?

【问题讨论】:

    标签: jquery touch mouseevent droppable jquery-ui-droppable


    【解决方案1】:

    我相信overout 事件会触发此选项,尽管我还没有使用不带可拖动的droppable 来测试它。您可以使用accept 选项来选择您自制的可拖动对象,并且可放置对象应相应地对其进行处理。

    $(".myDroppable")
        .droppable({
            hoverClass: "droppableStyle",
            accept: ".homeMadeDraggable"
    });
    

    如果不查看您的代码,虽然很难说出究竟会发生什么。查看droppable 的源代码,并结合阅读api,它应该阐明表面之下发生的事情以及它是否适用于您的情况。

            _over: function(event) {
    
                var draggable = $.ui.ddmanager.current;
                if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element
    
                if (this.options.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
                        if(this.options.hoverClass) this.element.addClass(this.options.hoverClass);
                        this._trigger('over', event, this.ui(draggable));
                }
    
        },
    
        _out: function(event) {
    
                var draggable = $.ui.ddmanager.current;
                if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element
    
                if (this.options.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
                        if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass);
                        this._trigger('out', event, this.ui(draggable));
                }
    
        },
    

    【讨论】:

    • 谢谢!就问题而言,这绝对有效,所以这是很好的信息。关键是“接受”选项。唉,我的问题与通过触摸启用双可拖动有关——我已经用我的 DIY 可拖动完成了,但是,唉,看起来 Droppables 的方式是一样的……没有设置为处理并发丢弃。哦,好吧。
    • 您应该能够处理两个可拖动对象。 accept 选项可以采用函数回调来处理此问题 - How to accept multiple items in a droppable。需要明确的是,当您说“通过触摸进行双重拖动”时,您的意思是指用两根手指同时拖动两个项目吗?
    • 是的,这就是我们的目标……同时拥有两个独立的可拖动对象。唉,看来 jQuery UI 对鼠标事件的依赖是罪魁祸首。触摸打孔虽然很棒,但仍将触摸转换为鼠标事件,它看起来要么是 jQuery,要么更有可能是浏览器本身,只能识别一个鼠标光标(这是有道理的)。我确实找到了使用“draggableTouch.js”拖动部分的解决方法。所以现在看来​​我需要推出自己的可放置逻辑来适应。
    猜你喜欢
    • 2018-09-20
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    相关资源
    最近更新 更多