解决页面加载时 JavaScript 主题切换代码不生效的问题

解决页面加载时 javascript 主题切换代码不生效的问题

本文旨在解决 WordPress 网站中 JavaScript 编写的主题切换功能在页面加载时未激活的问题。通过修改 JavaScript 代码,在页面加载时立即执行主题初始化函数,确保主题样式在初始状态下正确应用,从而避免页面加载后需要手动点击才能激活主题的困扰。

在开发具有主题切换功能的网站时,经常会遇到一个问题:JavaScript 代码在页面加载完成后才能生效,导致初始加载时主题样式不正确。以下提供一种解决方案,确保主题在页面加载时立即生效。

问题分析

问题的原因在于,原本的代码逻辑依赖于用户的点击事件来触发主题样式的应用。在页面首次加载时,没有任何点击事件发生,因此主题样式没有被初始化。

解决方案:初始化函数与立即执行

解决问题的关键在于创建一个初始化函数,并在页面加载时立即执行该函数。这样,无论用户是否点击,主题样式都会在页面加载时被正确应用。

立即学习“Java免费学习笔记(深入)”;

1. 创建初始化函数

将原先点击事件中的主题切换逻辑封装到一个名为 initTheme() 的函数中。该函数负责根据用户系统偏好设置(深色模式或浅色模式)来应用相应的主题样式。

function initTheme(){    const UserMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;    let bodyMode = document.querySelector("#pageMode");    if (UserMode) {        $(bodyMode).addClass("bodyDark");        $(bodyMode).removeClass("bodyLight bodyHalfLit");    } else {        $(bodyMode).removeClass("bodyLight bodyDark bodyHalfLit");    }}

2. 修改点击事件监听器

修改点击事件监听器,使其在点击时调用 initTheme() 函数。

let SystemMode = document.querySelector(".pageSystemMode");SystemMode.addEventListener("click", function () {   initTheme();});

3. 立即执行初始化函数

在代码的末尾,立即执行 initTheme() 函数。这将确保在页面加载完成后,主题样式立即被初始化。

initTheme();

完整代码示例:

let bodyMode = document.querySelector("#pageMode");let SystemMode = document.querySelector(".pageSystemMode");let DarkMode = document.querySelector(".pageDarkMode");let LightMode = document.querySelector(".pageLightMode");let HalfLitMode = document.querySelector(".pageHalfLitMode");function initTheme(){    const UserMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;    if (UserMode) {        $(bodyMode).addClass("bodyDark");        $(bodyMode).removeClass("bodyLight bodyHalfLit");    } else {        $(bodyMode).removeClass("bodyLight bodyDark bodyHalfLit");    }}SystemMode.addEventListener("click", function () {   initTheme();});DarkMode.addEventListener("click", function () {    $(bodyMode).addClass("bodyDark");    $(bodyMode).removeClass("bodyHalfLit");});HalfLitMode.addEventListener("click", function () {    $(bodyMode).addClass("bodyHalfLit");    $(bodyMode).removeClass("bodyDark");});LightMode.addEventListener("click", function () {    $(bodyMode).addClass("bodyLight");    $(bodyMode).removeClass("bodyDark bodyHalfLit");});initTheme();

注意事项

确保 jQuery 库已正确加载,因为代码中使用了 jQuery 的 addClass() 和 removeClass() 方法。#pageMode 元素必须存在于 HTML 中,并且 CSS 样式已正确定义,以确保主题样式能够正确应用。如果主题切换逻辑涉及更复杂的操作,例如存储用户偏好设置到 Cookie 或 Local Storage 中,则需要在 initTheme() 函数中进行相应的处理。如果网站使用了缓存机制,请确保 JavaScript 文件不会被缓存,否则修改后的代码可能不会立即生效。

总结

通过将主题切换逻辑封装到初始化函数中,并在页面加载时立即执行该函数,可以有效地解决 JavaScript 主题切换代码在页面加载时未生效的问题。这种方法简单易懂,并且可以适用于各种不同的主题切换场景。在实际开发中,可以根据具体需求对代码进行适当的调整和优化。

以上就是解决页面加载时 JavaScript 主题切换代码不生效的问题的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1526929.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何通过性能剖析工具识别并优化JavaScript中的性能瓶颈?
上一篇 2025年12月20日 18:58:05
代理 Function.prototype 的正确方法与注意事项
下一篇 2025年12月20日 18:58:20

相关推荐

  • 如何在Java方法中正确传递和使用数组参数

    如何在Java方法中正确传递和使用数组参数如何在Java方法中正确传递和使用数组参数如何在Java方法中正确传递和使用数组参数如何在Java方法中正确传递和使用数组参数

    本文旨在帮助Java初学者理解如何在方法中正确传递和使用数组作为参数。通过一个实际的代码示例,详细讲解了如何创建、传递和访问数组,以及如何在方法内部对数组进行操作,最终返回期望的结果。掌握这些技巧对于编写高效且功能完善的Java程序至关重要。 在Java编程中,方法经常需要接收数组作为参数,以便对一…

    2026年9月26日 • 用户投稿
    300
  • sublime怎么写latex并编译成pdf_Sublime配置LaTeX编译环境指南

    sublime怎么写latex并编译成pdf_Sublime配置LaTeX编译环境指南sublime怎么写latex并编译成pdf_Sublime配置LaTeX编译环境指南sublime怎么写latex并编译成pdf_Sublime配置LaTeX编译环境指南sublime怎么写latex并编译成pdf_Sublime配置LaTeX编译环境指南

    首先安装LaTeX发行版,如Windows选TeX Live,macOS用MacTeX,Linux通过包管理器安装;然后在Sublime Text中通过Package Control安装LaTeXTools插件;接着配置LaTeXTools的用户设置,指定tex_path路径、构建方式和PDF查看器…

    2026年9月26日 • 用户投稿
    000
  • 360极速浏览器账号如何登录和退出_360极速浏览器用户账号登录与注销操作

    360极速浏览器账号如何登录和退出_360极速浏览器用户账号登录与注销操作360极速浏览器账号如何登录和退出_360极速浏览器用户账号登录与注销操作360极速浏览器账号如何登录和退出_360极速浏览器用户账号登录与注销操作360极速浏览器账号如何登录和退出_360极速浏览器用户账号登录与注销操作

    登录360极速浏览器需通过左上角头像或右上角菜单进入登录界面,输入账号密码或使用手机号快捷验证完成登录;如需切换账户或保护隐私,可点击头像后选择退出登录,或通过设置菜单清除Cookie等方式彻底注销并重启浏览器。 如果您在使用360极速浏览器时需要同步收藏夹、设置或使用云服务,则必须先登录您的360…

    2026年9月26日 • 用户投稿
    100
  • sublime怎么查看历史剪贴板内容_sublime历史剪贴板查看方法

    sublime怎么查看历史剪贴板内容_sublime历史剪贴板查看方法sublime怎么查看历史剪贴板内容_sublime历史剪贴板查看方法sublime怎么查看历史剪贴板内容_sublime历史剪贴板查看方法sublime怎么查看历史剪贴板内容_sublime历史剪贴板查看方法

    安装Clipboard History插件可为Sublime Text添加剪贴板历史功能:通过命令面板搜索并安装该插件后,使用Ctrl+Shift+V(Windows/Linux)或Cmd+Shift+V(Mac)即可调出文本剪贴板历史记录,选择所需内容粘贴,提升编辑效率。 Sublime Text…

    2026年9月26日 • 用户投稿
    100
  • LINUX连接不上WiFi怎么办_LINUX系统WiFi连接失败排查指南

    LINUX连接不上WiFi怎么办_LINUX系统WiFi连接失败排查指南LINUX连接不上WiFi怎么办_LINUX系统WiFi连接失败排查指南LINUX连接不上WiFi怎么办_LINUX系统WiFi连接失败排查指南LINUX连接不上WiFi怎么办_LINUX系统WiFi连接失败排查指南

    首先检查无线网卡是否被系统识别,通过lspci或lsusb命令确认硬件存在;若识别正常但无法连接,需安装对应驱动如firmware-iwlwifi或rtl88x2bu-dkms;确保NetworkManager服务已启动并启用;使用nmcli命令扫描并连接WiFi网络;若仍失败,可手动编辑Netpl…

    2026年9月26日 • 用户投稿
    400
  • sublime怎么快速打开最近的项目_sublime访问历史项目的快捷方法

    sublime怎么快速打开最近的项目_sublime访问历史项目的快捷方法sublime怎么快速打开最近的项目_sublime访问历史项目的快捷方法sublime怎么快速打开最近的项目_sublime访问历史项目的快捷方法sublime怎么快速打开最近的项目_sublime访问历史项目的快捷方法

    Sublime Text 通过命令面板访问最近项目,按 Ctrl+Shift+P 输入“project”选择“Project: Switch Project”即可打开历史项目,结合保存项目文件可高效管理多工作区。 Sublime Text 没有直接打开“最近项目”的独立快捷键,但可以通过命令面板快速…

    2026年9月26日 • 用户投稿
    000
  • Java 方法中数组参数的正确调用方式

    Java 方法中数组参数的正确调用方式Java 方法中数组参数的正确调用方式Java 方法中数组参数的正确调用方式Java 方法中数组参数的正确调用方式

    本文旨在阐述如何在 Java 方法中正确传递和使用数组参数。通过一个实际的例子,我们将详细讲解如何创建数组、将其作为参数传递给方法,以及如何在方法内部访问和操作数组元素。掌握这些技巧对于编写高效且易于维护的 Java 代码至关重要。 在 Java 编程中,方法经常需要接收数组作为参数,以便对一组数据…

    2026年9月26日 • 用户投稿
    000
  • 安装 Windows 10 时,提示 “计算机的磁盘空间不足”,如何清理?

    安装 Windows 10 时,提示 “计算机的磁盘空间不足”,如何清理?安装 Windows 10 时,提示 “计算机的磁盘空间不足”,如何清理?安装 Windows 10 时,提示 “计算机的磁盘空间不足”,如何清理?安装 Windows 10 时,提示 “计算机的磁盘空间不足”,如何清理?

    首先需明确是全新安装还是升级安装,通常全新安装更易解决空间不足问题。在Windows 10安装界面按Shift+F10打开命令提示符,输入diskpart进入分区工具,执行list disk查看磁盘,select disk X选择目标磁盘(X为磁盘编号),再通过list partition查看分区情…

    2026年9月26日 • 用户投稿
    100
  • win8桌面图标不见了_Win8桌面图标恢复

    win8桌面图标不见了_Win8桌面图标恢复win8桌面图标不见了_Win8桌面图标恢复win8桌面图标不见了_Win8桌面图标恢复win8桌面图标不见了_Win8桌面图标恢复

    首先检查桌面图标显示设置,右键桌面选择“查看”并勾选“显示桌面图标”;若无效,通过任务管理器重启Windows资源管理器进程;如仍无改善,可删除%localappdata%目录下的IconCache.db文件以重建图标缓存;最后使用系统自带的桌面疑难解答工具进行自动修复。 如果您发现Windows …

    2026年9月26日 • 用户投稿
    000
  • 从Scanner读取单个字符时处理空格的问题

    从Scanner读取单个字符时处理空格的问题从Scanner读取单个字符时处理空格的问题从Scanner读取单个字符时处理空格的问题从Scanner读取单个字符时处理空格的问题

    本文旨在解决Java中使用Scanner读取用户输入时,由于Scanner默认以空格作为分隔符,导致读取单个字符时出现的问题。我们将深入探讨Scanner的工作原理,并提供使用Scanner.nextLine()方法读取整行输入来解决此问题的方案,确保程序能够正确处理包含空格的输入。 在使用Java…

    2026年9月26日 • 用户投稿
    100
  • windows怎么关闭快速启动_快速启动功能关闭教程

    windows怎么关闭快速启动_快速启动功能关闭教程windows怎么关闭快速启动_快速启动功能关闭教程windows怎么关闭快速启动_快速启动功能关闭教程windows怎么关闭快速启动_快速启动功能关闭教程

    关闭快速启动可解决Windows启停慢或硬件兼容问题,需通过控制面板、电源高级设置或命令提示符操作。2. 控制面板路径:运行control→硬件和声音→电源选项→选择电源按钮功能→更改不可用设置→取消勾选启用快速启动→保存。3. 高级设置路径:电源选项→更改计划设置→更改高级电源设置→展开电源按钮和…

    2026年9月26日 • 用户投稿
    200
  • x浏览器如何拦截弹窗广告_x浏览器弹窗广告拦截教程

    x浏览器如何拦截弹窗广告_x浏览器弹窗广告拦截教程x浏览器如何拦截弹窗广告_x浏览器弹窗广告拦截教程x浏览器如何拦截弹窗广告_x浏览器弹窗广告拦截教程x浏览器如何拦截弹窗广告_x浏览器弹窗广告拦截教程

    开启x浏览器广告拦截功能可有效屏蔽弹窗广告。首先在设置中启用“广告过滤”并选择强力模式;其次通过自定义规则添加已知广告域名进行精准拦截;接着在隐私与安全设置中开启“阻止弹出窗口”开关,阻断脚本触发的弹窗;最后可使用轻阅读模式简化网页结构,避免广告加载,提升浏览体验。 如果您在浏览网页时频繁遇到弹窗广…

    2026年9月26日 • 用户投稿
    300
  • MAC连接的移动硬盘速度很慢_Mac外置硬盘读写速度慢问题排查

    MAC连接的移动硬盘速度很慢_Mac外置硬盘读写速度慢问题排查MAC连接的移动硬盘速度很慢_Mac外置硬盘读写速度慢问题排查MAC连接的移动硬盘速度很慢_Mac外置硬盘读写速度慢问题排查MAC连接的移动硬盘速度很慢_Mac外置硬盘读写速度慢问题排查

    答案:Mac连接移动硬盘速度慢可能因存储不足、接口问题或硬盘故障等导致。应清理硬盘空间至10%-15%以上,更换为USB 3.0及以上数据线并直连主机端口,使用“磁盘工具”检查健康状况并修复错误,通过“活动监视器”终止高占用进程,并确保硬盘采用APFS或exFAT等合适文件系统以提升性能。 如果您在…

    2026年9月26日 • 用户投稿
    300
  • NVMe驱动器的SLC缓存用完后性能下降多少?

    NVMe驱动器的SLC缓存用完后性能下降多少?NVMe驱动器的SLC缓存用完后性能下降多少?NVMe驱动器的SLC缓存用完后性能下降多少?NVMe驱动器的SLC缓存用完后性能下降多少?

    NVMe驱动器在SLC缓存耗尽后写入速度会骤降至数十到两百MB/s,具体取决于NAND类型、容量和主控方案,QLC型号甚至可能低于机械硬盘速度。 NVMe驱动器在SLC缓存耗尽后,性能会经历显著的下降,通常写入速度会从数百甚至数千MB/s骤降至数十到两百MB/s的水平,具体取决于驱动器采用的NAND…

    2026年9月26日 • 用户投稿
    100
  • 什么是线程池?为什么使用线程池?ThreadPoolExecutor有哪些核心参数?

    什么是线程池?为什么使用线程池?ThreadPoolExecutor有哪些核心参数?什么是线程池?为什么使用线程池?ThreadPoolExecutor有哪些核心参数?什么是线程池?为什么使用线程池?ThreadPoolExecutor有哪些核心参数?什么是线程池?为什么使用线程池?ThreadPoolExecutor有哪些核心参数?

    线程池通过复用预先创建的线程,避免频繁创建销毁带来的开销,提升系统性能与稳定性。ThreadPoolExecutor是Java中实现线程池的核心类,其核心参数包括corePoolSize(核心线程数)、maximumPoolSize(最大线程数)、keepAliveTime(非核心线程空闲存活时间)…

    2026年9月26日 • 用户投稿
    100
  • win8怎么映射网络驱动器_Win8网络驱动器映射方法

    win8怎么映射网络驱动器_Win8网络驱动器映射方法win8怎么映射网络驱动器_Win8网络驱动器映射方法win8怎么映射网络驱动器_Win8网络驱动器映射方法win8怎么映射网络驱动器_Win8网络驱动器映射方法

    首先通过计算机界面或运行命令映射网络驱动器,选择驱动器号并输入UNC路径,可勾选登录时重新连接;其次确保网络发现、文件共享及相关服务(Server、Workstation、TCP/IP NetBIOS Helper)已启用,以保证共享访问正常。 如果您需要在Windows 8系统中访问局域网中的共享…

    2026年9月26日 • 用户投稿
    200
  • sublime怎么使用多光标编辑_sublime多光标操作技巧详解

    sublime怎么使用多光标编辑_sublime多光标操作技巧详解sublime怎么使用多光标编辑_sublime多光标操作技巧详解sublime怎么使用多光标编辑_sublime多光标操作技巧详解sublime怎么使用多光标编辑_sublime多光标操作技巧详解

    掌握Sublime Text多光标编辑可大幅提升效率:1. 按Ctrl/Cmd点击或多行列选添加多个光标;2. 用Ctrl+D逐个选中相同词批量修改;3. Ctrl+Shift+Alt+G全选所有匹配项全局替换;4. Alt+Shift拖动进行列选择,实现块状编辑,适合对齐或加前缀后缀。 Subli…

    2026年9月26日 • 用户投稿
    100
  • windows无法识别usb设备怎么办_usb设备无法识别修复指南

    windows无法识别usb设备怎么办_usb设备无法识别修复指南windows无法识别usb设备怎么办_usb设备无法识别修复指南windows无法识别usb设备怎么办_usb设备无法识别修复指南windows无法识别usb设备怎么办_usb设备无法识别修复指南

    首先检查物理连接并更换接口,确认设备本身正常;接着卸载并重装USB驱动,禁用USB选择性暂停设置;然后更新主板芯片组驱动,最后检查BIOS中USB控制器是否启用,逐步排除故障。 如果您将U盘、移动硬盘或其他USB设备插入电脑后,系统没有反应或提示“无法识别的设备”,这可能是由连接问题、驱动故障或电源…

    2026年9月26日 • 用户投稿
    100
  • 使用构造器注入替代 @Autowired 注解

    使用构造器注入替代 @Autowired 注解使用构造器注入替代 @Autowired 注解使用构造器注入替代 @Autowired 注解使用构造器注入替代 @Autowired 注解

    本文旨在讲解如何使用构造器注入来替代 Spring 框架中的 @Autowired 注解,从而实现更简洁、更易于测试的代码。我们将通过一个实际案例,展示如何利用 Lombok 提供的 @AllArgsConstructor 注解简化构造器注入的过程,并解决可能遇到的问题,最终避免手动创建 Bean。…

    2026年9月26日 • 用户投稿
    100
  • 一键PHP环境怎么安装SSH服务_SSH远程连接配置方法

    答案:一键PHP环境不默认开启SSH服务,需手动安装并配置。首先检查系统是否已安装OpenSSH,若未安装则根据系统类型(Ubuntu/Debian或CentOS/RHEL)进行安装,并启用SSH服务。随后修改/etc/ssh/sshd_config文件,调整Port、PermitRootLogin…

    2026年9月26日
    200

发表回复

登录后才能评论
关注微信