【问题标题】:How to proper use setTimeout with IE?如何在 IE 中正确使用 setTimeout?
【发布时间】:2014-04-09 08:05:49
【问题描述】:

对于用于研究网站交互的模型网页,我使用 JavaScript 创建了模型消息流。此消息流应以预设的时间间隔显示图像。在 Chrome 中,此代码以预设的时间间隔将图像发布在彼此下方。在 IE 中,仅显示第一张图像。我已经删除了 window.setTimeout 方法中的参数传递,但是我不知道我还需要做什么来满足 IE。我还应该怎么做才能使所有图像以预设的间隔出现?

我的脚本部分有几个全局变量:

var updateinterval = 400; // a multiplier (integer) used to 
var scrollinterval = 5; // an interval (integer) to wait before scrolling
var point; // integer used to prevent using parameters in window.setTimeout
var interval = [0, 10, 40]; // array of integers creating diversity in intervals
var images = ["r1", "a1", "r2"];// array of strings referring to images to show

存在以下功能:

function trypost(){
  point = point + 1;
  if(point < interval.length){
    //write the required image
    document.writeln("<img src='images/"+images[point]+".png'/><br/>"); 
    //time scroll to bottom
    var stb = window.setTimeout(scrollToBottom, scrollinterval);
    //time next post
    var nextupdate = interval[point]*updateinterval;
    var tp = window.setTimeout(trypost, nextupdate);
  }
}

function scrollToBottom(){
  window.scrollBy(0,document.body.scrollHeight);
}

function startpost(){
  point = -1;
  trypost();
}

window.onload = startpost;

【问题讨论】:

  • 我认为你应该使用document.getElementsByTagName('body')[0].innerHTML += "&lt;img src... 而不是document.writeln。此外,您在同一行上有一个流浪+。您在 IE 中是否遇到任何控制台错误?
  • 更改了 document.writeln,这似乎有效。

标签: javascript internet-explorer google-chrome


【解决方案1】:

您可以使用 setInterval 而不是重复调用 setTimeout,setInterval 会重复,直到您调用 clearInterval。

同样如 cmets 中所述,document.writeln 来自不同的十年;) 您现在可以直接修改 DOM。

var i=0;
var interval = [0, 10, 400, 10, 1000];
var images = [
  "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRTiW-7zqLiG1DNq4Tmt6x4j1iBc0FZRBpyYZtIXgDzUy_NHwTv",
    "http://img2.wikia.nocookie.net/__cb20120327004334/mrmen/images/a/a0/MrMean.gif",
    "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRTiW-7zqLiG1DNq4Tmt6x4j1iBc0FZRBpyYZtIXgDzUy_NHwTv",
    "http://img2.wikia.nocookie.net/__cb20120327004334/mrmen/images/a/a0/MrMean.gif",
    "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRTiW-7zqLiG1DNq4Tmt6x4j1iBc0FZRBpyYZtIXgDzUy_NHwTv"
];


for(var i=0; i<interval.length;i++)
var timer = setTimeout(function(img){
    var newImg = document.createElement("IMG");
    newImg.src = img;
    document.getElementById('holder').appendChild(newImg);

}, interval[i], images[i]);

使用此 HTML

<div id='holder'>

</div>

运行演示 http://jsfiddle.net/W7QXH/4/

【讨论】:

  • 这个方案没有使用我想使用的预设区间长度数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-29
  • 1970-01-01
  • 2010-11-08
相关资源
最近更新 更多