视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
vuejs移动端实现div拖拽移动
2020-11-27 21:53:18 责编:小采
文档


vue移动端实现div拖拽移动,供大家参考,具体内容如下

本文讲述,在使用VUE的移动端实现类似于iPhone的悬浮窗的效果。

相关知识点

  • touchstart 当在屏幕上按下手指时触发
  • touchmove 当在屏幕上移动手指时触发
  • touchend 当在屏幕上抬起手指时触发
  • mousedown mousemove mouseup对应的是PC端的事件
  • touchcancel 当一些更高级别的事件发生的时候(如电话接入或者弹出信息)会取消当前的touch操作,即触发touchcancel。一般会在touchcancel时暂停游戏、存档等操作。
  • 效果图

    实现步骤

    (一)html

    总结了一下评论,好像发现大家都碰到了滑动的问题。就在这里提醒一下吧。可将该悬浮 DIV 同你的 scroller web 同级。 ---- (log: 2018-08-21)

    html结构: <template> <div>你的web页面</div> <div>悬浮DIV</div> </template>

    <template>
     <div id="webId">
     <div>你的web页面</div>
     <!-- 1.1 如果碰到滑动问题,请检查这里是否属于同一点。 -->
     <!-- 悬浮的HTML -->
     <div v-if="!isShow" class="xuanfu" id="moveDiv"
     @mousedown="down" @touchstart="down"
     @mousemove="move" @touchmove="move"
     @mouseup="end" @touchend="end"
     >
     <div class="yuanqiu">
     {{pageInfo.totalPage}}
     </div>
     </div>
     </div>
    </template>

    (二)JS

    <script>
    data() {
     return {
     flags: false,
     position: { x: 0, y: 0 },
     nx: '', ny: '', dx: '', dy: '', xPum: '', yPum: '',
     }
    }
    
    methods: {
     // 实现移动端拖拽
     down(){
     this.flags = true;
     var touch;
     if(event.touches){
     touch = event.touches[0];
     }else {
     touch = event;
     }
     this.position.x = touch.clientX;
     this.position.y = touch.clientY;
     this.dx = moveDiv.offsetLeft;
     this.dy = moveDiv.offsetTop;
     },
     move(){
     if(this.flags){
     var touch ;
     if(event.touches){
     touch = event.touches[0];
     }else {
     touch = event;
     }
     this.nx = touch.clientX - this.position.x;
     this.ny = touch.clientY - this.position.y;
     this.xPum = this.dx+this.nx;
     this.yPum = this.dy+this.ny;
     moveDiv.style.left = this.xPum+"px";
     moveDiv.style.top = this.yPum +"px";
     //阻止页面的滑动默认事件
     document.addEventListener("touchmove",function(){ // 1.2 如果碰到滑动问题,请注意是否获取到 touchmove
     event.preventDefault();//jq 阻止冒泡事件
     // event.stopPropagation(); // 如果没有引入jq 就用 stopPropagation()
     },false);
     }
     },
    //鼠标释放时候的函数
     end(){
     this.flags = false;
     },
    }
    </script>

    (三)CSS

    <style>
     .xuanfu {
     height: 4.5rem;
     width: 4.5rem;
     /*1.3 如果碰到滑动问题,请检查 z-index。z-index需比web大一级*/
     z-index: 999;
     position: fixed;
     top: 4.2rem;
     right: 3.2rem;
     border-radius: 0.8rem;
     background-color: rgba(0, 0, 0, 0.55);
     }
     .yuanqiu {
     height: 2.7rem;
     width: 2.7rem;
     border: 0.3rem solid rgba(140, 136, 136, 0.5);
     margin: 0.65rem auto;
     color: #000000;
     font-size: 1.6rem;
     line-height: 2.7rem;
     text-align: center;
     border-radius: 100%;
     background-color: #ffffff;
     }
    </style>

    实现好JS逻辑,基本上,问题不大。

    下载本文
    显示全文
    专题