求解:Javascript如何控制定时执行

目标:要让网页上的一张图片的宽度逐渐加大,形成动画效果,如何写代码?我写了一段利用setTimeout的代码结果就是不行,请教原因!代码如下:<imgsrc="http:... 目标:
要让网页上的一张图片的宽度逐渐加大,形成动画效果,如何写代码?
我写了一段利用setTimeout的代码结果就是不行,请教原因!

代码如下:
<img src="http://www.sharejs.com/code/gg/jcommon6/01.jpg" id='img' alt="" />
<script>
var x=document.getElementById('img');
function resize(x){
x.width++;
}
while(x.width<1000){
setTimeout(resize(x), 500);
}

</script>
展开
 我来答
nbyh2012
2013-06-22 · TA获得超过3278个赞
知道小有建树答主
回答量:483
采纳率:100%
帮助的人:801万
展开全部

实际上你的代码并未起到定时器的作用。因为,你在一次循环里设置了所有的setTimeout。由于所有定时器的延时都是相等的,那么这些setTimeout都会同时执行。


所以程序的作用是:在一定的时间间隔后,元素长度一次性变得非常大,看不到平滑缩放动画的效果。而且这个循环执行的次数会非常多,因为在延迟还未结束时,元素的长度不变,循环不会结束。


现在你要做的时:在每次宽度增加以后,再生成一个新的定时器。


建议采用递归的方式执行:

// 方法一:使用全局变量
window.x = x;
function resize() {
    window.x.width++;
    if (window.x.width < 1000) {
        setTimeout('resize()', 500);
    }
}
resize();

// 方法二:使用闭包, 避免污染全局变量
function resize_animate(x) {
    function resize() {
        x.width++;
        if (x.width < 1000) {
            setTimeout('resize()', 500);
        }
    }
    resize();
}
resize_animate(x);
追问
我还是不太理解。
按照我的第一次的写法,
开始先检查X.width是否到达1000像素,如果没有到达,则在500毫秒以后执行“x.width++”;然后再检查有没有到达1000像素。。。。

我不明白为什么x.width会一下子增加到1000.
追答
但是500毫秒后,所有的延时一股脑都开始执行。。而且x.width很可能会比1000像素大。因为刚开始元素的长度是不变的,循环瞬间执行了很多次。500毫秒后,多少个长度加1会执行呢?
963250
2013-06-22 · TA获得超过173个赞
知道小有建树答主
回答量:268
采纳率:100%
帮助的人:141万
展开全部
你好:
这样写的代码执行的效率非常底,你可以采用jquery实现,jquery有相应的函数实现,例如:ainimate;

希望可以帮助到你.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-06-22
展开全部

用setInterval也可以。。setTimeout是延迟执行,你这么写只会执行一次

<script>
var x=document.getElementById('img');
function resize(x){
x.width++;
}
var time = setInterval(function(){
        resize(x);
        if(x.width>1000){
            clearInterval(time);
        }
    },500)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式