element.style.display ='none'在firefox中不起作用,但是在chrome中

时间:2011-09-02 20:36:39

标签: javascript html css firefox google-chrome

我有这个动画按钮托盘,我正在使用-moz-transition和-webkit-transition,我隐藏按钮然后将它们隐藏在新位置。这在Chrome中工作得很好,但由于某种原因它不会隐藏在Firefox中的元素(暂时忽略IE浏览器中的另一个人专门研究这个,所以他会让它在那里工作的穷人)。

我想知道它是否与-moz-transition有关,如果它的行为方式不同,那么-webkit-transition真的是我唯一能想到的。

这是隐藏按钮的功能(右侧有一个完全相同的语法):

          function hide_slide_left(button_one, button_two){

            if(button_two == ''){
                button_one.style.display = 'none';
                button_one.style.left = -120 + 'px';
                var t = setTimeout(function(){show_slide_left(button_one,button_two)}, 10);
            }else{
                button_one.style.display = 'none';
                button_two.style.display = 'none';
                button_one.style.left = -120 + 'px';
                button_two.style.left = -230 + 'px';
                var t = setTimeout(function(){show_slide_left(button_one,button_two)}, 10);
            }
         }

Show_slide_left设置button_one.style.display ='block'

这是动画的CSS:

        .buttons li {
          -webkit-transition: all .5s ease-in-out;
          -moz-transition: all .5s ease-in-out;
          z-index: 0;
        }

这里是按钮的css(托盘中共有4个以上):

        #button0{
          background: url(images/some_background_image.png) no-repeat;
          height: 117px;
          float: left;
          left:50px;
          width: 134px;
          display: block;
          cursor: pointer;
          position: absolute;
        }

以下是调用hide_slide_left的函数的一部分:

             var button_temp1 = '';
             var button_temp2 = '';
             var s = '';

             s = ((cc + 4)%5);
             cc = ((cc-number + 5)%5);

             if(number == 1){
                button_temp1 = document.getElementById("button"+ s);
                var t= setTimeout(function(){hide_slide_left(button_temp1, button_temp2)},500);
             } else {
                button_temp1 = document.getElementById("button"+ s);
                s = ((s+4)%5);
                button_temp2 = document.getElementById("button"+ s);
                // button_temp2.style.left = 50 + 'px';
                var t= setTimeout(function(){hide_slide_left(button_temp1, button_temp2)},500);
                // button_temp1.style.left = 194 + 'px';
             }

cc是一个全局变量,用于跟踪按钮在托盘中的位置,如您所见,本地示波器仅用于选择要移动的按钮。

我试图在重新定位按钮之前隐藏按钮的原因是,在用户处于最终位置之前,用户不会看到其他位置。

此外,如果我更改了hide_slide_left中的超时延迟,那么它可以在Firefox中运行,但它仍然是错误的(有时按钮只是出现而不是动画有时它们没有)并且它在动画中引入了各种图形延迟我真的不能容忍。所以仍在寻求帮助。

任何帮助将不胜感激,但我只使用JavaScript而不是jQuery谢谢。

这是一个jsFiddle来演示我在做什么:jsFiddle

如果你在Chrome中查看它,那么当屏幕离开屏幕时它会正常工作它们会消失,然后再次出现在另一侧并滑入到位。在Firefox中,它们不会消失,只是在其他元素的下方(或上方)滑动,有时不会达到应有的程度。我真的很困惑为什么Firefox表现得如此不同。

4 个答案:

答案 0 :(得分:3)

@Neil部分正确。它不起作用的原因是因为Mozilla实现了转换的方式。

然而,与他所说的相反。应用转换,其中未应用display:none。它基本上被css中存在转换规则的事实所推翻。

解决这个问题的方法(目前,希望Mozilla改变它们的实现)是使用多个函数和2个不同的css类规则。 (虽然很笨重,但仍然可以更简单,然后用javascript移动东西)。

所以你的第一堂课有一个过渡,它将瓷砖移出屏幕。然后它获得一个没有转换规则的新类。然后你可以用javascript将它的位置设置到旋转木马的另一侧,它会立即到达那里而不会被看到,因为它不再具有过渡属性。最后,重新应用过渡类,并将其移动到旋转木马另一侧的最终位置。

效果与Chrome相同,但绝对不如优雅。

答案 1 :(得分:1)

你的代码中唯一缺少的是该函数的右大括号,但我确信你的代码中有这个,因为它在Chrome上工作。

奇怪的是,在我的机器上同时使用FF和Chrome - 当你调用它时,你如何调用hide_slide_left以及button_one和button_two是什么?

答案 2 :(得分:1)

我不认为Firefox使用display: none;样式时会应用转换 - 您需要以不同的方式隐藏按钮,可能使用visibility: hidden;

答案 3 :(得分:-1)

试试这个

setAttribute( 'style', 'display:none' )

而不是

style.display = 'none';

我还不能测试它,但我认为在FF中有一些奇怪的行为。