Webkit和Moz Transform,取决于浏览器

时间:2012-06-09 16:10:18

标签: javascript firefox cross-browser transform browser-detection

我有一些Javascript可以检测浏览器,并根据浏览器对元素应用转换。 Webkit适用于Chrome,但Firefox不适用。有人可以告诉我,如果我的代码是正确的:

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)';
}

提前致谢

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

以下是解决方案:http://jsfiddle.net/Adu49/1/

当您直接从输入中读取而不解析它时,您可能会生成类似于scale() translate(deg,deg)的CSS声明,这显然是非法的。在这种情况下,Firefox更喜欢放弃它,而Chrome更喜欢接受部分正确的声明。这就是为什么你的代码不能在Firefox上运行,而是在Chrome上运行,填写完所有字段后,它最终会在两个浏览器上运行。

所以我在你的代码中加了一些value || default,这样可以保证输入框为空时设置正确的默认值(如果你想与用户交互,你需要更多验证代码。)

这里有一些偏离主题的话题。请更改命名变量和元素的方式,这太混乱了。