div大小拖动调节及鼠标样式修改

这篇博客介绍了如何使用JavaScript实现一个可拖放并调整大小的div元素。通过监听鼠标按下、移动和松开事件,结合CSS和HTML,创建了一个交互式的元素操作功能。用户可以自由调整div的四个边角和边框来改变其尺寸,同时保持最小宽度和高度限制。
摘要由CSDN通过智能技术生成

需要用到鼠标的三个事件  鼠标按下  鼠标移动  鼠标松开。

css代码:

<style>
			body,
			html {
				width: 100%;
				height: 100%;
				margin: 10;
			}

			#drag {
				width: 200px;
				height: 200px;
				padding: 15px;
				position: absolute;
				left: 100px;
				top: 100px;
				border: #00cdcd 2px solid;
				box-sizing: border-box;
			}
		</style>

HTML:

<div id="drag"></div>

JS:

		<script>
			let c = document.getElementById('drag')//需要调整尺寸的div
			
			document.getElementById('body').addEventListener('mousemove', move)// body监听移动事件
			
			c.addEventListener('mousedown', down)// 鼠标按下事件
			
			document.getElementById('body').addEventListener('mouseup', up)// 鼠标松开事件

			let issize = false// 是否开启尺寸修改
		
			let cX, cY	// 鼠标按下时的坐标,并在修改尺寸时保存上一个鼠标的位置
			
			let minW = 8,
				minH = 8// div可修改的最小宽高
			
			let dir = ''// 鼠标按下时的位置,使用n、s、w、e表示

			function up() {// 鼠标松开时结束尺寸修改
				issize = false
			}
			
			function down(e) {// 鼠标按下时开启尺寸修改
				let d = getDir(e)
				// 当位置为四个边和四个角时才开启尺寸修改
				if (d !== '') {
					issize = true
					dir = d
					cX = e.clientX
					cY = e.clientY
				}
			}
			
			function move(e) {// 鼠标移动事件
				let d = getDir(e)
				let cursor
				if (d === '') cursor = 'default';
				else cursor = d + '-resize';
				// 修改鼠标显示效果
				c.style.cursor = cursor;
				// 当开启尺寸修改时,鼠标移动会修改div尺寸
				if (issize) {
					// 鼠标按下的位置在右边,修改宽度
					if (dir.indexOf('e') !== -1) {
						c.style.width = Math.max(minW, c.offsetWidth + (e.clientX - cX)) + 'px'
						cX = e.clientX
					}
					// 鼠标按下的位置在上部,修改高度
					if (dir.indexOf('n') !== -1) {
						c.style.height = Math.max(minH, c.offsetHeight + (cY - e.clientY)) + 'px'
						cY = e.clientY
					}
					// 鼠标按下的位置在底部,修改高度
					if (dir.indexOf('s') !== -1) {
						c.style.height = Math.max(minH, c.offsetHeight + (e.clientY - cY)) + 'px'
						cY = e.clientY
					}
					// 鼠标按下的位置在左边,修改宽度
					if (dir.indexOf('w') !== -1) {
						c.style.width = Math.max(minW, c.offsetWidth + (cX - e.clientX)) + 'px'
						cX = e.clientX
					}
				}
			}
			
			// 获取鼠标所在div的位置
			function getDir(ev) {
				let x, y, o, d;
				d = '';

				x = ev.offsetX;
				y = ev.offsetY;
				o = 10;

				if (y < o) d += 'n';
				else if (y > c.offsetHeight - o) d += 's';
				if (x < o) d += 'w';
				else if (x > c.offsetWidth - o) d += 'e';

				return d;
			}
		</script>

以上代码可以复制试试效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值