vue 自定义可拖拽拖拽按钮。

<template>
	<div class="back-home" @click="$router.push('/')" ref="moveBtn" @mousedown="down" @touchstart="down" @mousemove="move"
	 @touchmove="move" @mouseup="end" @touchend="end" @touchcancel="end">
		<img src="./../assets/image/backHome.png" alt="">
	</div>
</template>

<script>
	export default {

		data() {
			return {
				flags: false,
				position: {
					x: 0,
					y: 0
				},
				nx: '',
				ny: '',
				dx: '',
				dy: '',
				xPum: '',
				yPum: '',
				isShow: false,
				moveBtn: {}
			}
		},
		mounted() {
			this.moveBtn = this.$refs.moveBtn
		},
		methods: {
			// 实现移动端拖拽
			down() {
				this.flags = true;
				var touch;
				if (event.touches) {
					touch = event.touches[0];
				} else {
					touch = event;
				}
				this.position.x = touch.clientX;
				this.position.y = touch.clientY;
				this.dx = this.moveBtn.offsetLeft;
				this.dy = this.moveBtn.offsetTop;
			},
			move() {
				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;
					this.xPum = this.dx + this.nx;
					this.yPum = this.dy + this.ny;
					var clientWidth = document.documentElement.clientWidth;
					var clientHeight = document.documentElement.clientHeight;
					if (this.xPum > 0 && this.xPum < (clientWidth - this.moveBtn.offsetWidth)) {
						this.moveBtn.style.left = this.xPum + "px";
					}
					if (this.yPum > 0 && this.yPum < (clientHeight - this.moveBtn.offsetHeight)) {
						this.moveBtn.style.top = this.yPum + "px";
					}

					//阻止页面的滑动默认事件
					document.addEventListener("touchmove", this.handler, {
						passive: false
					});
				}
			},
			//鼠标释放时候的函数
			end() {
				this.flags = false;
				document.addEventListener('touchmove', this.handler, {
					passive: false
				});
			},
			handler(e) {
				if(this.flags){
					event.preventDefault(); 
				}else{
					return true
				}
			}
		}
	}
</script>

<style scoped>
	.back-home {
		height: 4.75rem;
		width: 4.75rem;
		position: fixed;
		top: calc(50vh - 4.75rem);
		left: 0;
		z-index: 99999;
	}

	.back-home img {
		height: 100%;
		width: 100%;
	}
</style>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值