我想加快黑暗模式在我的网站上生效。当我当前加载一个页面时,页面加载和暗模式生效之间存在延迟。下面是我的jQuery.js代码
onload = function () {
if (localStorage.getItem("darkMode") === "true") {
var mode = localStorage.getItem("darkMode");
enableDarkMode();
}
}
function enableDarkMode() {
$("body").addClass("dark");
$("nav").removeClass("navbar navbar-expand-md navbar-light");
$("nav").addClass("navbar navbar-expand-md navbar-dark");
$('.inner-switch').text("ON");
var mode = localStorage.setItem("darkMode", "true");
}
function disableDarkMode() {
$("body").removeClass("dark");
$("nav").removeClass("navbar navbar-expand-md navbar-dark");
$("nav").addClass("navbar navbar-expand-md navbar-light");
$('.inner-switch').text("OFF");
var mode = localStorage.setItem("darkMode", "false");
}
$('.inner-switch').on("click", function () {
if ($("body").hasClass("dark")) {
disableDarkMode();
} else {
enableDarkMode();
}
});发布于 2019-11-22 06:28:08
你可以使用像Smarty这样的模板引擎,甚至在显示网站之前检查是否有暗模式。然后,您可以分配一个smarty变量,并在网站的HTML中构建一个IF语句。
示例:
<body {if darkMode} dark {/if}>因此,它将加载从一开始就激活的暗模式。
发布于 2019-11-02 18:32:30
你需要知道:
localStorage.getItem();localStorage.setItem();都是从设备的硬盘驱动器读取和写入的同步进程。
这使得它们相对于你用javascript运行的大多数东西来说相当慢--你可以观察到这种效果,因为,由于是同步的,这些进程需要在javascript线程中的任何其他东西运行之前完成。
要采取的步骤:
1)至少,我会在开始时用onDOMContentLoaded替换onload。
2)此外,我还会考虑使用另一种(更快的)方法在页面之间持久化非webStorage的数据
2a) IndexedDB:存储页面间状态的最佳方法是indexedDB ,但是一个相当复杂的应用编程接口,一点也不容易理解。
2b) 曲奇:老派,但它们是有效的。然而,在这种情况下,可能是过度杀伤力。
2c) cookies查询字符串:一个客户端选项(比indexedDB更快、更容易,并且没有不必要的来回机制)可能是使用如下查询字符串:https://example.com/this-is/my-webpage/?mode=dark
在这种情况下,我可能会使用上面的第三个选项,URL Query String来代替webStorage。
未来
几年来,web开发人员社区一直在叫嚣着寻找一种解决页面间数据持久化的方案,这种方案不仅具有IndexedDB的所有技术优势,而且实现起来像localStorage一样简单。
谷歌已经提出了一个解决方案(Keyword-Value Storage,简称KV Storage),目前正处于实验阶段,在2020或2021年前不会在浏览器中正确建立(作为一个内置模块):
进一步阅读:
https://stackoverflow.com/questions/58667711
复制相似问题