我有一个奇怪的问题。它只发生在 Chrome 24 (AFAIK) 上,所以它可能是一个 Chrome 错误,但如果不是,我想在未来证明我的脚本。
我有一个全屏 CSS3 库的库。现在我的库非常庞大,过于复杂,并且如果这样配置(默认为 jQuery),它具有许多花哨的功能,例如 CSS3 淡出。现在 jQuery 过渡和 CSS3 过渡一样(尴尬地)工作得很好。问题仅在于 CSS3 转换加载的第一个图像。
我花了过去两个小时来隔离问题并找到了它。问题是.removeClass('fadeout')
开得太早了。我无法完全理解为什么会发生这种情况,但我唯一可能的解释是当画廊触发时 CSS 没有加载.removeClass('fadeout')
。这似乎完全不真实,因为浏览器首先加载 CSS,然后它开始加载 jQuery,在 jQuery 准备好之后它加载我的画廊库,然后当那个库准备好时,我加载启动画廊并开始加载第一个程序的函数图片。
所以,不要再拖延了,这是导致问题的代码:
self.backgroundDiv.css(self.transitionClass).on(self.transitionType, stopRunning).removeClass('fadeout')
解释一下 -self.backgroundDiv
为包含背景图像的 div 保存 jQuery 容器。.css(self.transitionClass)
在该 div 上添加转换:
{-moz-transition: "1000ms", -o-transition: "1000ms", -webkit-transition: "1000ms", transition: "1000ms"}
.on(self.transitionType, stopRunning)
绑定特定于浏览器的过渡结束事件以触发一个函数,该函数告诉库第一个图像已加载。
所以现在我已经研究了所有这些,以确定他们是否从事件中删除了浏览器前缀,webkitTransitionEnd
并逐行逐行添加第一个图像的整个过程,一切正常。所以我剩下的就是这个淡出类,当我尝试它时,我无法相信它就是它。
我怎么知道这是问题所在?因为上面没有工作,但这使它完美地工作:
window.aaa = self.backgroundDiv.css(self.transitionClass).on(self.transitionType, stopRunning);
setTimeout("window.aaa.removeClass('fadeout')", 0);
所以我的问题是 - 怎么可能.removeClass
过早触发以及如何解决这个问题(除了丑陋的 setTimeout)?无论如何我可以检查CSS何时加载?
谢谢!