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中parseInt函数浅谈
Jul 31 Javascript
jquery批量控制form禁用的代码
Aug 06 Javascript
js 走马灯简单实例
Nov 21 Javascript
jquery简单实现网页层的展开与收缩效果
Aug 07 Javascript
JS简单实现tab切换效果的多窗口显示功能
Sep 07 Javascript
vue组件实现弹出框点击显示隐藏效果
Oct 26 Javascript
js实现鼠标单击Tab表单切换效果
May 16 Javascript
vue中promise的使用及异步请求数据的方法
Nov 08 Javascript
详解jQuery设置内容和属性
Apr 11 jQuery
基于Fixed定位的框选功能的实现代码
May 13 Javascript
原生JS与JQ获取元素的区别详解
Feb 13 Javascript
vuex实现购物车的增加减少移除
Jun 28 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中unset,array_splice删除数组中元素的区别
2014/07/28 PHP
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
PHP实现加密文本文件并限制特定页面的存取的效果
2016/10/21 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
javascript显示用户停留时间的简单实例
2013/08/05 Javascript
javascript日期处理函数,性能优化批处理
2015/09/06 Javascript
JavaScript多图片上传案例
2015/09/28 Javascript
jQuery文字轮播特效
2017/02/12 Javascript
bootstrap是什么_动力节点Java学院整理
2017/07/14 Javascript
vue使用vue-cli快速创建工程
2017/07/28 Javascript
使用mint-ui开发项目的一些心得(分享)
2017/09/07 Javascript
JavaScript数组去重的多种方法(四种)
2017/09/19 Javascript
JS正则表达式完美实现身份证校验功能
2017/10/18 Javascript
jquery.picsign图片标注组件实例详解
2018/02/02 jQuery
Vue SPA单页应用首屏优化实践
2018/06/28 Javascript
JS实现HTML页面中动态显示当前时间完整示例
2018/07/30 Javascript
vue eslint简要配置教程详解
2019/07/26 Javascript
JS异步宏队列微队列原理详解
2020/09/09 Javascript
JavaScript本地储存:localStorage、sessionStorage、cookie的使用
2020/10/13 Javascript
微信小程序用户登录和登录态维护的实现
2020/12/10 Javascript
[15:46]教你分分钟做大人——沙王
2015/03/11 DOTA
使用pandas中的DataFrame数据绘制柱状图的方法
2018/04/10 Python
Python读取数据集并消除数据中的空行方法
2018/07/12 Python
python训练数据时打乱训练数据与标签的两种方法小结
2018/11/08 Python
解决Python下imread,imwrite不支持中文的问题
2018/12/05 Python
Python 抓取微信公众号账号信息的方法
2019/06/14 Python
Python判断三段线能否构成三角形的代码
2020/04/12 Python
使用Python实现NBA球员数据查询小程序功能
2020/11/09 Python
python爬虫scrapy基于CrawlSpider类的全站数据爬取示例解析
2021/02/20 Python
厨师岗位职责
2013/11/12 职场文书
小学生通知书评语
2014/12/31 职场文书
财政局个人总结
2015/03/04 职场文书
小学教师自我评价
2015/03/04 职场文书
房屋维修申请报告
2015/05/18 职场文书
nginx的zabbix 5.0安装部署的方法步骤
2021/07/16 Servers
python周期任务调度工具Schedule使用详解
2021/11/23 Python