来回动画的封装—练习定时器和函数封装的思想

要点:

1.定时器原本只打开一个,在不做任何处理的时候,如果在上一个定时器执行完成之前快速点击按钮。定时器的所执行的函数的速度,会不断的加快 ,自己臆测的原因是,多线程,同时打开多个定时器,不会等到上一个处理完成之后来处理下一个,而是类似于多线程的原理,共同的处理定时器绑定的处理函数。

2.理解封装思想,这个函数,原来只是处理单一的功能,而封装之后,将需要的不同的对象接口暴露出来,功能模块代码进行封装,用户传递对象就可以对不同的目标对象执行相同的函数操作。

   例子中的element.intervalName,原来是通过var进行声明得到的,这样会多申明一块空间的操作,执行的效率会慢一点,而这样在已有的对象的空间中添加一个新的属性,会提高运行速度。一点一滴的积累,到最后会是量的质变。

代码:
 

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style type="text/css">
		*{
			padding: 0;
			margin: 0;
		}
		input{
			margin-top: 20px;
		}
		div{
			margin-top: 30px;
			width: 225px;
			height: 175px;
			background-color: #6D1F9B;
			position: absolute;
			/*一定要是相对定位,不然写的移动的位置不能改变而显示出来*/
		}
	</style>
</head>
<body>
	<input type="button" value="移动500px" id="btn1">
	<input type="button" value="移动1000px" id="btn2">

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

	<script type="text/javascript">
        function myGet(id){
        	return document.getElementById(id);
        }

        myGet("btn1").onclick = function(){
        	animate(myGet("div"),500);
        }
        myGet("btn2").onclick = function(){
        	animate(myGet("div"),1000);
        }
   	            
        function animate(element,target){
        	clearInterval(element.intervalName);
        	// 每次点击移动按钮的时候,清理定时器,将原来的定时器清理掉,不然会叠加多线程多个定时器,加快速度
        	element.intervalName = setInterval(function(){
	            var current = element.offsetLeft;
	            // 通过.style.left不能获取style标签里面的值,只能获取到内部样式的值
	            // 而.offsetLeft这个值,可以获取到任何位置,div这个属性的.left的值,不带单位
	            var step = 8;
	            // 每次增加10像素
	            step = current<target?step:-step;
	            // 判断是在目标的左边还是右边,从而判断是前进还是后退
	            current += step;
	            if(Math.abs(target-current)>Math.abs(step)){
	            	element.style.left = current + "px";
	            }else{
	            	clearInterval(element.intervalName);
	            	element.style.left = target + "px";
	            	// 当执行到最后一步时,如果不满增加的长度,而再一次执行时,而又超过目标像素的距离,
	                // 所以设置直接一步到目标距离,而不会
	            }  	
            },30)
        }
        
    </script>
</body>
</html>

效果:

猜你喜欢

转载自blog.csdn.net/qq_42036616/article/details/83861145