移动端拖拽
Jonnzer Lv4

今天聊一下移动端的拖拽,上周一个拖动的需求,正好整理下

场景是这样的
需要在H5邀请函里做名字栏位的拖拽,并且要能记住它的位置以便于图片合成。
用到的技术
它们都属于原生JS - 移动端监听拖拽的API。
  • touchStart开始触摸屏幕时就触发
  • touchmove:在屏幕上滑动时触发
  • touchend: 屏幕上离开的时触发  
  • 其中touchStarttouchmove会提供touch对象,包含
  • pageX:触摸目标在页面中的x坐标。
  • pageY:触摸目标在页面中的y坐标。
    这次只用了这两个参数
    还是上点代码吧
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    function dragStart(e) {
    isdrag = true;
    tempX = parseInt($('.guest_name').css('left') + 0);
    tempY = parseInt($('.guest_name').css('top') + 0);
    x = e.touches[0].pageX;
    y = e.touches[0].pageY;
    }
    function dragMove(e) {
    if (isdrag) { // 这里 e.touches[0].pageY中的pageY
    let curX = tempX + e.touches[0].pageX - x;
    let curY = tempY + e.touches[0].pageY - y;
    // 边界判断
    // curX = curX < 0 ? 0 : curX;
    curY = curY < 0 ? 0 : curY;
    curX = curX < document.documentElement.clientWidth - 80 ? curX : document.documentElement.clientWidth - 80;
    curY = curY < $('.firstPageBackground').height() - 25 ? curY : $('.firstPageBackground').height() - 25; // 这里的高度限制 $('.firstPageBackground').height() - 25 是来源于业务上,邀请函画布的高度,控制名字不能超出限制。25是名字本身的高度。都以px为单位。
    $('.guest_name').css({
    'left': 0,
    'top': curY
    });
    // 禁止浏览器默认事件
    e.preventDefault();
    }
    }
    function dragEnd() {
    isdrag = false;
    }
    好啦,还是别卖关子了,其实原理就是,利用了两次监听移动提供的pageX和pageY 之差。将差值加到原来的绝对定位,left和top里。让dom的位置发生变化。从而达到拖拽的效果。
参考链接:

blog
blog

  • 本文标题:移动端拖拽
  • 本文作者:Jonnzer
  • 创建时间:2019-02-25 20:30:49
  • 本文链接:https://jonnzer.github.io/2019/02/25/移动端拖拽/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论