html js设置div可拖动效果

第一种:先看代码,可直接复制使用。

这部分是我找了个例子,看了一遍,自己写的。但是也有一些问题。

问题:js设置div可拖动效果  当我在实际项目中使用时,div里有关闭div的按钮,很多时候点击按钮,关闭事件不触发,反而div会移动。因为该div是js动态生成了,我尝试使用阻止冒泡事件来解决这个问题,但是不起作用。于是换了另一种方式。如下第二种

<!doctype html>
<html lang="en">
<head>
   <meta charset="UTF-8">
	<title>拖拽</title>
	<style>
	#div{
		position: absolute;
		width: 100px;
		height: 100px;
		background: black;}
	</style>
</head>
<body>
	<div id="div"></div>	
	<script>
	function move(){
		var divMove = document.getElementById("div");
		if(divMove == null) return;
		divMove.onmousedown  = function(e){
			var ev = e || window.event;  //兼容ie浏览器
			//鼠标点击物体那一刻相对于物体左侧边框的距离=点击时的位置相对于浏览器最左边的距离-物体左边框相对于浏览器最左边的距离  
			var distanceX = ev.clientX - div.offsetLeft;
			var distanceY = ev.clientY - div.offsetTop;
			document.onmousemove = function(e){
				var ev = e || window.event;  //兼容ie浏览器  
				divMove.style.left = ev.clientX - distanceX + 'px';
				divMove.style.top = ev.clientY - distanceY + 'px'; 
			};
			document.onmouseup = function(){
				document.onmousemove = null;
				document.onmouseup = null;
			};
		};
	}
	move();
	</script>
</body>
</html>

2、第二种:更优雅点。拖拽div时,div透明度会降低,放开时,div恢复原来样式

<!doctype html>
<html lang="en">
<head>
   <meta charset="UTF-8">
	<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
	<title>拖拽</title>
	<style>
	#div{
		position: absolute;
		width: 100px;
		height: 100px;
		background: black;}
	</style>
</head>
<body>
	<div id="div"></div>	
	<script>
	function move(){
		var _move=false;//移动标记  
		var _x,_y;//鼠标离控件左上角的相对位置  
		$("#div").click(function(){  
			//alert("click");//点击(松开后触发)  
			}).mousedown(function(e){  
			_move=true;  
			_x=e.pageX-parseInt($("#div").css("left"));  
			_y=e.pageY-parseInt($("#div").css("top"));  
			$("#div").fadeTo(20, 0.5);//点击后开始拖动并透明显示  
		});  
		$(document).mousemove(function(e){  
			if(_move){  
				var x=e.pageX-_x;//移动时根据鼠标位置计算控件左上角的绝对位置  
				var y=e.pageY-_y;  
				$("#div").css({top:y,left:x});//控件新位置  
			}  
		}).mouseup(function(){  
		_move=false;  
   	 	$("#div").fadeTo("fast", 1);//松开鼠标后停止移动并恢复成不透明  "fast":规定褪色效果的速度。
  		});  
	}

	move();
	</script>
</body>
</html>

 

 

 

 

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
实现 div 拖拽互换位置效果,可以通过以下步骤来实现: 1. 给需要拖拽的 div 添加 mousedown 事件监听器,当鼠标按下时记录鼠标的位置和当前拖拽的 div 的位置。 2. 给 document 添加 mousemove 事件监听器,在拖拽过程中更新当前拖拽的 div 的位置。 3. 给 document 添加 mouseup 事件监听器,当鼠标抬起时判断当前拖拽的 div 是否与其他 div 重叠,如果重叠则互换它们的位置。 以下是一个示例代码: HTML: ```html <div class="drag" style="left: 0px; top: 0px;">Div 1</div> <div class="drag" style="left: 100px; top: 100px;">Div 2</div> ``` CSS: ```css .drag { position: absolute; width: 100px; height: 100px; background-color: #ccc; cursor: move; } ``` JavaScript: ```javascript var dragDiv = null; // 记录当前拖拽的 div document.addEventListener('mousedown', function(event) { if (event.target.classList.contains('drag')) { dragDiv = event.target; dragDiv.style.zIndex = 1; // 设置当前拖拽的 div 在最上层 dragDiv.style.opacity = 0.5; // 设置当前拖拽的 div 半透明 dragDiv.startX = event.clientX; dragDiv.startY = event.clientY; dragDiv.startLeft = parseInt(dragDiv.style.left); dragDiv.startTop = parseInt(dragDiv.style.top); } }); document.addEventListener('mousemove', function(event) { if (dragDiv) { var deltaX = event.clientX - dragDiv.startX; var deltaY = event.clientY - dragDiv.startY; dragDiv.style.left = (dragDiv.startLeft + deltaX) + 'px'; dragDiv.style.top = (dragDiv.startTop + deltaY) + 'px'; } }); document.addEventListener('mouseup', function(event) { if (dragDiv) { dragDiv.style.zIndex = 0; // 恢复被拖拽的 div 的层级 dragDiv.style.opacity = 1; // 恢复被拖拽的 div 的透明度 var dragRect = dragDiv.getBoundingClientRect(); var allDivs = document.querySelectorAll('.drag'); for (var i = 0; i < allDivs.length; i++) { if (allDivs[i] !== dragDiv) { var rect = allDivs[i].getBoundingClientRect(); if (dragRect.left < rect.right && dragRect.right > rect.left && dragRect.top < rect.bottom && dragRect.bottom > rect.top) { // 交换位置 var tempLeft = dragDiv.style.left; var tempTop = dragDiv.style.top; dragDiv.style.left = allDivs[i].style.left; dragDiv.style.top = allDivs[i].style.top; allDivs[i].style.left = tempLeft; allDivs[i].style.top = tempTop; break; } } } dragDiv = null; } }); ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值