原生js拖拽三部曲

js拖拽效果的主要事件:onmousedown(鼠标按下),onmousemove(鼠标移动),onmouseup(鼠标抬起)

var contain = document.getElementsByClassName("contain")[0]
			contain.onmousedown = (e) =>{
				e = e || event;  //兼容写法
				var x = e.clientX;
				var y = e.clientY;
				var gapX = x - e.target.offsetLeft
				var gapY = y - e.target.offsetTop
				document.onmousemove = (e) =>{//此处是document而不是盒子对象,因为鼠标在整个文档动
					e = e || event;
					contain.style.left = e.clientX - gapX + 'px'; 
					contain.style.top = e.clientY - gapY + 'px'; 
					//window.innerWidth为浏览器的可视宽度
					//ie写法为document.body.clientHeight或document.documentElement.clientWidth
					var maxX = window.innerWidth-contain.offsetWidth
					var maxY = window.innerHeight-contain.offsetHeight
					//为了让盒子不超出浏览器要做判断
					if(e.clientX - gapX  < 0){
						contain.style.left = 0	
					}else if(e.clientX - gapX > maxX ){
						contain.style.left = maxX + "px"
					}
					
					if(e.clientY - gapY < 0){
						contain.style.top = 0	
					}else if(e.clientY - gapY > maxY){
						contain.style.top = maxY + "px"
					}
				}
				document.onmouseup = (e) =>{
					e = e || event;
					document.onmousemove = null // 这一步是为了避免鼠标抬起时,继续移动
				}
			}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值