如果多个元素都使用这个动画函数,每次都要var声明定时器。我们可以给不同的元素使用不同的定时器(自己专门用自己的定时器)。
核心原理:利用JS是一门动态语言,可以很方便的给当前对象添加属性。
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>测试</title><style>*{margin: 0;padding: 0;}div{position: absolute;left: 0;width: 100px;height: 100px;background-color: pink;}span{position: absolute;top: 100px;left: 0;display: block;width: 100px;height: 100px;background-color: purple;}</style></head><body><button>紫色盒子</button><div></div><span></span><script>//简单动画函数封装 obj目标对象 target目标位置//给不同的元素指定了不同的定时器//当我们不断地点击按钮,这个元素的速度会越来越快,因为开启了太多定时器// 解决方案:让我们元素只有一个定时器执行function animate (obj,target) {clearInterval(obj.timer);//让盒子在当前位置+1距离//定时器重复操作,最后清除定时器obj.timer = setInterval(function(){//获得盒子当前的位置var x = obj.offsetLeft;if(x >= target){clearInterval(obj.timer);}obj.style.left = x + 1 + 'px';},30);}//获取元素var div = document.querySelector('div');var span = document.querySelector('span');var btn = document.querySelector('button');animate(div,300);btn.addEventListener('click',function(){animate(span,200);});</script></body></html>
.
