JS操作CSS3屬性時自動添加前綴

在做前端開發(fā)時,經(jīng)常要在css3的屬性前加上各瀏覽器廠商的前綴:

  • 如果是在css中,編輯器自帶的功能一般可以實現(xiàn),或者通過gulp、webpack打包時也都有插件實現(xiàn)自動添加
  • 如果是在js中,可以用下面的代碼:封裝成一個prefixStyle()函數(shù)復(fù)用
//dom.js文件
let elementStyle = document.createElement('div').style

function vendor(prop) {
    let ucProp = prop.charAt(0).toUpperCase() + prop.substr(1)
    let transformNames = {
        webkit: `webkit${ucProp}`,
        Moz: `Moz${ucProp}`,
        O: `O${ucProp}`,
        ms: `ms${ucProp}`,
        standard: prop
    }

    for (let key in transformNames) {
        if (elementStyle[transformNames[key]] !== undefined) {
          return key
        }
    }

    return false
}

export function prefixStyle(style) {
    const ret = vendor(style)
    if (ret === false) {
      return false
    }

    if (ret === 'standard') {
      return style
    }

    return ret + style.charAt(0).toUpperCase() + style.substr(1)
}

然后,在頁面中調(diào)用,如下:

import {prefixStyle} from 'common/js/dom.js'

const transform = prefixStyle('transform')
const transition = prefixStyle('transition')

el.style[transform] = 'translate3d(0, 0, 0)'  //這里的 el 根據(jù)實際情況替換成DOM節(jié)點
el.style[transition] = 'all 0.4s ease'

還有另外一種封裝方式,原理相同,只是根據(jù)使用場景不同,自己區(qū)分用哪個吧!
就不在這里廢話了,貼個鏈接
http://blog.163.com/mity_rui@126/blog/static/109813618201542724555/

最后簡單看下原理

這么一坨代碼,其實分析一下,最重要的應(yīng)該是第一句了

let elementStyle = document.createElement('div').style

在瀏覽器中打印下看看(我只看了火狐和谷歌,其他瀏覽器下,有興趣的自己試試)


火狐瀏覽器下

谷歌瀏覽器下

結(jié)果已經(jīng)很明顯了!
當(dāng)你單獨測試一下具體的屬性值,例如“transform”。如果沒有你想要的屬性,瀏覽器會返回undefined,如果有,會返回一個空的String字符串。
剩下的工作就是讓我們的程序來識別這些特征了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,001評論 25 709
  • 在圖書館偶遇許久不見的閨蜜,相約吃完午飯,決定一起乘三輪車去一個地方。 此刻的天已經(jīng)顯出夏日的趨勢了。...
    一璐有涵閱讀 633評論 2 1
  • 大家都知道iOS的系統(tǒng)相冊是不支持gif圖片預(yù)覽的。但是,這并不代表系統(tǒng)相冊不能保存和讀取gif圖片。通過Safa...
    wwwbbat閱讀 11,948評論 10 42
  • 1月6日消息,據(jù)爆料,央視將在2017年春節(jié)聯(lián)歡晚會中將推出VR全景直播,觀者只需要下載央視影音客戶端即可進行觀看...
    幻眼科技閱讀 718評論 0 1
  • 天氣漸涼,多穿衣服!這些聽得繭都能堆成山的話似乎也沒那么難接受。一個人窩在公司附近診所的椅子里,頗感無聊,抬頭看看...
    穿著條紋的西瓜閱讀 258評論 0 1

友情鏈接更多精彩內(nèi)容