JavaScript(九),缓冲动画

1.缓冲动画

1.平滑运动

  • 需求:点击起飞 盒子开始移动 移动到1000px 盒子停止
<body>
    <button>起飞</button>
    <div></div>
    <script>
        /* 
            需求:点击起飞按钮  红色盒子开始移动  移动到1000px的位置开始停止
        */
        var btn = document.getElementsByTagName("button")[0];
        var oDiv = document.getElementsByTagName("div")[0]
        //添加点击事件
        btn.onclick = function () {
   
           var timer =  setInterval(function () {
   
                //在当前left值的基础上+10
                var current = parseInt(getStyle(oDiv, "left")) + 10;
                if(current==1000){
   
                    // 清除定时器
                    clearInterval(timer)
                }
                oDiv.style.left = current + "px";
            }, 50)

        }
    </script>

2.缓冲动画基础功能

  • 需求:目标值是500和目标值是1000 所花费的时间是一样的
<body>
    <button>起飞</button>
    <div></div>
    <script>
        /* 
            需求:目标值是500和目标值是1000 所花费的时间是一样的
            速速 = 路程 / 时间
        */
        var btn = document.getElementsByTagName("button")[0];
        var oDiv = document.getElementsByTagName("div")[0]
        //添加点击事件
        btn.onclick = function () {
   
            var timer = setInterval(function () {
   
                //在当前left值的基础上+10
                var current = parseInt(getStyle(oDiv, "left"));
                var speed = (500 - current) / 10;// speed  速度/步长
                console.log(current);//永远达不到目标值
                if (current == 500) {
   
                    // 清除定时器
                    clearInterval(timer)
                }
                oDiv.style.left = current + speed + "px";
            }, 50)

        }
    </script>
  • 问题1:永远到不了目标值
    • 原因:当current是491的时候 speed=0.9 left值=parseInt(491.9px) =491 所以current的值始终在491
    • 解决方法:让speed向上取整 Math.ceil
<body>
    <button>起飞</button>
    <div></div>
    <p></p>
    <script>
        /* 
             问题1:永远达不到目标值
             原因:当current是491的时候 speed=0.9 left值=parseInt(491.9px) =491 所以current的值始终在491
             解决方法:让speed向上取整  Math.ceil
        */
        var btn = document.getElementsByTagName("button")[0];
        var oDiv = document.getElementsByTagName("div")[0]
        //添加点击事件
        btn.onclick = function () {
   
            var timer = setInterval(function () {
   
                //在当前left值的基础上+10
                var current = parseInt(getStyle(oDiv, "left"));
                var speed = (500 - current) / 10; // speed  速度/步长
                speed = Math.ceil(speed);
                console.log(speed);
                if (current == 500) {
   
                    // 清除定时器
                    clearInterval(timer)
                }
                oDiv.style.left = current + speed + "px";
            }, 50)

        }
    </script>
</body>

3缓冲动画来回运动

  • 需求:从left值是1000的位置 缓冲到500的位置
  • 问题2:往回运动的时候 永远无法达到目标值
    • 分析:current是509的时候 speed的值是-0.9 Math.ceil之后就成了-0 speed的值最终是0 left值还是509 导致目标值永远都是509
    • 解决:让speed向下取整 Math.floor
<body>
    <button>起飞</button>
    <div></div>
    <p></p>
    <script>
        var btn = document.getElementsByTagName("button")[0];
        var oDiv = document.getElementsByTagName("div")[0]
        /* 
            问题2:往回运动的时候  永远无法达到目标值
            分析:current是509的时候  speed的值是-0.9 Math.ceil之后就成了-0 speed的值最终是0   left值还是509 导致目标值永远都是509
            解决:让speed向下取整  Math.floor
        */
        //添加点击事件
        btn.onclick = function () {
   
            var timer = setInterval(function () {
   
                //在当前left值的基础上+10
                var current = parseInt(getStyle(oDiv, "left"));
                var speed = (500 - current) / 10; // speed  速度/步长
                speed = Math.floor(speed);
                console.log(current);
                if (current == 500) {
   
                    // 清除定时器
                    clearInterval(timer)
                }
                oDiv.style.left = current + speed + "px";
            }, 50)

        }
    </script>
</body>

  • 来回运动speed值的问题
    • 0-500 speed的值正数 Math.ceil
    • 1000-500 speed的值是负数 Math.floor
<body>
    <button>起飞</button>
    <div></div>
    <p></p>
    <script>
        var btn = document.getElementsByTagName("button")[0];
        var oDiv = document.getElementsByTagName("div")[0]
        /* 
           speed值的问题
             0-500  speed的值正数   Math.ceil
             1000-500 speed的值是负数  Math.floor
        */
        //添加点击事件
        btn.onclick = function () {
   
            var timer = setInterval(function () {
   
                //在当前left值的基础上+10
                var current 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值