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 相关文章推荐
基于JQuery.timer插件实现一个计时器
Apr 25 Javascript
动态创建样式表在各浏览器中的差异测试代码
Sep 13 Javascript
JavaScript数据结构与算法之集合(Set)
Jan 29 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
Mar 06 Javascript
浅谈如何使用 webpack 优化资源
Oct 20 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
Dec 13 Javascript
Angular浏览器插件Batarang介绍及使用
Feb 07 Javascript
浅谈vuepress 踩坑记
Apr 18 Javascript
JavaScript中关于base64的一些事
May 06 Javascript
Vue中使用Echarts仪表盘展示实时数据的实现
Nov 01 Javascript
如何使用gpu.js改善JavaScript的性能
Dec 01 Javascript
微信小程序实现天气预报功能(附源码)
Dec 10 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
PHP中的array数组类型分析说明
2010/07/27 PHP
PHP批量查询WordPress留言者E-mail地址实现方法
2015/02/15 PHP
php使用crypt()函数进行加密
2017/06/08 PHP
php使用curl伪造来源ip和refer的方法示例
2018/05/08 PHP
javascript限制用户只能输汉字中文的方法
2014/11/20 Javascript
详解JS函数重载
2014/12/04 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
原生JS获取元素集合的子元素宽度实例
2016/12/14 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(一)
2017/01/21 Javascript
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
2017/09/26 Javascript
基于substring()和substr()的使用以及区别(实例讲解)
2017/12/28 Javascript
vue实现tab切换外加样式切换方法
2018/03/16 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
详解angular2 控制视图的封装模式
2018/12/27 Javascript
详解微信小程序自定义组件的实现及数据交互
2019/07/22 Javascript
基于Node的Axure文件在线预览的实现代码
2019/08/28 Javascript
JS获取当前时间的年月日时分秒及时间的格式化的方法
2019/12/18 Javascript
javascript实现简易的计算器
2020/01/17 Javascript
[01:59]深扒TI7聊天轮盘语音出处 1
2017/05/11 DOTA
python继承和抽象类的实现方法
2015/01/14 Python
Python数据类型详解(二)列表
2016/05/08 Python
numpy.linspace函数具体使用详解
2019/05/27 Python
python Popen 获取输出,等待运行完成示例
2019/12/30 Python
python实现ftp文件传输系统(案例分析)
2020/03/20 Python
python实现canny边缘检测
2020/09/14 Python
Anya Hindmarch官网:奢侈设计师手袋及配饰
2018/11/15 全球购物
丝绸和人造花卉、植物和树木:Nearly Natural
2018/11/28 全球购物
C/C++程序员常见面试题二
2015/11/19 面试题
锅炉工岗位职责
2015/02/13 职场文书
家长对孩子的寄语
2015/02/26 职场文书
关于环保的广播稿
2015/12/17 职场文书
MySQL 用 limit 为什么会影响性能
2021/09/15 MySQL
Python字符串常规操作小结
2022/04/03 Python
我家女友可不止可爱呢 公开OP主题曲无字幕动画MV
2022/04/11 日漫
纯CSS实现一个简单步骤条的示例代码
2022/07/15 HTML / CSS