Vue手动封装可拖拽图标组件

#Vue手动封装可拖拽图标组件
1.新建组件并引用组件

<floatIcon  v-show="showAI" ref="fu"></floatIcon>
import floatIcon from "./components/floatIcon.vue";

2.组件相关代码

<template>
	<div>
		<a @click="GoToAI" @mousedown="down" @touchstart="down" @mousemove="move" @touchmove="move" @mouseup="end" @touchend="end"  ref="fu" class="float">
			<img style="width: .8rem;" src="../assets/imgs/aiIcon.png" alt="">
		</a>
	</div>
	
</template>
<script>
export default {
	name:'',
	props: {
	},
	data () {
		return {
			flags: false,//控制使用
			position: {
				x: 0,
				y: 0
			},
			nx: '',
			ny: '',
			dx: '',
			dy: '',
			xPum: '',
			yPum: '',
			
		}
	},
	watch:{

	},
	mounted() {	
	},
	methods:{
		GoToAI(){
			this.$router.push('/AI');
		},
		// @mousedown @touchstart PC端和移动端的方法
		// @mousemove @touchmove
		// @mouseup @touchend
		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.$refs.fu.offsetLeft;
			this.dy = this.$refs.fu.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;
				let width=window.innerWidth - this.$refs.fu.offsetWidth//屏幕宽度减去自身控件宽度
				let height=window.innerHeight - this.$refs.fu.offsetHeight//屏幕高度减去自身控件高度
				this.xPum < 0 && (this.xPum = 0)
				this.yPum < 0 && (this.yPum = 0)
				this.xPum > width && (this.xPum = width)
				this.yPum > height && (this.yPum = height)
				// if (this.xPum >= 0 && this.yPum >= 0 && this.xPum<= width &&this.yPum<= height) {
					this.$refs.fu.style.left = this.xPum + 'px';
					this.$refs.fu.style.top = this.yPum + 'px';
				// }
				//阻止页面的滑动默认事件
				document.addEventListener(
					'touchmove',
					function() {
						event.preventDefault();
					},
					false
				);
			}
			// top.getCurrentPages()[0].$refs.fu.GoToIM
		},
		//鼠标释放时候的函数
		end() {
			// 靠左自动吸附
			this.$refs.fu.style.left= '0px';
			this.flags = false;
		},	
		
	}
}
</script>
<style lang="scss">	
.float{
	position : fixed;
	left: 0px;
	top :80%;
	touch-action :none; 
	text-align: center;
	width: 48px;
	height: 48px;
	border-radius: 24px;
	line-height: 48px;
	color: white;
	z-index: 9999999999;
}
</style>





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值