【问题标题】:MooTools custom drag eventMooTools 自定义拖动事件
【发布时间】:2014-03-26 00:46:28
【问题描述】:

无论如何在 MooTools 中使用 mousedownmouseupmousemove 事件定义拖动事件。我希望能够执行以下操作:

$('#knob').addEvent('drag', function (e) {
    // Drag event code goes here...
});

【问题讨论】:

  • 你能更好地解释你想要什么吗?您是否查看了 mootools.net 网站上的演示?您可以将代码添加到类中已有的事件中:mootools.net/demos/?demo=Drag.Drop。您还有许多班级活动在这里:mootools.net/docs/more/Drag/Drag#Drag
  • 对不起,我可能应该解释得更好。 HTML5 定义了一个拖放 API,我认为了解 MooTools 和事件的最佳方式是尝试模仿它的功能。请参阅下面的答案,这就是我想要的。

标签: javascript mootools mootools-events


【解决方案1】:

Dragging

尽管 Mootools 已经实现了 drag, drop, slide and similar effects 所需的一切,但编写自己的事件是了解事件如何工作的好方法。以下是如何使用Element.Events Object 添加其他自定义事件的示例。

效果从注册 mousemove 事件的 mousedown 事件开始。当拖动结束时触发 mouseup 事件,删除 mousemove 事件侦听器。

由于可能会发生鼠标离开框(不会触发 mouseup 进行清理),因此也添加了 mouseout 事件。

在效果的每一步,都会启动drag事件处理程序,并将原始事件对象作为参数传递,您可以通过console.log( e.type );查看原始事件的类型

window.addEvent( 'domready', function() {;

    Element.Events.drag = {

        // the function that will get fired when the custom event is added
        onAdd: function() {

            this.addEvents({
                mousedown: function(e) {
                    this.store( 'x', e.page.x - this.getPosition().x );
                    this.store( 'y', e.page.y - this.getPosition().y );

                    this.addEvents({ 
                        mousemove: function(e) {            
                            this.setPosition({
                                x: e.page.x - this.retrieve( 'x' ), 
                                y: e.page.y - this.retrieve( 'y' )
                            });

                            this.fireEvent( 'drag', e );
                        },
                        mouseout: function(e) {
                            this.fireEvent( 'mouseup', e );
                        }
                    });
                },
                mouseup: function(e) {
                    this.removeEvents( 'mousemove' );
                    this.removeEvents( 'mouseout' );
                    this.fireEvent( 'drag', e );
                }

            });
        },

        // the function that will get fired when the custom event is removed
        onRemove: function() {
            this.removeEvents( 'mousedown' );
            this.removeEvents( 'mouseup' );             
        }
    };

    $('draggable').addEvent( 'drag', function( e ) {
        console.log( e.type );
    });


    // $('draggable').removeEvents( 'drag' );

});

一些关于 Mootools 事件的好文章:

【讨论】:

  • 这正是我想要的。我仍然有点不清楚 onAdd() 函数是如何工作的。基本上什么时候 onAdd() 被调用,this.store() 做什么?
  • Mootools store, onAdd 在自定义事件开始时被调用(条件为真)
猜你喜欢
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-18
  • 1970-01-01
  • 2015-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多