-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcolor theme switcher JS code
46 lines (39 loc) · 2.45 KB
/
color theme switcher JS code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<!--
On my website, on Webflow, I use CSS variables for colors.
I've added a dark mode/light mode switcher and added this script on Webflow that allows to switch between dark mode and light mode by switching between different tables of colors for each CSS variable.
I also use a browser's Local storage to remember the current mode state (dark or light) so that the selected mode is saved and remains consistent when users revisit the website.
-->
<script>
function setDarkTheme(elem){
let currentTheme=localStorage.getItem('curTheme');
if(currentTheme==1){
elem.classList.add('switched-on');
else{
elem.classList.remove('switched-on');
}
document.documentElement.style.setProperty('--neutral--50',colorSchemes[currentTheme].n50);
document.documentElement.style.setProperty('--neutral--100',colorSchemes[currentTheme].n100);
document.documentElement.style.setProperty('--neutral--200',colorSchemes[currentTheme].n200);
document.documentElement.style.setProperty('--neutral--300',colorSchemes[currentTheme].n300);
document.documentElement.style.setProperty('--neutral--400',colorSchemes[currentTheme].n400);
document.documentElement.style.setProperty('--neutral--500',colorSchemes[currentTheme].n500);
document.documentElement.style.setProperty('--neutral--600',colorSchemes[currentTheme].n600);
document.documentElement.style.setProperty('--neutral--700',colorSchemes[currentTheme].n700);
document.documentElement.style.setProperty('--neutral--800',colorSchemes[currentTheme].n800);
document.documentElement.style.setProperty('--neutral--900',colorSchemes[currentTheme].n900);
document.documentElement.style.setProperty('--white',colorSchemes[currentTheme].nwhite);
document.documentElement.style.setProperty('--black',colorSchemes[currentTheme].nblack);
}
function switchColorTheme(elem){
localStorage.setItem('curTheme',localStorage.getItem('curTheme')==1?0:1);
setDarkTheme(elem);
}
const colorSchemes=[{n50:'#f9fafb',n100:'#f3f4f6',n200:'#e5e7eb',n300:'#d1d5db',n400:'#9ca3af',n500:'#6b7280',n600:'#4b5563',n700:'#374151',n800:'#1f2937',n900:'#111827',nwhite:'white',nblack:'black'},
{n50:'#111827',n100:'#1f2937',n200:'#374151',n300:'#4b5563',n400:'#6b7280',n500:'#9ca3af',n600:'#d1d5db',n700:'#e5e7eb',n800:'#f3f4f6',n900:'#f9fafb',nwhite:'black',nblack:'white'}];
document.addEventListener("DOMContentLoaded",function(){
document.querySelectorAll('.switch-to-dark')
.forEach(tag=>
{tag.onclick=()=>switchColorTheme(tag);setDarkTheme(tag);
});
});
</script>