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实现自定义对话框的代码
Jun 15 Javascript
js下获取div中的数据的原理分析
Apr 07 Javascript
jQuery 获取对象 基本选择与层级
May 31 Javascript
js关闭子窗体刷新父窗体实现方法
Dec 04 Javascript
取消选中单选框radio的三种方式示例介绍
Dec 23 Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
Dec 16 Javascript
悬浮广告方法日常收集整理
Mar 18 Javascript
vue实现添加标签demo示例代码
Jan 21 Javascript
详解用node-images 打造简易图片服务器
May 08 Javascript
微信通过页面(H5)直接打开本地app的解决方法
Sep 09 Javascript
Koa从零搭建到Api实现项目的搭建方法
Jul 30 Javascript
详解如何在Javascript和Sass之间共享变量
Nov 13 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 选项及相关信息函数库
2006/12/04 PHP
php处理带有中文URL的方法
2016/07/11 PHP
In Javascript Class, how to call the prototype method.(three method)
2007/01/09 Javascript
Date对象格式化函数代码
2010/07/17 Javascript
jquery如何根据值设置默认的选中项
2014/03/17 Javascript
JavaScript实现列出数组中最长的连续数
2014/12/29 Javascript
jQuery动画出现连续触发、滞后反复执行的解决方法
2015/01/28 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
JS实现双击屏幕滚动效果代码
2015/10/28 Javascript
jquery实现网页的页面平滑滚动效果代码
2015/11/02 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
JavaScript必知必会(七)js对象继承
2016/06/08 Javascript
JavaScript编程设计模式之构造器模式实例分析
2017/10/25 Javascript
详解webpack2异步加载套路
2018/09/14 Javascript
vue项目中使用fetch的实现方法
2019/04/25 Javascript
JS开发常用工具函数(小结)
2019/07/04 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
2019/07/22 Javascript
基于element-ui封装可搜索的懒加载tree组件的实现
2020/05/22 Javascript
在react-antd中弹出层form内容传递给父组件的操作
2020/10/24 Javascript
Electron+vue从零开始打造一个本地播放器的方法示例
2020/10/27 Javascript
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
Python部署web开发程序的几种方法
2017/05/05 Python
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
2017/07/20 Python
速记Python布尔值
2017/11/09 Python
详解numpy的argmax的具体使用
2019/05/27 Python
python获取整个网页源码的方法
2020/08/03 Python
Python txt文件常用读写操作代码实例
2020/08/03 Python
澳大利亚礼品卡商店:Gift Card Store
2019/06/24 全球购物
传播学毕业生求职信
2013/10/11 职场文书
护士个人简历自荐信
2013/10/18 职场文书
小学生手册家长评语
2014/04/16 职场文书
抗洪救灾先进集体事迹材料
2014/05/26 职场文书
公司文体活动总结
2015/05/07 职场文书
让子弹飞观后感
2015/06/11 职场文书
2016年过年放假安排通知
2015/08/18 职场文书
MySQL中出现乱码问题的终极解决宝典
2021/05/26 MySQL