代码之家  ›  专栏  ›  技术社区  ›  Glenn Nelson

jQuery多个事件

  •  4
  • Glenn Nelson  · 技术社区  · 14 年前

    我知道如何绑定多个事件等等。我想做的是让多个事件发生来触发一个函数。

    就像

    有办法吗?是可能还是我只是在做梦。

    5 回复  |  直到 14 年前
        1
  •  3
  •   user113716    14 年前

    有了更好的理解,你可以做的一件事就是举办一个活动 bind unbind 其他的:

    http://jsfiddle.net/ZMeUv/

    $(myselector).mousedown( function() {
        $(document).mousemove(function() {
            // do something
        });
    
        $(document).mouseup(function() {
            $(this).unbind();  // unbind events from document
        });
    });
    

    mousemove

        2
  •  3
  •   Anurag    14 年前

    您可以使用jQuery的 special events 请注意,此代码特定于jquery1.4.2

    使用它的一个优点是只绑定 mousemove , mouseout ,和 mousedown 处理程序对每个元素执行一次,无论该元素绑定到 drag

    $("..").bind("drag", function() {
       ...
    });
    

    我将尝试添加更多关于实际情况的文档,因为我必须承认,它看起来非常不直观。结帐另一个好的 article 关于这个话题。

    看看这个例子 here . 要创建此自定义特殊事件,请使用:

    jQuery.event.special.drag = {
        // invoked each time we bind drag to an element
        add: function(obj) {
            var originalHandler = obj.handler;
    
            obj.handler = function(event) {
                var el = jQuery(this);
    
                if(el.data('mousePressed')) {
                    return originalHandler.apply(this, arguments);
                }
            };
        },
    
        // invoked only the first time drag is bound per element
        setup: function(data, namespaces) {
            var el = jQuery(this);
    
            el.data('mousePressed', false);
            el.bind('mousedown', function() {
                jQuery(this).data('mousePressed', true);
            });
            jQuery(document).bind('mouseup', function() {
                el.data('mousePressed', false);
            });
            el.bind('mousemove', jQuery.event.special.drag.handler);
        },
    
        // invoked when all drag events are removed from element
        teardown: function(namespaces) {
            var el = jQuery(this);
    
            jQuery.removeData(this, 'mousePressed');
            el.unbind('mousedown');
            el.unbind('mouseup');
        },
    
        // our wrapper event is bound to "mousemove" and not "bind"
        // change event type, so all attached drag handlers are fired
        handler: function(event) {
            event.type = 'drag';
            jQuery.event.handle.apply(this, arguments);
        }
    };
    
        3
  •  2
  •   Alexsander Akers    14 年前

    试试这样的?

    var isDown = false;
    
    $(sel).mousedown(function() {
        isDown = true;
    });
    
    $(sel).mouseup(function() {
        isDown = false;
    });
    
    $(sel).mousemove(function() {
        if (isDown) {
             // Mouse is clicked and is moving.
        }
    });
    
        4
  •  0
  •   Ken Redler    14 年前

    如果我没看错你的问题,你问的是需要多个事件的组合来触发一个函数。实现这类事情是可能的,但我认为这在很大程度上取决于具体事件及其组合的逻辑或不合逻辑。例如 mousemove 事件:

    …每当鼠标 在极少量的 时间。

    把它和 mousedown 事件,也就是每次点击一次。如何组合?jQueryAPI继续声明:

    一个常见的模式是绑定 移动鼠标 鼠标按下 把它解开 从相应的 mouseup 处理程序。 如果执行这个序列 松开鼠标 事件可能被发送到其他位置 事件 是。为了说明这一点 松开鼠标 处理程序通常应该绑定到 DOM树中的一个元素, 例如 <body> .

    参考文献: jQuery API: mousemove()

        5
  •  0
  •   user372743 user372743    14 年前

    var m_down=假; $(this).mousedown(function(){

     m_down = true;
    

    });

     m_down = false;
    

    $(this).mousemove(function(){

     // Code to occur here