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
在开始拖拽时,计算出鼠标点(初始触控点)和 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>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“vue实现移动端触屏拖拽功能”评论...
更新动态
2025年10月29日
2025年10月29日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]
