我在这里遇到了许多帖子,详细说明了 CSS3 动画在 Firefox 中无法正常工作的问题,即使是动画只触发一次的问题:
和
一起记录 Firefox/jQuery/CSS 动画的错误?
但这些修复与我的问题无关。我已经让这些动画在 Safari/Chrome 中运行,甚至为所有 css 提供了正确的供应商前缀(即使 firefox 不应该需要它们)。我正在使用 Jquery 添加/删除类事件来触发动画,并且我可以在 firebug 中看到类在我期望它们发生变化时发生变化。
唯一的问题是动画第一次触发,但再也不会触发,只是默认使面板消失并重新出现
CSS:
/* CUSTOM SLIDING PANEL */
@-webkit-keyframes panelSlideLeft {
from {
opacity: $panelOpacityStart;
-webkit-transform: translateX(0);
}
to {
opacity: $panelOpacityEnd;
-webkit-transform: translateX($panelWidth);
}
}
@-moz-keyframes panelSlideLeft {
from {
opacity: $panelOpacityStart;
-moz-transform: translateX(0);
}
to {
opacity: $panelOpacityEnd;
-moz-transform: translateX($panelWidth);
}
}
@keyframes panelSlideLeft {
from {
opacity: $panelOpacityStart;
transform: translateX(0);
}
to {
opacity: $panelOpacityEnd;
transform: translateX($panelWidth);
}
}
.slide-panel-left-open {
opacity: $panelOpacityEnd;
-webkit-animation: panelSlideLeft $animationDuration linear;
-moz-animation: panelSlideLeft $animationDuration linear;
animation: panelSlideLeft $animationDuration linear;
-webkit-transform: translateX($panelWidth);
-moz-transform: translateX($panelWidth);
transform: translateX($panelWidth);
}
.slide-panel-left-close {
-webkit-animation: panelSlideLeft $animationDuration linear reverse;
-moz-animation: panelSlideLeft $animationDuration linear reverse;
animation: panelSlideLeft $animationDuration linear reverse;
}
在 javascript 中,我使用布尔值来确定要修改哪些类,并且在 Jquery 对象上设置了 slidePanel.side 并按预期更改为“左”或“右”,即使在 Firefox 中也是如此(有一个右滑动面板也使用此功能)。
JS:
slidePanel.bind('togglePanel', function() {
if(slidePanel.open) {
slidePanel.removeClass('slide-panel-' + slidePanel.side + '-open');
slidePanel.addClass('slide-panel-' + slidePanel.side + '-close');
} else {
slidePanel.removeClass('slide-panel-' + slidePanel.side + '-close');
slidePanel.addClass('slide-panel-' + slidePanel.side + '-open');
}
slidePanel.open = slidePanel.open ? false : true;
});