Webkit 和 Moz Transform,具体取决于浏览器
Webkit and Moz Transform, depending on browser
我有一些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)';
}
提前致谢
// 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;
}
这是解决方案: http://jsfiddle.net/Adu49/1/
由于您直接从输入中读取而不对其进行解析,因此您可以生成 CSS 声明,例如: scale() translate(deg,deg)
这显然是非法的。在这种情况下,Firefox 更喜欢删除它,而 Chrome 更喜欢接受部分正确的声明。这就是为什么你的代码在Firefox上不起作用,而是在Chrome上工作,并且在你填写所有字段后,它最终将在两个浏览器上运行。
所以我在你的代码中放置了一些value || default
,这将保证在输入框为空时设置正确的默认值(如果你想与用户交互,你需要在这里有更多的验证代码。
这里还有一些题外话。请更改命名变量和元素的方式,这太混乱了。
相关文章:
- 访问布局信息是否也会导致浏览器重排
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 有时数据是't显示在浏览器中
- 使图像在单击时展开到不大于浏览器
- fetch() 函数未在 Ubuntu Chromium 浏览器上定义
- 不同浏览器中的空白字符正则表达式行为
- 在Windows 10中自动执行例行程序(主要与浏览器交互)
- Windows形成web浏览器控件和Javascript更改的DOM
- 如何临时暂停浏览器渲染,然后恢复整个页面
- 使用angularjs向浏览器发送servlet响应(下载功能)
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- 谷歌地图API v3不适用于移动浏览器或PhoneGap
- 禁用(而不是隐藏)浏览器滚动条
- Webkit 和 Moz Transform,具体取决于浏览器
- 如何设置当前日期取决于浏览器的日期格式
- 使用jQuery添加css取决于浏览器
- 未捕获的TypeError ("no access")问题与jquery取决于浏览器导航
- 浏览器的js语法错误取决于服务器…仅适用于某些浏览器
- 替换<td>其中<tr>取决于浏览器宽度