top of page

Меняем тему сайта со светлой на темную

  • Фото автора: Julia Sememova
    Julia Sememova
  • 9 февр. 2022 г.
  • 2 мин. чтения

Изменение режима сайта с помощью кнопки-тумблера. Добавьте стильное оформление с помощью кода wix.

изменение темы сайта на wix




Описание функционала

В этом примере посетители сайта могут переключать цветовую схему сайта. Изменение этого параметра позволяет снизить нагрузку на глаза в темное время суток.



Пример кода

Главная

// Core code is in the 'Site' Tab.

// Open the template and navigate in the code panel

// at the bottom of the editor

Код Сайта

import { local } from 'wix-storage';


const pageElements = { //Will hold all the elements in the page as arrays

textElements: [],

boxContainers: [],

buttons: []

}


let darkMode = { //Define the color scheme of the dark mode

textElementFontColor: "white",

boxContainersBackgroundColor: "#323232",

buttonsColor: "white"

}


let defaultScheme = { //Will hold the default color scheme without the need to set it manually

defaultTextElementsHtml: [],

boxContainersBackgroundColor: [],

buttonsColor: []

}


$w.onReady(function () {

saveDefaultColorScheme(); //Save default color scheme

checkDarkMode(); //Check local whether dark mode is enabled

addEventListenerToDarkmodeSwitch() //Add the onChange event to the darkmode switch

});


function saveDefaultColorScheme() {

pageElements.textElements = $w("Text");

pageElements.boxContainers = $w("Box");

pageElements.buttons = $w("Button");


pageElements.textElements.forEach(textElement => {

defaultScheme.defaultTextElementsHtml.push(textElement.html);

});

pageElements.boxContainers.forEach(boxContainer => {

defaultScheme.boxContainersBackgroundColor.push(boxContainer.style.backgroundColor);

});

pageElements.buttons.forEach(button => {

defaultScheme.buttonsColor.push(button.style.color)

});

}


function checkDarkMode() {

darkMode.enabled = JSON.parse(local.getItem('darkmodeEnabled'));

if (darkMode.enabled === true) {

switchToDarkMode();

$w("#darkModeSwitch").checked = true;

} else {

switchToDefault();

$w("#darkModeSwitch").checked = false;

}

}


function addEventListenerToDarkmodeSwitch() {

$w("#darkModeSwitch").onChange((event) => {

if (darkMode.enabled) {

switchToDefault();

} else {

switchToDarkMode();

}

})

}


function switchToDarkMode() {

darkMode.enabled = true;

local.setItem('darkmodeEnabled', true);

$w("#swithTooltip").text = "Click to disable dark mode";

const htmlTagCleanerRegex = /<[^>]*>?/gm; //Regular expression to clean the html tags from the text element.

pageElements.textElements.forEach(textElement => {

let text = textElement.html.replace(htmlTagCleanerRegex, '')

$w(`#${textElement.id}`).html = textElement.html.replace(text, `<span style=color:${darkMode.textElementFontColor}>${text}</span>`)

});

pageElements.boxContainers.forEach(boxElement => {

$w(`#${boxElement.id}`).style.backgroundColor = darkMode.boxContainersBackgroundColor

});

pageElements.buttons.forEach(buttonElement => {

$w(`#${buttonElement.id}`).style.color = darkMode.buttonsColor;

});

}


function switchToDefault() {

darkMode.enabled = false;

local.setItem('darkmodeEnabled', false);

$w("#swithTooltip").text = "Click to enable dark mode";

pageElements.textElements.forEach((textElement, index) => {

$w(`#${textElement.id}`).html = textElement.html.replace(textElement.html, defaultScheme.defaultTextElementsHtml[index])

});

pageElements.boxContainers.forEach((boxElement, index) => {

$w(`#${boxElement.id}`).style.backgroundColor = defaultScheme.boxContainersBackgroundColor[index];

});

pageElements.buttons.forEach((buttonElement, index) => {

$w(`#${buttonElement.id}`).style.color = defaultScheme.buttonsColor[index];

});

}

Как создать аналогичный функционал


Элементы страницы​

На каждую страницу нашего сайта мы добавили следующие элементы:

  • Переключатель: для смены режима. Убедитесь, что идентификатор переключателя один и тот же на каждой странице.

  • Блок-контейнер: Содержит все элементы на странице. Box.style.backgroundColor изменяется при включении темного режима.

  • Пользовательское меню: (Только на главной странице) Построено из нескольких кнопок с прозрачным фоном. Button.style.color (цвет текста) изменяется при включении темного режима.

  • Текстовые элементы: несколько текстовых элементов для заголовка, описания, нижнего колонтитула и т. д. Text.html меняет цвет при включении темного режима.

Меняем тему сайта со светлой на темную на викс

Код​

1. Затем мы добавили код на вкладку сайта, чтобы он срабатывал для каждой страницы сайта: Импорт функционала для работы с локальным хранилищем. Локальное хранилище позволяет нам «запоминать» выбор режима посетителем при переходе на другую страницу и между сеансами просмотра.

2. Определите глобальные объекты для хранения элементов страницы, определенных по типу, цветовым стилям темного режима и цветовым стилям по умолчанию. Стили по умолчанию извлекаются из элементов страницы при загрузке.

3. Когда страница загрузится, сделайте следующее:

  • Выберите текст, поля и кнопки по типу и сохраните их стили по умолчанию.

  • Проверьте локальное хранилище, чтобы узнать, был ли включен темный режим в последнем сеансе браузера. Если это так, включите темный режим и включите переключатель. Если нет, включите режим по умолчанию и выключите переключатель.

  • Используйте обработчик события onChange для переключения из текущего режима в другой режим в любое время при переключении переключателя.

4. Функция перехода в режим по умолчанию:

  • Обратите внимание, что мы используем литералы шаблонов для обработки переменных и выражений в строках.

  • Отметьте темный режим как отключенный как в нашей глобальной переменной, так и в локальном хранилище.

  • Для каждого текстового элемента, поля и кнопки замените текущий стиль стилями режима по умолчанию.

5. Функция перехода в темный режим:

  • Отметьте темный режим как включенный как в нашей глобальной переменной, так и в локальном хранилище.

  • Для текстовых элементов мы используем средство очистки регулярных выражений, которое поможет нам вставить новый HTML-тег для темного цвета текста. Очиститель регулярных выражений извлекает обычный текст из тегов HTML. В свойстве Text.html мы заменяем обычный текст обычным текстом + HTML-тегом темного режима.

  • Для каждого поля и кнопки замените текущий стиль стилем темного режима.

1 комментарий


ГОЛДЕН Mobile
ГОЛДЕН Mobile
16 июн. 2024 г.

Добрый день! Почему темная тема только срабатывает в боксах?

Лайк
bottom of page