javascript - js运行动画实际上是锯齿状的是吗?
PHP中文网
PHP中文网 2017-04-11 10:30:32
[JavaScript讨论组]

假设有一个p,你要它沿着这条斜线运动,那么代码可能是这样写的:

for:
p.w = w;
p.h = h;

由于JS是串行执行的的,所有的编程语言,这种写法时运行都是串行往下执行的吧

那么问题就来了,实际上这个p并不是真正的做斜线运动的,而是一卡一卡的向右往下运动,用图来表示:

也就是说原来我们做的完美的动画都是“假”的啊!

我竟然从来没有意识到这个问题,真是恶心死了,我怎么才能做出真正的动画呢?

求大神指点哈:)

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(3)
大家讲道理

怎么会呢,在JS代码执行的时候,浏览器是不知执行渲染动作的~~~
只是你绘制的频率不够块的时候,动画会出现跳跃的现象,一般每秒24帧就可以实现联系的动画而不出现跳帧。但在计算机中还涉及到下一帧动画状态及位置等计算工作,往往24帧是不够的,要保持在每秒60帧,即使这样还是可能出现跳帧,例如在游戏等需要大量高速计算的情况下~~这个也是对游戏性能的一个重要的参考指标

<!DOCTYPE html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p id="myp" style="width:100px;height:100px;background-color: #00a23f;position: absolute;left:20px;top:20px;"></p>
<script>
    var pDom=document.getElementById("myp");

    var forwardFlag=true;
    function changepPosition(){


        if(currentX==20){
            forwardFlag=true;
        }

        if(currentX==400){
            forwardFlag=false;
        }
        currentX=currentX+(forwardFlag?5:-5);
        currentY=currentY+(forwardFlag?5:-5);

        pDom.style.left=currentX+"px";
        pDom.style.top=currentY+"px";
    }

    //低速刷新
    setInterval(changepPosition,1000);

    //每秒60刷新,实际不一定能到达
//    window.requestAnimationFrame(function p() {
//        changepPosition();
//        window.requestAnimationFrame(p);
//    });
</script>
</body>
</html>
黄舟

动画都是障眼法,实质是以极小的时间间隔刷新屏幕从而给人以物体连续移动的错觉。因此没有真正的动画。

PHP中文网

如果你深入了解一下浏览器的 JS 解析和页面渲染过程,你就会知道你设置了 p.w 之后浏览器并不会立即重绘 p 的位置,而是等“空闲”时再对页面进行重绘。因此这段代码实际执行过程中,并不会出现阶梯型的轨迹,而会是对角线轨迹。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号