JQ实现拖拽效果

行间拖拽效果

在这里插入图片描述

拖拽思路

想实现拖拽我们首先想到需要 3 个事件:

  • mousedown 鼠标按下事件
  • mousemove 鼠标移动事件
  • mouseup 鼠标抬起事件
function drag() {
  $(this).on('mousedown', function () {
    $(document).on('mousemove', function () {
      // 实现元素跟随鼠标移动..
    });
    $(document).on('mouseup', function () {
      // 解绑鼠标移动事件
    });
  });
}

要注意我们不能给被点击的元素去绑定移动事件以及鼠标抬起事件。这样会造成鼠标移动过快离开 dom 元素时,失去监听效果。

错误代码❌:

function drag() {
  var oldX, oldY, newX, newY;
  this.on('mousedown', function (e) {
    $(this).css('position', 'relative');
    oldX = e.clientX;
    oldY = e.clientY;
    var $self = $(this);
    //给元素绑定
    $self.on('mousemove', function (e) {
      var newX = e.clientX,
        newY = e.clientY;
      $self.css('left', '+=' + (newX - oldX));
      $self.css('top', '+=' + (newY - oldY));
      oldX = newX;
      oldY = newY;
      return false;
    });
    //给元素绑定
    $self.on('mouseup', function () {
      $self.off('mousemove');
    });
  });
}

如图所示:
在这里插入图片描述


正确代码✅ :

$.fn.extend({
  drag: function () {
    var oldX, oldY, newX, newY;
    this.on('mousedown', function (e) {
      $(this).css('position', 'relative');
      oldX = e.clientX;
      oldY = e.clientY;
      var $self = $(this);
      $(document).on('mousemove', function (e) {
        var newX = e.clientX,
          newY = e.clientY;
        $self.css('left', '+=' + (newX - oldX));
        $self.css('top', '+=' + (newY - oldY));
        oldX = newX;
        oldY = newY;
        return false;
      });
      $(document).on('mouseup', function () {
        $(document).off();
      });
    });
  }
});

我在这里将方法封装在了 JQ 原型上,后面的 JQ 对象都可以使用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值