vue移动端拖拽浮动的icon图标

在右下角或者左下角的图标,有时候会遮挡住 数据,体验不是特别好。需要可拖拽、挪动。
结构
<div id="item_box"
@click="$router.push('/newAddPersonal')"
@touchstart="getDown"
@touchmove="getMove"
@touchend="getEnd"
>
<img src="@/assets/common/personalVisit/icon_add.png" alt="">
</div>
css
#item_box{
width:90px;
height:90px;
position:fixed;
right:4%;
bottom:10%;
}
#item_box img{
width:100%;
height:100%;
}
拖拽方法
data() {
return {
flags: false,
position: { x: 0, y: 0 },
nx: "",
ny: "",
dx: "",
dy: "",
xPum: "",
yPum: "",
};
},
methods: {
getDown() {
let item_box = document.querySelector("#item_box");
this.flags = true;
var touch;
if (event.touches) {
touch = event.touches[0];
} else {
touch = event;
}
this.maxW = document.body.clientWidth - item_box.offsetWidth;
this.maxH = document.body.clientHeight - item_box.offsetHeight;
this.position.x = touch.clientX - item_box.offsetLeft;
this.position.y = touch.clientY - item_box.offsetTop;
this.dx = touch.clientX;
this.dy = touch.clientY;
},
getMove(event) {
event.preventDefault();
let item_box = document.querySelector("#item_box");
if (this.flags) {
var touch;
if (event.touches) {
touch = event.touches[0];
} else {
touch = event;
}
this.nx = touch.clientX - this.position.x;
this.ny = touch.clientY - this.position.y;
if (this.nx < 0) {
this.nx = 0;
} else if (this.nx > this.maxW) {
this.nx = this.maxW;
}
if (this.ny < 0) {
this.ny = 0;
} else if (this.ny >= this.maxH) {
this.ny = this.maxH;
}
item_box.style.left = this.nx + "px";
item_box.style.top = this.ny + "px";
document.addEventListener(
"touchmove",
function() {
// event.preventDefault()
},
false
);
}
},
getEnd() { this.flags = false;}
}

浙公网安备 33010602011771号