我尝试使用Slicebox,但无法正常工作。它在 Chrome 和 Opera 中运行良好,我看到了一个不错的回退 - 但在 Firefox 中我只得到灰色框。我认为问题出在 Modernizr csstransforms3d 检测中。我不确定 Modernizr 是否应该检测 3d 变换。有谁知道究竟是什么导致了这种行为?
问问题
1000 次
2 回答
0
阅读代码后,我可以找到原因。
所有样式都带有-webkit
前缀,但脚本会检查Modernizr.csstransforms3d
. 因此,由于 firefox 支持csstransforms3d
它尝试应用 3d 变换样式,但 firefox 会忽略所有以-webkit
.
我目前的解决方案是正确地为所有样式添加前缀:
(function($){
if(Modernizr.csstransforms3d) {
var prefix = "";
if($.browser.mozilla){
prefix = "-moz-";
}else if($.browser.msie){
prefix = "-ms-";
}else if($.browser.opera){
prefix = "-o-";
}else{
return;
}
}
// Replace -webkit- with the current browser prefix
var postProcessStyles = function(styles){
$.each(styles,function(k,v){
styles[k.replace('-webkit-', prefix)] = typeof v === 'string' ? v.replace('-webkit-', prefix) : v;
styles[k.replace('-webkit-', '')] = typeof v === 'string' ? v.replace('-webkit-', '') : v;
});
}
// Inject style processor
var orig = $.Slice3d.prototype._configureStyles;
$.Slice3d.prototype._configureStyles = function(){
var origReturn = orig.apply(this,arguments),
_this = this;
postProcessStyles(this.style);
$.each(this.sidesStyles, function(k){
postProcessStyles(_this.sidesStyles[k]);
})
$.each(this.animationStyles, function(k){
postProcessStyles(_this.animationStyles[k]);
})
return origReturn;
}
}(jQuery));
演示:http: //jsbin.com/onokut/1
代码:http: //jsbin.com/onokut/1/edit
于 2012-09-11T16:17:53.240 回答
-1
它似乎不兼容 - 他们承认:
请注意,您只能在支持这些 CSS3 属性的浏览器(目前是 Chrome 和 Safari)中看到 Slicebox 的酷炫 3d 效果。
于 2012-09-11T14:18:23.513 回答