element.style.display = 'none' not working in firefox but is in chrome
我有一个动画按钮托盘,有一次我正在使用-moz-transition和-webkit-transition,我隐藏了按钮,然后将它们取消隐藏在新的位置。这在Chrome中工作正常,但由于某种原因,它没有在Firefox中隐藏元素(现在忽略IE,办公室里的另一个人专门研究这个问题,因此他将使它在可怜的灵魂中工作)。
我想知道它是否与-moz-transition有关,并且其行为方式是否不同,那么-webkit-transition确实是我唯一能想到的。
这是隐藏按钮的函数(右边有一个语法完全相同的按钮):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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:
1 2 3 4 5 | .buttons li { -webkit-transition: all .5s ease-in-out; -moz-transition: all .5s ease-in-out; z-index: 0; } |
这是按钮的css(托盘中还有4个按钮,总共5个按钮):
1 2 3 4 5 6 7 8 9 10 | #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的函数的一部分:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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是一个全局变量,用于跟踪按钮在托盘中的位置,如您所见,s是局部作用域,仅用于选择要移动的按钮。
我要在重新放置按钮之前先隐藏它们的原因是,以便用户在最终位置之前看不到要去的地方。
此外,如果我在hide_slide_left中更改超时延迟,则它可以在Firefox中运行,但仍然存在问题(有时按钮只是出现而不是动画,有时却不显示),并且在动画中引入了各种图形滞后我真的不能容忍因此仍在寻求帮助。
任何帮助将不胜感激,但我仅使用JavaScript而不是jQuery,谢谢。
这里是一个jsFiddle来演示我在做什么:jsFiddle。
如果您在Chrome中查看它,则当块从屏幕上消失时,它们会正常工作,然后消失,然后重新出现在另一侧并滑入到位。在Firefox中,它们不会消失,只是在其他元素下面(或上方)滑动,有时甚至不会达到应有的程度。我对为什么Firefox表现得如此不同感到非常困惑。
@Neil部分正确。它不起作用的原因是由于Mozilla实现过渡的方式。
然而,这与他所说的相反。已应用过渡,未应用其
解决此问题的方法(当前希望Mozilla更改其实现)是使用多个函数和2个不同的CSS类规则。 (这很笨重,但是使用javascript移动某些内容仍然可以更简单)。
因此您的第一堂课上有一个过渡,可以将磁贴移出屏幕。然后,它将获得一个没有过渡规则的新类。然后,您可以使用javascript将其位置设置到轮播的另一侧,由于它不再具有过渡属性,因此它会立即转到那里而不可见。最后,您重新应用过渡类,并将其移至轮播另一侧的最终位置。
效果与Chrome中的效果相同,但绝对不那么优雅。
我不认为当您使用
代码中唯一缺少的是该函数的右括号,但是我确定您的代码中已经包含了该括号,因为它可以在Chrome上运行。
这很奇怪,可以在我的计算机上同时在FF和Chrome上运行-您如何调用hide_slide_left以及调用它时的button_one和button_two是什么?
试试这个
1 | setAttribute( 'style', 'display:none' ) |
而不是
1 | style.display = 'none'; |
我还不能测试它,但是我认为FF中有一些奇怪的行为。