UNPKG

hm-react-cli

Version:

Create a Huimei React project by module

70 lines (65 loc) 2.1 kB
import { oneObject, camelize } from "react-core/util"; export let rnumber = /^-?\d+(\.\d+)?$/; /** * 为元素样子设置样式 * * @export * @param {any} dom * @param {any} lastStyle * @param {any} nextStyle */ export function patchStyle(dom, lastStyle, nextStyle) { if (lastStyle === nextStyle) { return; } for (let name in nextStyle) { let val = nextStyle[name]; if (lastStyle[name] !== val) { name = cssName(name, dom); if (val !== 0 && !val) { val = ""; //清除样式 } else if (rnumber.test(val) && !cssNumber[name]) { val = val + "px"; //添加单位 } try { //node.style.width = NaN;node.style.width = 'xxxxxxx'; //node.style.width = undefine 在旧式IE下会抛异常 dom.style[name] = val; //应用样式 } catch (e) { console.log("dom.style[" + name + "] = " + val + "throw error"); // eslint-disable-line } } } // 如果旧样式存在,但新样式已经去掉 for (let name in lastStyle) { if (!(name in nextStyle)) { name = cssName(name, dom); dom.style[name] = ""; //清除样式 } } } export let cssNumber = oneObject( "animationIterationCount,columnCount,order,flex,flexGrow,flexShrink,fillOpacity,fontWeight,lineHeight,opacity,orphans,widows,zIndex,zoom,WebkitLineClamp" ); //let testStyle = document.documentElement.style let prefixes = ["", "-webkit-", "-o-", "-moz-", "-ms-"]; export let cssMap = oneObject("float", "cssFloat"); /** * 转换成当前浏览器可用的样式名 * * @param {any} name * @returns */ export function cssName(name, dom) { if (cssMap[name]) { return cssMap[name]; } let host = (dom && dom.style) || {}; for (let i = 0, n = prefixes.length; i < n; i++) { let camelCase = camelize(prefixes[i] + name); if (camelCase in host) { return (cssMap[name] = camelCase); } } return null; }