vue实现移动端触屏拖拽功能


Posted in Javascript onAugust 21, 2020

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

1 首先创建一个div

<div class="floatball" id="floatball"
 @mousedown="down" @touchstart.stop="down"
 @mousemove="move" @touchmove.stop="move"
 @mouseup="end" @touchend.stop="end" @click="showRewardDesc"
 :style="{top:position.y+'px', left:position.x+'px'}">
 奖励规则
</div>

2 给 div 附上样式

<style>
 .floatball{
 color:white;
 height:50px;
 width: 50px;
 padding: 5px;
 z-index: 990;
 position: fixed;
 top: 60px;
 right: 320px;
 border-radius: 50%;
 background-color: rgba(29, 157, 237,0.8);
 }

</style>

3 给 div 附上事件

准备四个变量

1)、屏幕长

var screenHeight = window.screen.height

2)、屏幕宽

var screenWidth = window.screen.width

3)、初始触控点 距离 div 左上角的横向距离 dx

4)、初始触控点 距离 div 左上角的竖向距离 dy

vue实现移动端触屏拖拽功能

在开始拖拽时,计算出鼠标点(初始触控点)和 div左上角顶点的距离

down(event){
 this.flags = true;
 var touch ;
 if(event.touches){
 touch = event.touches[0];
 }else {
 touch = event;
 }
 console.log('鼠标点所在位置', touch.clientX,touch.clientY)
 console.log('div左上角位置', event.target.offsetTop,event.target.offsetLeft)
 dx = touch.clientX - event.target.offsetLeft
 dy = touch.clientY - event.target.offsetTop
},

拖拽进行时,将触控点的位置赋值给 div

// 定位滑块的位置
this.position.x = touch.clientX - dx;
this.position.y = touch.clientY - dy;
// 限制滑块超出页面
// console.log('屏幕大小', screenWidth, screenHeight)
if (this.position.x < 0) {
 this.position.x = 0
} else if (this.position.x > screenWidth - touch.target.clientWidth) {
 this.position.x = screenWidth - touch.target.clientWidth
}
if (this.position.y < 0) {
 this.position.y = 0
} else if (this.position.y > screenHeight - touch.target.clientHeight) {
 this.position.y = screenHeight - touch.target.clientHeight
}

拖拽结束

//鼠标释放时候的函数
end(){
 console.log('end')
 this.flags = false;
},

全部代码

<template>
 <div class="floatball" id="floatball"
 @mousedown="down" @touchstart.stop="down"
 @mousemove="move" @touchmove.stop="move"
 @mouseup="end" @touchend.stop="end"
 :style="{top:position.y+'px', left:position.x+'px'}">
 奖励规则
 </div>
</template>

<script>
// 鼠标位置和div的左上角位置 差值
var dx,dy
var screenWidth = window.screen.width
var screenHeight = window.screen.height

export default {
 data() {
 return {
 flags: false,
 position: {
 x: 320,
 y: 60
 },
 }
 },
 

 methods: {
 // 实现移动端拖拽
 down(event){
 this.flags = true;
 var touch ;
 if(event.touches){
 touch = event.touches[0];
 }else {
 touch = event;
 }
 console.log('鼠标点所在位置', touch.clientX,touch.clientY)
 console.log('div左上角位置', event.target.offsetTop,event.target.offsetLeft)
 dx = touch.clientX - event.target.offsetLeft
 dy = touch.clientY - event.target.offsetTop
 },
 move() {
 if (this.flags) {
 var touch ;
 if (event.touches) {
 touch = event.touches[0];
 } else {
 touch = event;
 }
 // 定位滑块的位置
 this.position.x = touch.clientX - dx;
 this.position.y = touch.clientY - dy;
 // 限制滑块超出页面
 // console.log('屏幕大小', screenWidth, screenHeight )
 if (this.position.x < 0) {
 this.position.x = 0
 } else if (this.position.x > screenWidth - touch.target.clientWidth) {
 this.position.x = screenWidth - touch.target.clientWidth
 }
 if (this.position.y < 0) {
 this.position.y = 0
 } else if (this.position.y > screenHeight - touch.target.clientHeight) {
 this.position.y = screenHeight - touch.target.clientHeight
 }
 //阻止页面的滑动默认事件
 document.addEventListener("touchmove",function(){
 event.preventDefault();
 },false);
 }
 },
 //鼠标释放时候的函数
 end(){
 console.log('end')
 this.flags = false;
 },

 }
 
}
</script>

<style>
 .floatball{
 color:white;
 height:50px;
 width: 50px;
 padding: 5px;
 z-index: 990;
 position: fixed;
 top: 60px;
 right: 320px;
 border-radius: 50%;
 background-color: rgba(29, 157, 237,0.8);
 }

</style>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JAVASCRIPT HashTable
Jan 22 Javascript
与jquery serializeArray()一起使用的函数,主要来方便提交表单
Jan 31 Javascript
一个支付页面DEMO附截图
Jul 22 Javascript
jQuery实现跟随鼠标运动图层效果的方法
Feb 02 Javascript
js实现动态加载脚本的方法实例汇总
Nov 02 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
Jun 03 Javascript
AngularJS入门教程之服务(Service)
Jul 27 Javascript
jquery对象和DOM对象的相互转换详解
Oct 18 Javascript
基于vue实现多引擎搜索及关键字提示
Mar 16 Javascript
详解angular ui-grid之过滤器设置
Jun 07 Javascript
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
Nov 22 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
Jul 22 Javascript
vue实现移动端拖动排序
Aug 21 #Javascript
微信小程序实现聊天室
Aug 21 #Javascript
vue实现折线图 可按时间查询
Aug 21 #Javascript
Vue按时间段查询数据组件使用详解
Aug 21 #Javascript
js绘制一条直线并旋转45度
Aug 21 #Javascript
AJAX XMLHttpRequest对象创建使用详解
Aug 20 #Javascript
基于vue.js仿淘宝收货地址并设置默认地址的案例分析
Aug 20 #Javascript
You might like
php中的boolean(布尔)类型详解
2013/10/28 PHP
PHP ajax+jQuery 实现批量删除功能实例代码小结
2018/12/06 PHP
在Laravel5中正确设置文件权限的方法
2019/05/22 PHP
Windows服务器中PHP如何安装redis扩展
2019/09/27 PHP
jQuery 各种浏览器下获得日期区别
2008/12/22 Javascript
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
jQuery表单域选择器用法分析
2015/02/10 Javascript
jQuery获取元素父节点的方法
2016/06/21 Javascript
JavaScript调用模式与this关键字绑定的关系
2018/04/21 Javascript
Vue.js 时间转换代码及时间戳转时间字符串
2018/10/16 Javascript
JavaScript事件对象深入详解
2018/12/30 Javascript
JS中超越现实的匿名函数用法实例分析
2019/06/21 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
Vue通过WebSocket建立长连接的实现代码
2019/11/05 Javascript
关于Python正则表达式 findall函数问题详解
2018/03/22 Python
利用Python将数值型特征进行离散化操作的方法
2018/11/06 Python
一百行python代码将图片转成字符画
2021/02/19 Python
浅谈Python中的异常和JSON读写数据的实现
2020/02/27 Python
Python 生成VOC格式的标签实例
2020/03/10 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
2020/03/23 Python
Python 通过正则表达式快速获取电影的下载地址
2020/08/17 Python
Python文件操作及内置函数flush原理解析
2020/10/13 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
HTML5教程之html 5 本地数据库(Web Sql Database)
2014/04/03 HTML / CSS
Mio Skincare法国官网:身体紧致及孕期身体护理
2018/04/04 全球购物
美国校服网上商店:French Toast
2019/10/08 全球购物
Oasis服装官网:时尚女装在线
2020/07/09 全球购物
List, Set, Map是否继承自Collection接口?
2016/05/16 面试题
通用求职信范文模板分享
2013/12/27 职场文书
公证委托书大全
2014/04/04 职场文书
大学新生军训自我鉴定
2014/09/18 职场文书
初中作文评语
2014/12/25 职场文书
五年级下册复习计划
2015/01/19 职场文书
关于五一放假的通知
2015/08/18 职场文书
2016年“世界环境日”校园广播稿
2015/12/18 职场文书
我的中国梦心得体会范文
2016/01/05 职场文书