可直接用 watchEffect 监听响应式 themeColor 并动态更新 CSS 变量实现主题色实时切换,需在 setup 中定义 ref 主题状态、封装 updateThemeVars 函数批量设置变量、绑定 UI 控件触发变更,并注意 SSR 兼容与 CSS 变量作用域。

如何利用 watchEffect 监听 CSS 变量?实现一键切换主题颜色的实战

可以直接用 watchEffect 监听响应式数据的变化,再动态更新 CSS 变量,从而实现主题色的实时切换。关键不是监听 DOM 或样式本身,而是监听一个控制主题的响应式状态(比如 themeColor),并在副作用中调用 document.documentElement.style.setProperty 更新根元素的 CSS 变量。

定义可响应的主题状态

在 Vue 组件的 setup 中,先声明一个响应式变量来代表当前主题色:

用 watchEffect 同步更新 CSS 变量

watchEffect 回调里,根据 themeColor.value 查表或计算出具体 RGB 或 HEX 值,然后批量设置 CSS 变量:

绑定 UI 控件触发切换

给按钮、下拉菜单或颜色选择器绑定点击/变更事件,修改 themeColor 的值即可自动触发更新:

补充:避免重复设置与 SSR 兼容

在服务端渲染(如 Nuxt)中,document 对象不可用,需加判断;另外首次执行时无需重复设置已存在的变量:

不复杂但容易忽略的是:CSS 变量必须作用在能被子元素继承的节点上(通常设在 :roothtml),且组件内样式要使用 var(--primary-color) 才能生效。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。