代码之家  ›  专栏  ›  技术社区  ›  Trip

你能在jquery中检测到“拖动”吗?

  •  105
  • Trip  · 技术社区  · 14 年前

    我有一个悸动,当用户点击一个链接时就会出现。

    问题是相同的链接可以被点击和拖动来重新排列。在这种情况下,我不需要出现抽搐。它只需要出现在它真正等待去某个地方的时候。

    我如何使用jquery创建一个事件侦听器 如果单击某个链接,则允许显示筛选程序 ,而不是单击并拖动?

    13 回复  |  直到 6 年前
        1
  •  213
  •   Community basarat    9 年前

    在mousedown上,开始设置状态,如果mousemove事件被激发,记录它,最后在mouseup上,检查鼠标是否移动。如果它移动了,我们就一直在拖。如果我们没有移动,只需点击一下。

    var isDragging = false;
    $("a")
    .mousedown(function() {
        isDragging = false;
    })
    .mousemove(function() {
        isDragging = true;
     })
    .mouseup(function() {
        var wasDragging = isDragging;
        isDragging = false;
        if (!wasDragging) {
            $("#throbble").toggle();
        }
    });
    

    这是一个演示: http://jsfiddle.net/W7tvD/1399/

        2
  •  27
  •   anewcomer    11 年前

    $('#container').on('mousedown', function(e) {
        $(this).data('p0', { x: e.pageX, y: e.pageY });
    }).on('mouseup', function(e) {
        var p0 = $(this).data('p0'),
            p1 = { x: e.pageX, y: e.pageY },
            d = Math.sqrt(Math.pow(p1.x - p0.x, 2) + Math.pow(p1.y - p0.y, 2));
    
        if (d < 4) {
            alert('clicked');
        }
    })
    

        3
  •  15
  •   Hafenkranich user17300673    8 年前

    $( "#draggable" ).draggable({
      start: function() {
    
      },
      drag: function() {
    
      },
      stop: function() {
    
      }
    });
    
        4
  •  4
  •   jnaklaas    9 年前
    $(".draggable")
    .mousedown(function(e){
        $(this).on("mousemove",function(e){
            var p1 = { x: e.pageX, y: e.pageY };
            var p0 = $(this).data("p0") || p1;
            console.log("dragging from x:" + p0.x + " y:" + p0.y + "to x:" + p1.x + " y:" + p1.y);
            $(this).data("p0", p1);
        });
    })
    .mouseup(function(){
        $(this).off("mousemove");
    });
    

        5
  •  3
  •   Abdul Baig    10 年前

    fiddle link

    $(function() {
        var isDragging = false;
        $("#status").html("status:");
        $("a")
        .mousedown(function() {
            $("#status").html("status: DRAGGED");        
        })
        .mouseup(function() {
            $("#status").html("status: dropped");   
        });
    
        $("ul").sortable();
    });
    
        6
  •  1
  •   Anup    11 年前

        7
  •  1
  •   ipfaffen    10 年前

    /**
     * jQuery plugin: Configure mouse click that is triggered only when no mouse move was detected in the action.
     * 
     * @param callback
     */
    jQuery.fn.singleclick = function(callback) {
        return $(this).each(function() {
            var singleClickIsDragging = false;
            var element = $(this);
    
            // Configure mouse down listener.
            element.mousedown(function() {
                $(window).mousemove(function() {
                    singleClickIsDragging = true;
                    $(window).unbind('mousemove');
                });
            });
    
            // Configure mouse up listener.
            element.mouseup(function(event) {
                var wasDragging = singleClickIsDragging;
                singleClickIsDragging = false;
                $(window).unbind('mousemove');
                if(wasDragging) {
                    return;
                }
    
                // Since no mouse move was detected then call callback function.
                callback.call(element, event);
            });
        });
    };
    

    element.singleclick(function(event) {
        alert('Single/simple click!');
    });
    

        8
  •  1
  •   Marcelo Kanzaki    7 年前

    <div class="thing" draggable="false">text</div>
    

    $(function() {
      var pressed, pressX, pressY,
          dragged,
          offset = 3; // helps detect when the user really meant to drag
    
      $(document)
      .on('mousedown', '.thing', function(e) {
        pressX = e.pageX;
        pressY = e.pageY;
        pressed = true;
      })
      .on('mousemove', '.thing', function(e) {
        if (!pressed) return;
        dragged = Math.abs(e.pageX - pressX) > offset ||
                  Math.abs(e.pageY - pressY) > offset;
      })
      .on('mouseup', function() {
        dragged && console.log('Thing dragged');
        pressed = dragged = false;
      });
    });
    
        9
  •  1
  •   Jack    6 年前

    var isDragging = false;
    var mouseDown = false;
    
    $('.test_area')
        .mousedown(function() {
            isDragging = false;
            mouseDown = true;
        })
        .mousemove(function(e) {
            isDragging = true;
    
            if (isDragging === true && mouseDown === true) {
                my_special_function(e);
            }
         })
        .mouseup(function(e) {
    
            var wasDragging = isDragging;
    
            isDragging = false;
            mouseDown = false;
    
            if ( ! wasDragging ) {
                my_special_function(e);
            }
    
        }
    );
    
        10
  •  0
  •   Diodeus - James MacFarlane    14 年前

        11
  •  0
  •   Quasipickle    14 年前

        12
  •  0
  •   Joseph    9 年前
    // here is how you can detect dragging in all four directions
    var isDragging = false;
    $("some DOM element").mousedown(function(e) {
        var previous_x_position = e.pageX;
        var previous_y_position = e.pageY;
    
        $(window).mousemove(function(event) {
            isDragging = true;
            var x_position = event.pageX;
            var y_position = event.pageY;
    
            if (previous_x_position < x_position) {
                alert('moving right');
            } else {
                alert('moving left');
            }
            if (previous_y_position < y_position) {
                alert('moving down');
            } else {
                alert('moving up');
            }
            $(window).unbind("mousemove");
        });
    }).mouseup(function() {
        var wasDragging = isDragging;
        isDragging = false;
        $(window).unbind("mousemove");
    });
    
        13
  •  0
  •   Aiphee    8 年前

    $youtubeSlider.find('a')
        .on('mousedown', function (e) {
            $(this).data('moving', false);
        })
        .on('mousemove', function (e) {
            $(this).data('moving', true);
        })
        .on('mouseup', function (e) {
            if (!$(this).data('moving')) {
                // Open link
            }
        });