vue中拖拽块级元素

vue中拖拽块级元素

主要用到的以下的触发事件
  • mousedown()
  • mousemove()
  • mouseup()
分别处理的事件
  • mousedown():
    • 判断鼠标是否压下
    • 获取压下时的鼠标坐标
  • mousemove():
    • 获取当前鼠标坐标,
    • 计算得到位移量并计算出新的坐标(更新坐标)
    • 向块级元素传值对块级元素进行显示
    • 更新当前坐标(连续拖拽可以视为前一次move的结束点为下一次的起始点)
  • mouseup():
    • 记录鼠标压下状态
Coding
<template>
<div style="position: absolute;
			top: 0px;left: 0px;
			height: 500px;width: 500px;
			background-color: #5C5C5C;"
			@mousedown="_MouseDown"
			@mousemove="_MouseMove"
			@mouseup="_MouseUp"
			id="ShowBox">
			<div 
				style="position: absolute;
				top: 0px;left: 0px;"
				ref="refMap">
			</div>
</div>			
<template>
<script>
const iMapWidth = 800;
const iShowViewWidth = 500;
export default(
	data() {
			return{
				bMouseDown:false,
				iLastMouseDownX:0,
				iLastMouseDownY:0,
				iShowMapTop:0,
				iShowMapLeft:0,
			}
		},
	methods:{
			_MouseDown(e)
			{
				this.bMouseDown = true;
				this.iLastMouseDownX = e.clientX;
				this.iLastMouseDownY = e.clientY;
			},
			_MouseMove(e)
			{
				if(this.bMouseDown)
				{
					let iMoveX = this.iLastMouseDownX - e.clientX;
					let iMoveY = this.iLastMouseDownY - e.clientY;
					this.iShowMapTop -= iMoveY;
					this.iShowMapLeft -= iMoveX;
					this.iLastMouseDownX = e.clientX;
					this.iLastMouseDownY = e.clientY;
					if(this.iShowMapLeft >= 0)
					{	
						this.iShowMapLeft = 0;
					}
					if(this.iShowMapLeft >= 0)
					{	
						this.iShowMapLeft = 0;
					}
					if(this.iShowMapLeft <= iShowViewWidth - iMapWidth)
					{	
						this.iShowMapLeft = iShowViewWidth - iMapWidth;
					}
					if(this.iShowMapTop >= 0)
					{	
						this.iShowMapTop = 0;
					}
					this._DisplayMap(this.iShowMapTop,this.iShowMapLeft)
				}
				else
				{
					return;
				}
				 
			},
			_MouseUp()
			{
				this.bMouseDown = false;
				
			},
			_DisplayMap(iTop,iLeft)
			{
				
				this.$refs.refMap.style.top = iTop + 'px';
				this.$refs.refMap.style.left = iLeft + 'px';
			}
	},		
)
</script>
<style>
	#ShowBox {
			overflow-y: hidden;
			overflow-x: hidden;
			background-color: none;
		}
	div
	{
		-webkit-user-select: none;
		-moz-user-select: none;
		-o-user-select: none;
		-ms-user-select: none;
		user-select: none
	}
</style>
			
浏览器预览效果

请添加图片描述
(做了边际限制,视频中只能拖拽一定范围,可以按照实际需要去更改显示范围)

注意点

如果不加上style中有关div选中状态禁用的内容,可能会出现拖拽时光标禁用的样式。
会抓不到mouseup事件,加上比较好。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值