el.style是一个特殊的对象,它不是普通的JavaScript对象,因此不能直接用Object.assign或者类似的手段来一次性更新多个样式属性。相反,你需要逐个设置样式属性。
function calcStyle() {
const el = document.querySelector(.bg-color-${instant._uid}
);
if (el) {
el.style.maxWidth = ${defaultTooltipMaxWidth.value}px
;
el.style.fontSize = ${props.tooltipFontSize}px
;
el.style.color = props.tooltipColor;
el.style.backgroundColor = props.tooltipBackgroundColor;
// const styles = {
// ...props.tooltipOverlayStyle,
// maxWidth: ${defaultTooltipMaxWidth.value}px
,
// fontSize: ${props.tooltipFontSize}px
,
// color: props.tooltipColor,
// backgroundColor: props.tooltipBackgroundColor,
// };
//
// const _style = el.style;
//
// el.style = Object.assign(_style, styles);
instant.$forceUpdate();
}
}
注释的修改样式的方法为啥不行,请修复
你提到的注释中的代码尝试通过创建一个styles
对象,然后使用Object.assign
将这个对象合并到元素的现有样式中。然而,直接对el.style
进行这样的赋值操作是不正确的,因为CSSStyleDeclaration
对象(即el.style
)不能通过这种方式更新。
el.style
是一个特殊的对象,它不是普通的JavaScript对象,因此不能直接用Object.assign
或者类似的手段来一次性更新多个样式属性。相反,你需要逐个设置样式属性。下面是如何修复你的代码:
function calcStyle() {
const el = document.querySelector(`.bg-color-${instant._uid}`);
if (el) {
// 原始的工作方式
el.style.maxWidth = `${defaultTooltipMaxWidth.value}px`;
el.style.fontSize = `${props.tooltipFontSize}px`;
el.style.color = props.tooltipColor;
el.style.backgroundColor = props.tooltipBackgroundColor;
// 修改后的正确方法来应用额外的样式
const styles = {
...props.tooltipOverlayStyle,
maxWidth: `${defaultTooltipMaxWidth.value}px`,
fontSize: `${props.tooltipFontSize}px`,
color: props.tooltipColor,
backgroundColor: props.tooltipBackgroundColor,
};
// 遍历并应用每个样式属性
for (const [key, value] of Object.entries(styles)) {
el.style[key] = value;
}
instant.$forceUpdate();
}
}
在这个修正版中,我们首先定义了styles
对象,包含了所有想要应用的样式。然后,我们遍历这个styles
对象,并为每一个键值对调用el.style[key] = value;
,这样就可以正确地更新元素的样式了。
请注意,如果你的props.tooltipOverlayStyle
包含的是CSS属性名而不是驼峰命名法(例如'font-size'
而非fontSize
),你需要在设置之前将它们转换成驼峰命名法,或者直接使用原始的CSS属性名称,因为现代浏览器支持这两种形式。但是,在JavaScript中操作样式时,推荐使用驼峰命名法。