当前位置:首页 > 技术分享 > 正文内容

Bootstrap动态切换主题(通用)

admin2年前 (2022-03-29)技术分享2214

bootstrap有个网站叫做bootswatch,其中已经设计了一些很美的主题:

要想使用也是很简单的,只需要下载其中的bootstrap.css或者bootstrap.min.css并覆盖到自己项目的对应文件就行了。如果你想动态切换的话,现在提供的思路是:

用JavaScript写一个函数响应页面上一个按钮的点击,这个函数主要是获取页面导入css的链接< link >标签,修改它的href值就行了。

当然如果你想让整个网站都应用上同一个动态修改后的主题,下文也用到了,主要是采用cookies记录的方式解决。


下面的代码来自Django,在HTML页面上的一些语法和大家常见的JavaEE不大相同,但本文涉及的内容只和JavaScript和Bootstrap有关,无需在意哈。但我要说一下我Django网站上各页面都有的一个特点,那就是每个HTML页面都继承于或被包含于一个基础页面,这样的话,便只需要修改基础页面的css或js就行了,相信JavaEE那边也是这样做的。


网页上涉及到的代码

<link rel="stylesheet" href="{% static 'bootstrap4.0.0/css/bootstrap.min.css' %}" id="default-theme">


切换时主要针对上面< link >标签的href和id进行修改,一个href对应一个id。本程序用到两个主题版本的css文件,其id和文件名的对应为:


id 同目录下的css文件名

default-themebootstrap.min.css
gray-themebootstrap_gray.min.css

这样就清晰明了了哈哈哈,下面是切换的按钮,触发changeTheme()方法:


<!--切换主题的按钮-->
<input id="change-theme-btn" type="button" class="btn btn-light" onclick="changeTheme()" value="切换主题"/>

涉及的JavaScript代码

具体说明请看注释:

// 按钮触发的切换主题方法
function changeTheme() {
    var link = document.getElementsByTagName("link")[0];
    //判断目前页面上的link的id是哪个,如果是默认主题的话,就传送新主题的id给change()函数,否则亦然
    if (link.id === "default-theme") {
        change("dark-theme");
    } else {
        change("default-theme");
    }
}
//真正的切换主题方法
function change(themeName){
    var link = document.getElementsByTagName("link")[0];
    if(themeName === "default-theme"){
        link.id = "default-theme";
        link.href = '/static/bootstrap4.0.0/css/bootstrap.min.css';
        
        //记录新的主题到cookies,这里一定要写上path=/,否则就不是修改cookies而是在不同页面创建cookies了
        document.cookie = "themeCookies=default-theme;path=/";
    }else if(themeName === "dark-theme"){
        link.id = "dark-theme";
        link.href = '/static/bootstrap4.0.0/css/bootstrap_gray.min.css';
        document.cookie = "themeCookies=dark-theme;path=/";
    }
}
// 获取cookie中当前主题的id,没有则返回默认的default-theme
function getThemeName() {
    var themeCookies = "themeCookies=";
    var allCookies = document.cookie.split(';');
    for(var i=0; i<allCookies.length; i++){
        var c = allCookies[i].trim();
        if(c.indexOf(themeCookies) === 0)
            return c.substring(themeCookies.length, c.length);
    }
    return "default-theme";
}
$(document).ready(function () {
    change(getThemeName());
});

扫描二维码推送至手机访问。

版权声明:本文由小刚刚技术博客发布,如需转载请注明出处。

本文链接:https://blog.bitefu.net/post/239.html

分享给朋友:

相关文章

mysql update不支持set子查询更新 的解决办法

mysql update不支持set子查询更新 的解决办法

先看示例:SELECT uin,account,password,create_user_uin_tree FROM sys_user结果:表中的create_user_uin_tree标识该条记录由谁创建。创...

超高性比的斐讯盒子T1,刷第三方YYF固件机教程超级详细版

超高性比的斐讯盒子T1,刷第三方YYF固件机教程超级详细版

家里面买了斐讯盒子T1,必不可少的就是刷机,刷机一直爽,一直刷机一直爽,这样的快乐一般人体会不到。原来斐讯盒子N1,T1,还有斐讯K2P路由器也变成了性价比超高的东东,而且众多大神也带来了超多可玩性非常高的固件和破解。楼主今天扒到了相关超高...

贾氏鸣天鼓健耳养肾操

贾氏鸣天鼓健耳养肾操

《贾氏鸣天鼓健耳养肾操》鸣天鼓是健耳强肾治耳病的古法,贾氏越云自创的鸣天鼓健耳养肾操是在古法的基础上创建。顺序:1静坐挺胸。2双手放心脏位置的胸口,左手掌盖住右手掌。3闭目静心,深呼吸19下。4双手相互搓揉,让手掌发热。5用发热的双手手掌严...

遭遇国外ip抓取或攻击怎么办一招解决禁止海外IP访问

遭遇国外ip抓取或攻击怎么办一招解决禁止海外IP访问

究发现很多网站被攻击都是来自海外的肉鸡,所以禁掉海外IP访问网站也是不错的防护手段,而且国内网站几乎很少有国外用户访问,称之为大局域网也不为过。今天主机吧来教大家如何利用域名解析禁止掉海外IP访问网站。绝大多数域名解析服务商都是提供电信联通...

Nginx服务崩溃自动重启脚本(监控进程服务并自动重启进程服务)脚本

有一台服务器运行着Ngin最近突然有一次崩溃,导致使用方当天无法访问网页端,然后我不得不登录服务器,检查各项服务,发现nginx崩溃了,于是重启Nginx,问题解决。后来为了防止Nginx再发生这种情况给运维带来的运维成本,于是写了一个脚本...

python调用WinRAR暴力获取压缩密码 用网址做解压密码

原理很简单:python通过调用WinRAR.exe暴力获取压缩密码,要求必须安装WinRAR或者有WinRAR.exe这个文件(单个文件就行)。个人实测zip和rar格式都能用。缺点:费时间,费cpu一、不生成密码本:4位全数字密码:im...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。