#javascript #html #css #vue.js
#javascript #HTML #css #vue.js
Вопрос:
У меня есть приложение VueJS. Он реализует функциональность нескольких тем. Для этого я использую что-то вроде этого:
let theme = getTheme() // returns 'light' | dark
document.documentElement.setAttribute('data-theme', theme)
И цветовые стили для темы по умолчанию (светлая) и для темной темы
:root {
--primary-color: #6B59CC;
--primary-color-rgb: #{hexToRGB(#6B59CC)};
--secondary-green-color: #009a76;
--secondary-green-color-rgb: #{hexToRGB(#009a76)};
--secondary-orange-color: #F6933E;
--secondary-orange-color-rgb: #{hexToRGB(#F6933E)};
...
}
[data-theme="dark"] {
--primary-color: #6B59CC;
--primary-color-rgb: #{hexToRGB(#6B59CC)};
--secondary-green-color: #009a76;
--secondary-green-color-rgb: #{hexToRGB(#009a76)};
--secondary-orange-color: #F6933E;
--secondary-orange-color-rgb: #{hexToRGB(#F6933E)};
...
}
ПРИМЕЧАНИЕ: пожалуйста, не обращайте внимания на то, что стили одинаковы как для светлой, так и для темной темы. Это просто пример.
Мне нужно использовать разные цвета значков для каждой темы. Например: базовый цвет значка светлой темы — это #a8a8a8
, а для базового цвета значка темной темы — это #cfcfcf
.
Как динамично изменить цвет значка? Или есть несколько способов реализовать это в мире?
PS Я использую SVG
значки с object
тегом. Вот так:
<object :data="require('./assets/home.svg')" />
Комментарии:
1. Как пользователь может изменить тему? нажав кнопку или что-то в этом роде?
2. да, нажатием кнопки. затем тема данных будет изменена.
3. сработал ли ответ?
Ответ №1:
Как насчет определения переменной в data
; что-то вроде lightTheme
и проверьте это, чтобы изменить тему:
data() {
return {
lightTheme: false
}
},
methods: {
changeTheme() {
this.lightTheme = !lightTheme
let icon = document.getElementById("id")
if(this.lightTheme) {
icon.classList.add('light-theme-style')
icon.classList.remove('dark-theme-style')
} else {
icon.classList.add('dark-theme-style')
icon.classList.remove('light-theme-style')
}
}
}
Вам также необходимо привязать свой элемент к changeTheme
, если вы хотите, вы можете поделиться своим шаблонным кодом, и я добавлю его в ответ.