现在项目中处理css兼容前缀基本上都在webpack中集成了autoprefixer自动添加前缀,但在JS中操作样式只能手动添加webkit前缀,这样造成了代码的冗余,看起来也让人不舒服。
this.$refs.node.style['transform'] = `scale(1.5)`;
this.$refs.node.style['webkitTransform'] = `scale(1.5)`;
可以实现一个类似autoprefixer的工具函数自动检测浏览器兼容性添加前缀,代码如下
/* dom.js */
let elementStyle = document.createElement('div').style
let vendor = (() => {
let tranformNames = {
webkit: 'webkitTransform',
Moz: 'MozTransform',
O: 'OTransform',
ms: 'msTransform',
standard: 'transform'
}
for (let key in transformNames) {
if (elementStyle[transformNames[key]] !== undefined) {
return key
}
}
return false
})();
export function prefixStyle(style) {
if (vendor === false) {
return false
}
if (vendor === 'standard') {
return style
}
return vendor + style.charAt(0).toUpperCase() + style.substr(1)
}
使用
import { prefixStyle } from 'dom'
const transform = prefixStyle('transform ');
this.$refs.node.style[transform] = `scale(1.5)`;
这样看起来就清爽了好多,也会根据不同浏览器自动添加不同的兼容前缀。