监听 CSS 变量变化?
Listen to CSS variable change?
是否可以使用回调来监听CSS变量的变化?像这样:
documentElement.addListener('css-var-main-background-color', () => {
console.log('Value changed');
});
简单回答:“不,这不可能。”
但是通过使用 Window.getComputedStyle() 方法并在一定时间间隔内检查其 return 值(不利于性能),您可以观察样式变化并对其做出反应。
您可以在 getComputedStyle()
此处阅读 https://developer.mozilla.org/en-US/docs/Web/API/Window/getComputedStyle
样式属性中定义的变量
如果您可以完全控制代码并且可以通过 DOM 元素上的 style
属性设置 CSS 变量而不是使用样式表,您可以使用 MutationObserver
来检测该元素的样式属性的变化,从而检测变量的变化。
变量必须这样设置:
document.documentElement.style.setProperty('--var1', '1');
而且不是这样的:
:root {
--var1: 1;
}
然后就可以监听目标元素style属性的变化了。
let value = '1';
const styleObserver = new MutationObserver((mutations) => {
const currentValue = mutations[0].target.style.getPropertyValue('--var1');
if (currentValue !== value) {
// the variable has changed
value = currentValue;
}
});
styleObserver.observe(document.documentElement, {
attributes: true,
attributeFilter: ['style'],
});
上面的示例是针对 html 元素的,它通常是您放置全局变量的地方,但它可以与任何其他元素一起使用。
样式表中定义的变量
如果您愿意以特定方式定义样式表,这是可能的:
- 必须在
<style></style>
元素中定义变量
- 样式元素应仅包含您要观察的变量,以使其尽可能具体,并且在不相关的属性更改时不会触发观察者
然后您可以使用 MutationObserver
观察样式元素的变化并解析其内容以检测哪些变量发生了变化。
是否可以使用回调来监听CSS变量的变化?像这样:
documentElement.addListener('css-var-main-background-color', () => {
console.log('Value changed');
});
简单回答:“不,这不可能。”
但是通过使用 Window.getComputedStyle() 方法并在一定时间间隔内检查其 return 值(不利于性能),您可以观察样式变化并对其做出反应。
您可以在 getComputedStyle()
此处阅读 https://developer.mozilla.org/en-US/docs/Web/API/Window/getComputedStyle
样式属性中定义的变量
如果您可以完全控制代码并且可以通过 DOM 元素上的 style
属性设置 CSS 变量而不是使用样式表,您可以使用 MutationObserver
来检测该元素的样式属性的变化,从而检测变量的变化。
变量必须这样设置:
document.documentElement.style.setProperty('--var1', '1');
而且不是这样的:
:root {
--var1: 1;
}
然后就可以监听目标元素style属性的变化了。
let value = '1';
const styleObserver = new MutationObserver((mutations) => {
const currentValue = mutations[0].target.style.getPropertyValue('--var1');
if (currentValue !== value) {
// the variable has changed
value = currentValue;
}
});
styleObserver.observe(document.documentElement, {
attributes: true,
attributeFilter: ['style'],
});
上面的示例是针对 html 元素的,它通常是您放置全局变量的地方,但它可以与任何其他元素一起使用。
样式表中定义的变量
如果您愿意以特定方式定义样式表,这是可能的:
- 必须在
<style></style>
元素中定义变量 - 样式元素应仅包含您要观察的变量,以使其尽可能具体,并且在不相关的属性更改时不会触发观察者
然后您可以使用 MutationObserver
观察样式元素的变化并解析其内容以检测哪些变量发生了变化。