使用zepto结合touchjs实现元素的拖动效果

1. HTML部分

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1, maximum-scale=1,minimum-scale=1,user-scalable=no"
    />
    <title>移动端拖拽效果</title>
    <link rel="shortcut icon" href="../favicon.ico" type="image/x-icon" />
    <link rel="stylesheet" href="css/common.css" />
    <link rel="stylesheet" href="css/task1.css" />
    <script src="js/rem.js"></script>
    <script src="js/touch-0.2.14.js"></script>
    <script src="js/zepto.min.js"></script>
  </head>
  <body>
    <div class="box"></div>
    <script src="js/task1.js"></script>
  </body>
</html>

2. CSS部分

.box {
  position: absolute;
  top: 1rem;
  left: 1rem;
  width: 2rem;
  height: 2rem;
  background-color: blue;
}

3. js部分

$(function () {
  // 获得.box元素
  let box = $('.box')
  // 获得.box元素left值
  let left = Number.parseFloat(box.css('left'))
  // 获得.box元素top值
  let top = Number.parseFloat(box.css('top'))
  // 获得.box元素最大top值
  let maxTop = $(window).height() - box.height()
  // 获得.box元素最大left值
  let maxLeft = $(window).width() - box.width()
  // 元素被拖动时,在x, y轴向上的位移距离
  let x = 0
  let y = 0
  // 监听box的拖动事件
  box.on('drag', function (e) {
    // 获得触摸点在屏幕上x, y轴向上的偏移量distanceX,distanceY
    let {
      detail: { distanceX, distanceY },
    } = e
    x = distanceX
    y = distanceY
    // 计算当前元素拖动后的top值
    let currentTop = y + top
    // 判断最小的top值为0
    if (currentTop < 0) {
      currentTop = 0
    }
    // 判断box元素的最大top值为maxTop
    if (currentTop > maxTop) {
      currentTop = maxTop
    }
    // 计算当前元素拖动后的left值
    let currentLeft = left + x
    // 判断最小的left值为0
    if (currentLeft < 0) {
      currentLeft = 0
    }
    // 判断box元素的最大left值为maxLeft
    if (currentLeft > maxLeft) {
      currentLeft = maxLeft
    }
    // 设置box元素的top,left值
    $(this).css({ top: currentTop, left: currentLeft })
  })
  // 拖动结束时要重置top和left的值
  box.on('dragend', function () {
    // 拖动结束后,重置元素的left,top
    left += x
    top += y
  })
})

4. 总结

项目依赖touch-0.2.14.js中的drag和dragend事件,同时利用zepto计算和设置元素的样式,监听darg和dragend事件,最后要重置元素的top和left值,否则效果不正确

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值