完美拖拽

技术点:
设置一个数组positionList用来保存拖拽时产生的轨迹 保存以及使用的原理是什么
移动事件是设置在按下事件里面的
保存拖拽时间生成的轨迹
需求分析:
1 在tz上按下鼠标,整个box可以拖拽
2 在页面中移动鼠标,box跟着移动
3 在页面上松开鼠标,box停止移动
4 点击a1,div会从当前位置沿着原来的路线倒退回去
技术点:
如果想要沿原路径倒退,必须记住原来的途径的点
代码展示“
样式css:

	html,        
	body {            
		overflow: hidden;        
	}        
	body,        
	div,        
	h2,        
	p {            
		margin: 0;            
		padding: 0;        
	}        
	body {            
		color: #fff;            
		background: #000;            
		font: 12px/2 Arial;        
	}                
	p {            
		padding: 0 10px;            
		margin-top: 10px;        
	}        
	span {            
		color: #ff0;            
		padding-left: 5px;        
	}        
	#box {            
		position: absolute;            
		width: 300px;            
		height: 150px;            
		background: #333;            
		border: 2px solid #ccc;            
		top: 50%;            
		left: 50%;            
		margin: -75px 0 0 -150px;        
	}                
	#box h2 {            
		height: 25px;            
		cursor: move;            
		background: #222;            
		border-bottom: 2px solid #ccc;            
		text-align: right;            
		padding: 0 10px;        
	}        
	#box h2 a {            
		color: #fff;            
		font: 12px/25px Arial;            
		text-decoration: none;            
		outline: none;        
	}

样式div

	<body>    
		<div id="box" style="margin-left: 0px; margin-top: 0px; left: 533px; top: 231px;">        
			<h2 id="tz"><a href="javascript:;" id="a1">点击回放拖动轨迹</a></h2>        	
			<p><strong>Drag:</strong><span>false</span></p>        
			<p><strong>offsetTop:</strong><span>231</span></p>        
			<p><strong>offsetLeft:</strong><span>533</span></p>    
		</div>
	</body>

javascript调用事件

	<script>        
		var tz = document.getElementById("tz");//获取拖拽元素    
		var box = document.getElementById("box");    
		var a1 = document.getElementById("a1");//回放标签    
		var positionList = [];//用于保存拖拽时产生的轨迹    
		//按下tz    
		//移动box    
		tz.onmousedown = function(eve){//按下产生事件对象        
			var e = eve || event;        
			//获取初始值,以此为基础进行计算        
			var x = e.offsetX;        
			var y = e.offsetY;        
			document.onmousemove = function(eve){            
				var e = eve || event;            
				var l = e.pageX - x;            
				var t = e.pageY - y;                        
				box.style.left = l + "px";            
				box.style.top = t + "px";                        /
				/拖拽时间生的轨迹要保存下来,给点击回放时使用            
				//如何保存轨迹            
				//设置数据结构:重要,怎样设计后面才能更好的使用            
				//[{left:23,top:45},{left:45,top:87}]//⭐            
				positionList.push({left:l,top:t});//⭐⭐⭐数组从前往后如此设置                        
				return false;//⭐            
				//到此完成拖拽事件        
			}        
			//松开        
			document.onmouseup = function(){            
				//document.onmousemove = null;            
				this.onmousemove = null;//解除绑定        
			}    
		}        
		a1.onclick = function(){        
			//开始回放        
			//轨迹是什么:是拖拽box时,产生的所有的l和t值        
			//轨迹要用时间间隔来变化,需要使用setInterval        
			//从最后的位置往前赋值        
			//console.log(positionList)        
			//如果positionList没有轨迹不需要回放  数组为空,不需要执行轨迹        
			if(positionList.length === 0){            
				return;        
			}        
			//往下是重点逻辑⭐⭐⭐  保存到数组中   取出使用        
			var i = 0;        
			var timer = setInterval(function(){            
				i++;            
				//从positionList的最后一个值往前赋值   调用时从后往前调用            
				box.style.left = positionList[positionList.length-i].left + "px";            
				box.style.top = positionList[positionList.length-i].top + "px";            
				//i不能超过positionList.length   超过就表示越界            
				if(i === positionList.length){                
					//清除定时器                
					clearInterval(timer);                
					//清空数组positionList                
					positionList.length = 0;            
				}        
			},20)            
		}   
	 </script>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值