我在Tauri web應用程序的黑暗模式下切換標簽時,隨機遇到了閃爍問題。這種閃爍可能是由瀏覽器阻塞或操作系統處理標簽切換引起的。我懷疑負責在黑暗和光明模式之間切換的JavaScript代碼可能導致了這個問題。其次,在這個奇怪的錯誤期間,側邊欄意外地關閉并再次打開。
以下是相關Javascript的概述:
const body = document.querySelector('body');
const sidebar = body.querySelector('nav');
const toggle = body.querySelector('.toggle');
const modeSwitch = body.querySelector('.toggle-switch');
const modeText = body.querySelector('.mode-text');
// Check if dark mode preference is stored in localStorage
const isDarkMode = localStorage.getItem('darkMode') === 'true';
// Check if sidebar preference is stored in localStorage
const isSidebarClosed = localStorage.getItem('sidebarClosed') === 'true';
// Set initial state based on stored preferences
if (isDarkMode) {
body.classList.add('dark');
modeText.innerText = 'Light mode';
} else {
body.classList.remove('dark');
modeText.innerText = 'Dark mode';
}
if (isSidebarClosed) {
sidebar.classList.add('close');
} else {
sidebar.classList.remove('close');
}
toggle.addEventListener('click', () => {
sidebar.classList.toggle('close');
// Store sidebar state in localStorage
const isClosed = sidebar.classList.contains('close');
localStorage.setItem('sidebarClosed', isClosed);
});
modeSwitch.addEventListener('click', () => {
body.classList.toggle('dark');
// Store dark mode state in localStorage
const isDark = body.classList.contains('dark');
localStorage.setItem('darkMode', isDark);
if (isDark) {
modeText.innerText = 'Light mode';
} else {
modeText.innerText = 'Dark mode';
}
});
// Add the 'dark' class to the body element if dark mode preference is stored
if (isDarkMode) {
body.classList.add('dark');
}
我想知道是否有辦法修改JavaScript代碼或對CSS進行必要的調整,以減輕閃爍問題,并確保側邊欄保持當前狀態,而不關閉和重新打開。我想確保在黑暗模式下標簽之間的平滑過渡。任何見解或建議將不勝感激,如果你需要任何額外的信息或進一步澄清,請不要猶豫地問。謝謝大家!
如果menu中的Dashboard鏈接確實重新加載了頁面,那么您的問題是,在初始(重新)加載頁面時,您默認加載的是Light主題,然后JS執行并應用了Dark主題...這就是你看到閃光的原因
您可以通過在初始頁面加載時加載適當的/dark主題來解決這個問題,這意味著將theme=dark保存在cookie或會話中,并根據其值從后端進行初始加載,而不是通過JS在前端應用它。