2012-02-22 137 views
1

我爲div「生成板」定義了一個click事件。當你點擊它時,會產生一個隨機數獨板。問題是我希望div在生成電路板時具有閃爍效果,但在generate_random_board()函數完成之前不會閃爍。我在那裏放了一個超時函數,以便GUI線程重新獲得控制和更新。這適用於更改文本/板子輸入,但不適用於漸變效果(在for循環中)。有誰知道這是爲什麼,以及如何解決它?同樣,我只想讓div在「generate_random_board()」函數運行時閃爍,並在完成時停止。謝謝!GUI線程無法正確更新jQuery

下面是相關代碼:

$('.generate_board').click(function(){ // generate a random board click 
        $(this).text('Generating Board...'); 
        for(i=0;i<3;i++){ 
          $(this).fadeTo('slow', 0.5).fadeTo('slow', 1.0); 
        } 
        $('.board_input').val(''); 
        $('.sudoku_message_box').text('This uses an NP-hard algorithm, so it can take a while...'); 
        window.setTimeout(function(){ 
          generate_random_board(); 
        }, 30); 
      }); 

回答

0

你變淡很可能吃了對方。相反,嘗試以這種方式鏈接它們:

function fadeInOutSlow(obj, x){ 
    obj.fadeTo('slow', 0.5, function(){ 
     obj.fadeTo('slow', 1.0, function(){ 
      if ((x-1) > 0) fadeInOutSlow(obj, x-1); 
     }); 
    }); 
} 

$('.generate_board').click(function(){ // generate a random board click 
        $(this).text('Generating Board...'); 
        fadeInOutSlow($(this), 3); 
        $('.board_input').val(''); 
        $('.sudoku_message_box').text('This uses an NP-hard algorithm, so it can take a while...'); 
        window.setTimeout(function(){ 
          generate_random_board(); 
        }, 30); 
      }); 
+0

傳遞給'obj.fadeTo()'的第三個參數是回調函數。這個函數直到轉換完成後纔會執行,這就是爲什麼這個方法成功了 - 在淡入時它不能淡出(這可能是你的3連續淡出/進入的狀態) – 2012-02-22 19:54:05

+0

我的方法起作用,它只是在generate_random_board()之後纔開始閃爍。我可以完全取出for循環,它仍然執行相同的操作。我試過你的代碼,它也做了同樣的等待。 : - \ – 2012-02-22 21:00:59

+0

你有沒有在線的例子?很難從其他設置的背景中看出可能導致問題的原因。 – 2012-02-23 04:39:09