2

我有一点Javascript检测浏览器并根据浏览器对元素应用转换。 Webkit可以在Chrome上正常工作,但Firefox不支持。有人可以告诉我,如果我下面的代码是正确的:Webkit和Moz转换,取决于浏览器

if(typeof navigator.vendor.toLowerCase().indexOf('chrome')!=-1){  
    document.getElementById('jj_preview7').style.WebkitTransform = 'scale(' + jj_input23 + ') ' + 'rotate(' + jj_input24 + 'deg)' + 'translate(' + jj_input25 + 'px, ' + jj_input26 + 'px)' + 'skew(' + jj_input27 + 'deg, ' + jj_input28 + 'deg)'; 
} 

if(typeof navigator.vendor.toLowerCase().indexOf('firefox')!=-1){ 
    document.getElementById('jj_preview7').style.MozTransform = 'scale(' + jj_input23 + ') ' + 'rotate(' + jj_input24 + 'deg)' + 'translate(' + jj_input25 + 'px, ' + jj_input26 + 'px)' + 'skew(' + jj_input27 + 'deg, ' + jj_input28 + 'deg)'; 
} 

在此先感谢

+3

您不必测试引擎是哪个。只要给他们两个分配样式,浏览器就会接受它支持的样式,而忽略另一个样式。 – xiaoyi

+0

我刚刚尝试过您的建议,并再次在Chrome上工作,但不是Firefox – Lodder

+0

您可以将代码发布到jsfiddle.net吗? – xiaoyi

回答

2
// Test element we apply both kinds of transforms to: 
var testEl = document.createElement('div'); 
testEl.style.MozTransform = 'translate(100px) rotate(20deg)'; 
testEl.style.webkitTransform = 'translate(100px) rotate(20deg)'; 
var styleAttrLowercase = testEl.getAttribute('style').toLowerCase(); 

// when we check for existence of it in the style attribute; 
// only valid ones will be there. 
var hasMozTransform = styleAttrLowercase.indexOf('moz') !== -1; 
var hasWebkitTransform = styleAttrLowercase.indexOf('webkit') !== -1; 

这样做,你现在可以做的事:

var transformParts = []; 

if (jj_input23 !== '') { 
    transformParts.push('scale(' + jj_input23 + ')'); 
} 

if (jj_input23 !== '') { 
    transformParts.push('rotate(' + jj_input24 + 'deg)'); 
} 
if (jj_input25 !== '' && jj_input26 !== '') { 
    transformParts.push('translate(' + jj_input25 + 'px, ' + jj_input26 + 'px)'); 
} 

if (jj_input27 !== '' && jj_input28 !== '') { 
    transformParts.push('skewX(' + jj_input27 + 'deg) skewY(' + jj_input28 + 'deg)'); 
} 
var transformTxt = transformParts.join(' '); 

if (hasWebkitTransform) {  
    document.getElementById('jj_preview7').style.WebkitTransform = transformTxt; 
} 

if (hasMozTransform) { 
    document.getElementById('jj_preview7').style.MozTransform = transformTxt; 
} 
+0

再次,在Chrome上工作,但不是FireFox – Lodder

+0

在Firefox 12.0/Mac中为我工作。实际上,我不清楚你的问题是什么。它是在检测还是在应用转换?有两个问题,“不适用于Firefox”并不足以让人们获得帮助。 – artlung

+0

这是不起作用的实际转换。这里是我的网站的链接。 http://joomjunk.co.uk/extras/css3-generator.html#transform如果您在其他选项卡上测试这些模块,它们将起作用,但转换不会。 – Lodder

0

这里是解决方案:http://jsfiddle.net/Adu49/1/

由于您直接从输入中读取而没有解析它,因此您可能会生成如下的CSS声明:scale() translate(deg,deg)这显然是非法的。在这种情况下,Firefox更愿意放弃它,而Chrome更愿意接受部分正确的声明。这就是为什么你的代码无法在Firefox上运行,但在Chrome上运行,并且在你填充所有字段后,它最终将在两个浏览器上运行。

所以我把一些value || default在你的代码,这将保证在输入框为空,适当的默认值设置(如果你想与用户进行交互,你在这里需要更多的验证代码。)

而且一些在这里的话题。请改变你命名变量和元素的方式,这太混乱了。

+0

感谢您的输入,在Chrome中工作,但它仍然无法在FireFox 13 stable或14 beta中工作 – Lodder

+0

您曾经测试过的值有哪些? – xiaoyi

+0

scale = 2,rotate = 22,translate = 22和22,skew = 22和22 – Lodder

相关问题