setTimeout为什么不延时就执行

ren180514 2016-12-14 09:52:48
本人刚刚接触JS,今天想模仿其他网站做个图片滚动,我希望的效果是一个图片向上滑动完后停留3秒,第二张图片在向上滑动,可是为什么用setTimeout时在if语句里没有实现等待3秒的效果,但是如果把var t=setTimeout("alert('ren')",3000); movead函数外面就有延时3秒的效果;

window.onload=function()
{
var oUl=document.getElementsByTagName('ul')[1];
var txt=document.getElementById('txt');
oUl.innerHTML=oUl.innerHTML+oUl.innerHTML;
//var t=setTimeout("alert('ren')",3000); // 为什么放到这里就可以延时执行
function movead()
{
var speed;
if(oUl.offsetTop==-400)
{
speed=0;
}
else{
speed=4;
}

oUl.style.top=(oUl.offsetTop-speed)+'px';

if(oUl.style.top==oUl.offsetTop+'px')
{
var t=setTimeout("alert('ren')",3000); // 放到这里虽然执行,但是不延时
}

if(oUl.offsetTop==-2800)
{
oUl.offsetTop==-1200;
};
}
timer=setInterval(movead,30);
}
...全文
450 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ren180514 2016-12-16
  • 打赏
  • 举报
回复
谢谢各位的回复,我大概明白点了, 可是我想请教一下,如果我想实现第一张图片滚动玩停留3秒第二张在滚动的效果,应该用什么方法。。
天际的海浪 2016-12-14
  • 打赏
  • 举报
回复
setTimeout()不会暂停当前程序线程的执行。 而是等当前程序线程执行完,才开始计时,计时到了之后重新建立一个新的程序线程来执行setTimeout()内的代码。
当作看不见 2016-12-14
  • 打赏
  • 举报
回复
函数执行不延时的原因一般是直接调用了函数 function a(){};
setTimeout(a(),1000);//会直接执行
setTimeout(a,1000)//正常执行,如果需要参数怎么办

setTimeout(function(){
a(ss);
},1000)//这样写是最好的。
当作看不见 2016-12-14
  • 打赏
  • 举报
回复
var t=setTimeout(function(){ alert(ren); },3000); //定时器里面尽量不要使用字符串,由于会先使用eval 执行解析一遍,再执行代码。这种形式比较好,也不容易出错,特别是字符串中的函数嵌套参数的时候。

87,902

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧