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实现页面自适应
Jan 19 Javascript
ECMAScript 基础知识
Jun 29 Javascript
javascript 拖放效果实现代码
Jan 22 Javascript
javascript Array.prototype.slice使用说明
Oct 11 Javascript
jquery索引在使用中的一些困惑
Oct 24 Javascript
jquery点击展示与隐藏更多内容
Dec 03 Javascript
性能优化之代码优化页面加载速度
Mar 01 Javascript
vue-router 中router-view不能渲染的解决方法
May 23 Javascript
ionic2屏幕适配实现适配手机、平板等设备的示例代码
Aug 11 Javascript
详解在React中跨组件分发状态的三种方法
Aug 09 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
Aug 09 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
Apr 20 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
实时抓取YAHOO股票报价的代码
2006/10/09 PHP
discuz程序的PHP加密函数原理分析
2011/08/05 PHP
php 对输入信息的进行安全过滤的函数代码
2012/06/29 PHP
PHP获取数组中重复最多的元素的实现方法
2014/11/11 PHP
详解WordPress中简码格式标签编写的基本方法
2015/12/22 PHP
jquery一般方法介绍 入门参考
2011/06/21 Javascript
JavaScript观察者模式(经典)
2015/12/09 Javascript
CSS3 3D 技术手把手教你玩转
2016/09/02 Javascript
利用iscroll4实现轮播图效果实例代码
2017/01/11 Javascript
基于Marquee.js插件实现的跑马灯效果示例
2017/01/25 Javascript
微信小程序 基础知识css样式media标签
2017/02/15 Javascript
Vue学习笔记进阶篇之vue-cli安装及介绍
2017/07/18 Javascript
JS禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码
2017/09/07 Javascript
详解vue-cli 接口代理配置
2017/12/13 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
2018/06/24 Javascript
vue-cli3+ts+webpack实现多入口多出口功能
2019/05/30 Javascript
jquery将json转为数据字典的实例代码
2019/10/11 jQuery
p5.js实现动态图形临摹
2019/10/23 Javascript
原生JS实现烟花效果
2020/03/10 Javascript
[01:10:02]IG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python不带重复的全排列代码
2013/08/13 Python
Python中struct模块对字节流/二进制流的操作教程
2017/01/21 Python
获取Django项目的全部url方法详解
2017/10/26 Python
python得到一个excel的全部sheet标签值方法
2018/12/10 Python
蛋白质世界:Protein World
2017/11/23 全球购物
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
斯福泰克软件测试面试题
2015/02/16 面试题
物业工作计划书
2014/01/10 职场文书
广告学专业自荐信范文
2014/02/24 职场文书
院领导写的就业推荐信
2014/03/09 职场文书
工伤事故赔偿协议书(标准)
2014/09/29 职场文书
餐饮服务员岗位职责
2015/02/09 职场文书
2019个人工作态度自我评价
2019/04/24 职场文书
导游词之南迦巴瓦峰
2019/11/19 职场文书
Django Paginator分页器的使用示例
2021/06/23 Python
解决xampp安装后Apache无法启动
2022/03/21 Servers