ES6写拖拽

<!DOCTYPE html>
<html>
<head>
	<title></title>
	<link rel="stylesheet" type="text/css" href="drag.css">
</head>
<body>
	<div id="div1">div1</div>
	<div id="div2">div2</div>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script type="text/javascript">
class Drag {
	constructor(id) {
		this.oDiv = document.querySelector(id);
		this.disX = 0;
		this.disY = 0;
		this.init();
	}
	init() {
		console.log(this)
		console.log(this.oDiv)
		this.oDiv.onmousedown = function(ev) {
			console.log('onmousedown')

			// 点击时鼠标位置到div边缘的距离
			this.disX = ev.clientX - this.oDiv.offsetLeft;
			this.disY = ev.clientY - this.oDiv.offsetTop;

			document.onmousemove = this.fnMove.bind(this);
			document.onmouseup = this.fnUp.bind(this);

			// 阻止默认文字选中
			return false;
		}.bind(this);
	}
	fnMove(ev) {
		this.oDiv.style.left = ev.clientX - this.disX + 'px';
		this.oDiv.style.top = ev.clientY - this.disY + 'px';
	} 
	fnUp() {
		document.onmousemove = null;
		document.onmouseup = null;
	}
}
new Drag('#div1')

// limitDrag继承drag的拖拽功能,限制拖拽区域
class limitDrag extends Drag {
	fnMove(ev) {
		super.fnMove(ev);

		// 限制范围
		if(this.oDiv.offsetLeft < 0) {
			this.oDiv.style.left = 0;
		}
		if(this.oDiv.offsetTop < 0) {
			this.oDiv.style.top = 0;
		}
	}
}

new limitDrag('#div2')
</script>
</body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值