setInterval在Opera中不起作用

时间:2013-07-08 21:42:17

标签: javascript opera

我试图使一个元素闪烁(通过对元素的可见性进行处理),但是由于某种原因它不能在Opera中工作。适用于Firefox和Chrome。

这是一个工作样本的小提琴: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);
}

2 个答案:

答案 0 :(得分:2)

正如@nevermind在上面的评论中指出的那样,问题不在于Opera。问题在于jsFiddle iframe。请注意,jsFiddle仍处于alpha阶段。因此肯定会有一些怪癖。希望开发人员能尽快修复它。

然而,你提供的代码并不真正需要jQuery,而且setInterval在Opera 12中运行得非常好。例如,这就是我所做的,它很好地眨眼:http://jsfiddle.net/XwEhj/

答案 1 :(得分:1)

我认为你正处于一个角落里的小车。

当涉及到用户界面时,依靠图形对象的状态来查找视图的状态并不是一个好习惯。换句话说,您不希望“读取”HTML元素中的视图状态,而是“变量”或称为视图模型的变量集。

我建议您以这种方式重写代码,我认为有很好的机会解决这个问题:

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

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