2013-07-08 56 views
3

我試圖讓一個元素閃爍(通過元素的可見性),但無論如何它在Opera中不工作。在Firefox和Chrome中運行良好。setInterval在Opera中不起作用

這裏有一個工作示例小提琴:http://jsfiddle.net/UDWkK/2/

我不認爲我所做的任何明顯的錯誤。

測試在Opera 12

代碼:

var blinker; 
function blink(elem) { 
    clearInterval(blinker); 
    blinker = setInterval(function() { 
     if ($(elem).css('visibility') === 'hidden'){ 
      $(elem).css('visibility', 'visible'); 
     } else { 
      $(elem).css('visibility', 'hidden'); 
     } 
    }, 500); 
} 
+0

這是工作(歌劇12.15, Win7; JQuery 2.0.2),在jsfiddle之外。 – sinisake

+0

這是Opera蜻蜓腳本部分引發的錯誤:http://i.imgur.com/Mokr8Fd.png?1(在jquery中,只是在jsfiddle中)。然而,代碼工作正常,在jsfiddle之外(離線測試):http://jsbin.com/awexox/1 ...奇怪的是,與框架有關的東西,我希望有些大師會有解釋。 :) P.S. http://fiddle.jshell.net/UDWkK/show/ - 框架是問題,def。 :) – sinisake

+0

感謝您的信息! –

回答

1

我認爲你是在一個角落裏車的情況。

當涉及到用戶界面時,依靠圖形對象的狀態來找出視圖的狀態並不是一個好習慣。換句話說,您不想在HTML元素中「讀取」視圖的狀態,而是在一個變量或稱爲視圖模型的一組變量中。

我建議你重寫代碼這種方式,我覺得有一個很好的機會來解決的bug:

var blinker; 
function blink(elem) { 
    clearInterval(blinker); 

    var visible = false; 
    blinker = setInterval(function() { 
     visible = !visible; 
     $(elem).css('visibility', visible ? 'visible' : 'hidden'); 
    }, 500); 
} 
2

由於@nevermind在評論中指出的上述問題不使用Opera。問題在於jsFiddle iframe。請注意,jsFiddle仍處於alpha階段。因此必然會出現一些怪癖。希望開發人員儘快修復它。

不過你提供的代碼並不真正需要jQuery和setInterval作品在Opera 12完美的罰款例如,這是我做的,它閃爍客場很好:http://jsfiddle.net/XwEhj/