vue移动端写的拖拽功能示例代码


Posted in Javascript onSeptember 09, 2020

相关知识点

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

效果图

vue移动端写的拖拽功能示例代码

实现步骤html

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

<template>
	<div id="webId">
  	<div>你的web页面</div>
	  <!-- 1.1 如果碰到滑动问题,请检查这里是否属于同一点。 -->
	  <!-- 悬浮的HTML -->
	  <div class="xuanfu" id="moveDiv"
	   @mousedown="down()" @touchstart="down()"
	   @mousemove.prevent.stop="move()"
     @touchmove.prevent.stop="move()"
	   @mouseup="end()" @touchend="end()"
	  >
	   <div class="yuanqiu">11</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;
  let 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){
   let 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;
   //添加限制:只允许在屏幕内拖动
	 const maxWidth = document.body.clientWidth - 54;//屏幕宽度减去悬浮框宽高
	 const maxHeight = document.body.clientHeight - 54;
	 if (this.xPum < 0) { //屏幕x限制
		this.xPum = 0;
	 } else if (this.xPum>maxWidth) {
	  this.xPum = maxWidth;
	 }
	 if (this.yPum < 0) { //屏幕y限制
		this.yPum = 0;
	 } else if (this.yPum>maxHeight) {
		this.yPum = maxHeight;
	 }
   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>
 /*css样式可自定义 仅提供参考*/
 #webId { position: relative; }
 .xuanfu {
  height: 54px; /* rem = 12px */
  width: 54px;
  /*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>

总结

到此这篇关于vue移动端写的拖拽功能示例代码的文章就介绍到这了,更多相关vue移动端拖拽内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
对javascript的一点点认识总结《javascript高级程序设计》读书笔记
Nov 30 Javascript
原生Js页面滚动延迟加载图片实现原理及过程
Jun 24 Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
Jun 24 Javascript
jQuery多个input求和的实现方法
Feb 12 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
Jan 10 Javascript
底部悬浮通栏可以关闭广告位的实现方法
Jun 01 Javascript
js 判断附件后缀的简单实现方法
Oct 11 Javascript
jquery与ajax获取特殊字符实例详解
Jan 08 Javascript
Vue的watch和computed方法的使用及区别介绍
Sep 06 Javascript
过滤器vue.filters的使用方法实现
Sep 18 Javascript
微信小程序文章详情功能完整实例
Jun 03 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
Sep 11 Javascript
vue路由的配置和页面切换详解
Sep 09 #Javascript
JavaScript 实现下雪特效的示例代码
Sep 09 #Javascript
在Vue中获取自定义属性方法:data-id的实例
Sep 09 #Javascript
vue+高德地图实现地图搜索及点击定位操作
Sep 09 #Javascript
vue实现几秒后跳转新页面代码
Sep 09 #Javascript
JS异步宏队列微队列原理详解
Sep 09 #Javascript
vue 项目软键盘回车触发搜索事件
Sep 09 #Javascript
You might like
德生PL330测评
2021/03/02 无线电
PHP中显示格式化的用户输入
2006/10/09 PHP
yii分页组件用法实例分析
2015/12/28 PHP
弹出广告特效(一个IP只弹出一次)的代码
2007/07/27 Javascript
js 解决“options为空或不是对象”
2008/12/22 Javascript
JS比较两个时间大小的简单示例代码
2013/12/20 Javascript
jQuery中ajax的load()方法用法实例
2014/12/26 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
2015/03/04 Javascript
详解javascript高级定时器
2015/12/31 Javascript
TypeScript Type Innference(类型判断)
2016/03/10 Javascript
mvvm双向绑定机制的原理和实现代码(推荐)
2016/06/07 Javascript
详解Python中logging日志模块在多进程环境下的使用
2016/12/26 Javascript
JavaScript中在光标处插入添加文本标签节点的详细方法
2017/03/22 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
[01:08:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS LGD-CDEC
2014/05/22 DOTA
[01:52]DOTA2完美大师赛Vega战队趣味视频——kpii老师小课堂
2017/11/25 DOTA
Python学习笔记之os模块使用总结
2014/11/03 Python
Python实现生成简单的Makefile文件代码示例
2015/03/10 Python
python创建进程fork用法
2015/06/04 Python
python学习之面向对象【入门初级篇】
2017/01/21 Python
[原创]python爬虫(入门教程、视频教程)
2018/01/08 Python
Python Django中间件,中间件函数,全局异常处理操作示例
2019/11/08 Python
深入解读CSS3中transform变换模型的渲染
2016/05/27 HTML / CSS
HTML5 图片悬停放大的实现代码示例
2019/12/04 HTML / CSS
CHARLES & KEITH台湾官网:新加坡时尚品牌
2019/07/30 全球购物
意大利在线眼镜精品店:Ottica Lipari
2019/11/11 全球购物
师范生教师实习自我鉴定
2013/09/27 职场文书
自我评价是什么
2014/01/04 职场文书
syb养殖创业计划书
2014/01/09 职场文书
单位未婚证明范本
2014/01/18 职场文书
材料物理专业求职信
2014/09/01 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/09/30 职场文书
故宫的导游词
2015/01/31 职场文书
2016教师廉洁教育心得体会
2016/01/13 职场文书
pytorch 梯度NAN异常值的解决方案
2021/06/05 Python
Shell脚本一键安装Nginx服务自定义Nginx版本
2022/03/20 Servers