首页 > 编程 > JavaScript > 正文

vuejs移动端实现div拖拽移动

2019-11-19 11:08:00
字体:
来源:转载
供稿:网友

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逻辑,基本上,问题不大。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表