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 相关文章推荐
JS函数验证总结(方便js客户端输入验证)
Oct 29 Javascript
JavaScript:Div层拖动效果实例代码
Aug 06 Javascript
JS获取select的value和text值的简单实例
Feb 26 Javascript
纯javascript移动优先的幻灯片效果
Nov 02 Javascript
jQuery点击按钮弹出遮罩层且内容居中特效
Dec 14 Javascript
超实用的JavaScript表单代码段
Feb 26 Javascript
用原生js统计文本行数的简单示例
Aug 19 Javascript
jQuery实现的导航下拉菜单效果示例
Sep 05 Javascript
基于jquery实现弹幕效果
Sep 29 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
Jul 27 Javascript
在 Angular中 使用 Lodash 的方法
Feb 11 Javascript
深入理解vue-class-component源码阅读
Feb 18 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
正则表达式语法
2006/10/09 Javascript
php 获取mysql数据库信息代码
2009/03/12 PHP
根据ip调用新浪api获取城市名并转成拼音
2014/03/07 PHP
JavaScript页面刷新与弹出窗口问题的解决方法
2010/03/02 Javascript
js变量以及其作用域详解
2020/07/18 Javascript
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
2013/01/24 Javascript
JS获取url链接字符串 location.href
2013/12/23 Javascript
JavaScript判断是否为数字的4种方法及效率比较
2015/04/01 Javascript
jquery滚动到顶部底部代码
2015/04/20 Javascript
jQuery结合CSS制作漂亮的select下拉菜单
2015/05/03 Javascript
javascript 判断是否是微信浏览器的方法
2016/10/09 Javascript
jQuery插件form-validation-engine正则表达式操作示例
2017/02/09 Javascript
vue页面切换到滚动页面显示顶部的实例
2018/03/13 Javascript
vue项目打包部署到服务器的方法示例
2018/08/27 Javascript
vue防止花括号{{}}闪烁v-text和v-html、v-cloak用法示例
2019/03/13 Javascript
Vue源码之关于vm.$delete()/Vue.use()内部原理详解
2019/05/01 Javascript
layui下拉框获取下拉值(select)的例子
2019/09/10 Javascript
uniapp微信小程序:key失效的解决方法
2021/01/20 Javascript
简单介绍Python中用于求最小值的min()方法
2015/05/15 Python
浅析Python中MySQLdb的事务处理功能
2016/09/21 Python
python实现汽车管理系统
2018/11/30 Python
python样条插值的实现代码
2018/12/17 Python
Python 微信之获取好友昵称并制作wordcloud的实例
2019/02/21 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
2019/06/18 Python
Python实现图片识别加翻译功能
2019/12/26 Python
爱尔兰最大的体育零售商:Life Style Sports
2019/06/12 全球购物
俄罗斯鲜花递送:AMF
2020/04/24 全球购物
C#面试题问题集
2016/04/02 面试题
如何打造一封优秀的留学推荐信
2014/01/25 职场文书
八项规定整改方案
2014/02/21 职场文书
保险公司早会主持词
2014/03/22 职场文书
八一建军节营销活动方案
2014/08/31 职场文书
爱心助学感谢信
2015/01/21 职场文书
仓库管理员岗位职责
2015/02/03 职场文书
2015年学校办公室工作总结
2015/05/26 职场文书
红色电影观后感
2015/06/18 职场文书