原生JavaScript的定时器做简单动画

动画的原理

多张连续的静态画面在很短的时间内依次出现, 就可以产生动画效果, 每一个时刻对应的画面我们称之为"", 一秒内闪过多少张图片就是多少帧, 帧数越高, 画面越流畅

定时器 – setInterval()函数

setInterval从字面上理解, 意思是"设置间隔", 函数里有两个参数, 第一个参数是一个函数(事件), 第二个参数就是时间间隔, 单位是毫秒. 所以这个函数可以简单理解为setInterval(事件,间隔) 也就是setInterval(函数,数字) , 函数就是事件, 间隔用数字表示嘛!

理解定时器怎么做到动画效果

setInterval()函数的意思就是每隔多少毫秒做一次某件事
举个栗子:
setInterval(往右平移1mm,30), 它的意思就是每隔30毫秒往右平移1mm, 试想下, 动画不就成了吗?

动手测试

HTML部分:

<button id="btn" style="position: absolute" onclick="move()">我是按钮</button>

JavaScript部分:

<script>
    function move() {
        var oBtn = document.getElementById("btn");
        setInterval(function () {
            oBtn.style.left = oBtn.offsetLeft + 2 + "px";
        }, 30)
    }
</script>

以上表述的效果是点击按钮之后, 按钮每隔30毫秒向右平移2个像素点

能动起来了, 但是有缺陷: 多次点击按钮会导致按钮运动的越来越快, 原因是每次点击都开起了一个新的定时器, 多个定时器同时发挥效果就会导致这样的现象发生.
解决办法是: 每点击一次, 开启新的定时器时把上一个定时器关掉, 把定时器赋值给一个变量, 关掉定时器用的是clearInterval(定时器名字)函数

改进后的JS代码:

<script>
    var timer = null;
    function move() {
        clearInterval(timer);
        var oBtn = document.getElementById("btn");
        timer = setInterval(function () {
            oBtn.style.left = oBtn.offsetLeft + 2 + "px";
        }, 30)
    }
</script>

注意点

本例中我们选择的运动对象是button本身, 运动对象的定位属性必须设置为absolute, 即把原本所占的位置释放掉, 不然会导致无法运动或者异常运动

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值