2012-07-22 85 views
2

我尝试使用Slicebox,但我无法得到它的作品。它在Chrome和Opera中效果很好,我看到一个不错的回退 - 但在Firefox中,我只有灰色框。我认为问题在Modernizr csstransforms3d检测。我不确定Modernizr是否应该检测3d变换。有谁知道究竟是什么导致了这种行为?在火狐切片盒

回答

-1

它似乎并不兼容 - 他们承认:

请注意,您只能看到支持这些CSS3属性(目前Chrome和 一个 浏览器Slicebox的COOL 3D效果苹果浏览器)。

+1

的问题是,回退不用于Firefox – jantimon 2012-09-11 14:20:54

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

+0

工作不要做这个。这将在Firefox和Opera中打破,它们不会在变形前加上 – 2012-09-17 00:05:44

+0

而是在postProcessStyles中使用'Modernizr.prefixed('transform')'。它会正确地告诉你使用什么样式的属性。 http://modernizr.com/docs/#prefixed – 2012-09-17 00:07:25

+0

谢谢@PaulIrish我试过'Modernizr.prefixed(k.replace(' - webkit-',''))'但是这只会导致奇怪的效果。我添加了一行来删除我的代码中的前缀。你对此有何看法? – jantimon 2012-09-17 08:41:44