javascript - 为什么有两个setTimeout,分别是什么意思?
ringa_lee
ringa_lee 2017-04-11 11:56:01
[JavaScript讨论组]
var fade = function (node) {
        var level = 1;
        var step = function () {
            var hex = level.toString(16);
            node.style.backgroundColor = "#FFFF" + hex + hex;
            if(level < 15) {
                level += 1;
                setTimeout(step, 100);
            }
        };
        setTimeout(step, 100);
    };
    fade(document.body);

定义一个函数,它设置一个DOM节点为黄色,然后把它渐变为白色

ringa_lee
ringa_lee

ringa_lee

全部回复(3)
怪我咯
var fade = function (node) {
        var level = 1;
        var step = function () {
            var hex = level.toString(16);
            node.style.backgroundColor = "#FFFF" + hex + hex;
            if(level < 15) {
                level += 1;
                setTimeout(step, 100);//递归执行step,使颜色发生变化。level==15时递归结束。
            }
        };
        setTimeout(step, 100);//100毫秒之后执行step函数,这是node节点颜色变化的启动触发入口
    };
    fade(document.body);
迷茫

setTimeout只是延时一次, 所以最底下那个,是初始时的延迟,然后执行step函数,然后level还没到15,所以level+1,然后执行setTimeout,然后在level还没达到15之前,一直在调用setTimeout延迟调用step函数,直到最后一次setTimeout执行step时,level=15了,不再执行if条件下的内容~

黄舟

两个setTimeout ,上面那个只是让他定时执行变化已达到最终的颜色变化;下面那个估计只是为了让变化更连续柔和一些,他们的延时时间是一样的;

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

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