【问题标题】:Timeout in Jquery to update the Dom?Jquery中的超时更新Dom?
【发布时间】:2014-01-31 19:30:41
【问题描述】:

假设我想更改图像源 onClick 并进行一些计算。现在发生的是函数退出时源发生了变化。 (Dom 很忙?)

我怎样才能使图像源立即更新,然后函数继续执行 while 循环?

HTML:

<img src="http://goo.gl/l55G2P" id="ImageSrc">

JS:

$( "#ImageSrc" ).click(function() {

    new_imgsrc="http://goo.gl/wBhyee";

    $("#ImageSrc").attr('src',new_imgsrc);
    test = 0
    do {
        test = test + 1;
        console.log(test);
    } while (test != 50000);
});

Here 是一个 JSFiddle。

【问题讨论】:

  • 只需将循环包装在函数中,然后使用 setTimeout(fn(){...}, 0);
  • @dandavis 这种方法确实有效。但是没有更好的方法来完成这件事吗?为什么设置为 0?
  • 您设置为零是因为您不想等待。我不知道“更好”。

标签: javascript jquery html dom


【解决方案1】:

不确定我是否理解正确,但您可以使用超时:

setTimeout(function() {
    //while loop here
}, 1000);

1000 表示 1 秒。你可以缩小这个值,这样它就不会等太久。

由于click() 没有对onComplete 的回调,我不确定是否有更好的方法来实现这一点。

【讨论】:

  • Click 没有对 onComplete 的回调,所以不,我不知道。
  • @dandavis 我只是认为应该有一种更好/更直接的方法来使 Dom 在函数的中途发生变化。不是说答案是错的。
  • 会很好,但是 dom 很慢,批量更新有助于大大加快速度。
【解决方案2】:

这个问题实际上比仅仅设置一个超时有点棘手,如果你想做对的话。

设置超时的问题是超时必须足够大才能加载图像。如果图片没有在超时时间内加载,它仍然需要等待循环。

您实际上需要做的是给它一个在每一步之间更新 DOM 的机会。为此,您需要设置每 0 毫秒触发一次的超时(或间隔,但我更喜欢超时方法,因为您可以更好地控制)(基本上,尽可能快)。但是,由于这些都是超时,它有机会在准备好时更新其中两个之间的 DOM。

console.clear();
$( "#ImageSrc" ).click(function() {
    loading_imgsrc="http://goo.gl/wBhyee";

    $("#ImageSrc").attr('src',loading_imgsrc);
    console.log("changed");
    doTest(0);
});

function doTest(test) {
    test = test + 1;
    console.log(test);

    if (test < 1000) {
        setTimeout((function() { return function() { doTest(test); }})(), 0);
    }
}

JSFiddle:http://jsfiddle.net/E3zvL/4/

【讨论】:

  • 所以基本上,您将一个猜测替换为图像可能加载了两个?无论哪种情况,IMO 的情况都很糟糕。
  • 我尝试了 0ms 但没有。 jsfiddle.net/E3zvL/5你要小心。如果图像由于缓存或本地或其他原因而设法在不到 0 毫秒(即几纳秒)内加载,它将起作用。但是,如果它需要超过 0 毫秒的时间来完成,那么它将无法工作,就像它不适合我一样。我提供的方式更加健壮,并且无论加载图像需要多长时间都可以保证工作。
  • @webnoob 我不确定你的意思是替换一个猜测它可能会加载两个......它所做的一切都允许异步操作(任何类型)发生间隙每个循环之间。它本质上是使循环本身异步。
  • 对不起,我想我刚开始误解了。漫长的一天:)
猜你喜欢
  • 1970-01-01
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 2010-11-28
  • 1970-01-01
  • 2011-11-04
相关资源
最近更新 更多