vue拖动添加模块展示_vue移动端自定义拖拽组件(亲测有效)

本文介绍了如何在 Vue 中实现一个移动端的拖拽组件,详细讲解了组件的实现过程,并提供了相关代码示例。通过创建 `drag.vue` 组件,实现了元素的拖动和边界限制,适用于各种移动端场景。
摘要由CSDN通过智能技术生成

一、前言

有段时间没有些博客了,最近一直忙于工作上的事情,今天正好有时间写一个笔记。移动端拖拽事件是开发中经常用到的情况,正好最近项目中有用到这一情况,在网上也搜索了一些博客,都不太理想,于是就综合我搜集的博客做一个总结,一边将来可以随时查看。

二、正文内容

话不多说直接上代码

(1)自定义一个公共组件drag.vue

@click="goNext"

@touchstart="down"

@touchmove="move"

@touchend="end"

>

询价车

export default {

name: "defaultDrag",

data() {

return {

flags: false,

position: { x: 0, y: 0 },

nx: "",

ny: "",

dx: "",

dy: "",

xPum: "",

yPum: ""

};

},

components: {},

computed: {},

mounted() {},

methods: {

goNext() {

this.$emit("goNext");

},

// 实现移动端拖拽

down() {

let default_drag_comp = document.querySelector("#default_drag_comp");

this.flags = true;

var touch;

if (event.touches) {

touch = event.touches[0];

} else {

touch = event;

}

this.maxW = document.body.clientWidth - default_drag_comp.offsetWidth;

this.maxH = document.body.clientHeight - default_drag_comp.offsetHeight;

this.position.x = touch.clientX - default_drag_comp.offsetLeft;

this.position.y = touch.clientY - default_drag_comp.offsetTop;

this.dx = touch.clientX;

this.dy = touch.clientY;

},

move(event) {

event.preventDefault();

let default_drag_comp = document.querySelector("#default_drag_comp");

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;

}

default_drag_comp.style.left = this.nx + "px";

default_drag_comp.style.top = this.ny + "px";

//阻止页面的滑动默认事件;如果碰到滑动问题,1.2 请注意是否获取到 touchmove

document.addEventListener(

"touchmove",

function() {

// event.preventDefault();

},

false

);

}

},

//鼠标释放时候的函数

end() {

this.flags = false;

}

}

};

#default_drag_comp {

width: 1rem;

height: 1rem;

border-radius: 50%;

border: 2px solid #ffffff;

box-shadow: 0 0 0.4rem 2px #d3d3d3;

background: #ff9966;

position: fixed;

z-index: 1000;

bottom: 0.8rem;

right: 0.4rem;

display: flex;

justify-content: center;

align-items: center;

span {

color: #ffffff;

font-size: 0.24rem;

}

}

(2)在需要引用该组件的地方注册一下即可

(3)结果

TIM截图20190426120529.jpg

三、总结

好了,到这里了,希望对大家有帮助,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值