js实现换肤效果

一,js换肤的基本原理

基本原理很简单,就是使用 JS 切换对应的 CSS 样式表文件。例如导航网站 Hao123 的右上方就有网页换肤功能。除了切换 CSS 样式表文件之外,通常的网页换肤还需要通过 Cookie 来记录用户之前更换过的皮肤,这样下次用户访问的时候,就可以自动使用上次用户配置的选项。 那么基本工作流程就出来了:访问网页——JS 读取 Cookie ——如果没有,使用默认皮肤——如果有,使用指定皮肤;用户点击换肤选项——JS 控制替换对应的 CSS 样式表——将皮肤选项写进 Cookie 保存。

二,事先需要的准备工作

1,不同的皮肤对应不同的css文件,准备好多套css样式文件:

如蓝色对应:skinColour_blue.css

黄色对应:skinColour_yellow.css

2,图片存放在不同的皮肤文件夹下:

例如,蓝色对应:blue文件夹;黄色对应:yellow文件夹。

将不同皮肤颜色的图片放在相对应的文件夹里,图片切换原理:在换肤函数里设置img标签的src路径属性来切换图片。

三,换肤实现的过程

1,在网页开头引入css文件

<link href="Content/aps/skinNone.css" rel="stylesheet" type="text/css" id="skinColour" />

2,在页面上定义2个皮肤切换按钮

<span class="skin-btn-blue" onclick="changeSyle(‘blue‘);" >蓝色</span>
<span class="skin-btn-yellow" onclick="changeSyle(‘yellow‘);" >黄色</span>

3,在js的代码,通过函数触发切换<link>标签的css路径,和图片的路径,来实现换肤

//把引入皮肤css路径<link>标签选出来
var cssStyle = document.getElementById(‘skinColour‘);

//换肤函数
function changeSyle(name) {
event.stopPropagation();
cssStyle.href = "Content/aps/skinColour_" + name + ".css";
//保存肤色名
setStorage("skinName", name);

//切换图片的路径
$(‘.home-bReturn‘).attr(‘src‘, ‘img/‘ + name + ‘/home_yzl_8.png‘);
$(‘.home-bHome‘).attr(‘src‘, ‘img/‘ + name + ‘/home_yzl_7.png‘);

}

//html5设置本地存储
function setStorage(sname, vul) {
window.localStorage.setItem(sname, vul);
}
function getStorage(attr) {
var str = window.localStorage.getItem(attr);
return str;
}//访问本地存储,获取皮肤名
var cssName = getStorage("skinName");
//判断是否有皮肤名,就使用获取的皮肤名,没有就用默认的
if (cssName && cssName != null) {
cssStyle.href = "Content/aps/skinColour_" + cssName + ".css";
//设置图片路径
$(‘.home-bReturn‘).attr(‘src‘, ‘img/‘ + cssName + ‘/home_yzl_8.png‘);
$(‘.home-bHome‘).attr(‘src‘, ‘img/‘ + cssName + ‘/home_yzl_7.png‘);

}else{
//没有皮肤就使用blue默认的路径
cssStyle.href = "Content/aps/skinColour_blue.css";
//设置默认图片路径
$(‘.home-bReturn‘).attr(‘src‘, ‘img/blue/home_yzl_8.png‘);
$(‘.home-bHome‘).attr(‘src‘, ‘img/blue/home_yzl_7.png‘);
}

四,总结换肤遇到的问题

1,js动态生成的标签换肤,例如jq通过字符串拼接,添加到页面上的img图片标签

1),通过本地存储获取皮肤名函数取到皮肤名值,判断这个值是否有,有的话,就用取到皮肤名,没取到值就用默认的blue蓝色

    //html5获取本地存储皮肤
    var cssName2 = getStorage("skinName");

    //判断皮肤名,切换图片路径
    var imgSrcCinema;
    if (cssName2 && cssName2 != null) {
        imgSrcCinema = cssName2;
    } else {
        imgSrcCinema = ‘blue‘;
    };

2),在js动态生成的地方写法:通过字符串拼接,+变量来实现

        var liImg = ‘<div class="film-vidctn3"><img class="videoimg" src="../../img/‘ + imgSrcCinema + ‘/cinema-yzl_09.png"></div>‘;

        $("." + pos).html(liImg);

2,点击按钮变色的效果换肤:

可以在不同的css文件里定义同名class,样式根据不同皮肤各自另外写。

例如:在蓝色皮肤skinColour_blue.css

/*js点击时的样式*/
.zhleftclick{
    background-color: rgba(0, 201, 212, 0.5) !important;
}

在黄色皮肤skinColour_yellow.css

/*1,js点击时的样式*/
.zhleftclick{
    background-color: #43490f !important;
}

在js里添加class就可以解决不同皮肤下的点击效果,原理是:在不同的皮肤状态下引用的皮肤css文件不一样来达到。

 $(‘.icon01‘).off(‘mousedown touchstart‘).on(‘mousedown touchstart‘, function () {
            $(‘.icon01‘).removeClass(‘zhleftclick‘).addClass(‘zhleftclick‘);
    })

3,另外一种点击变色效果换肤:

先通过本地存储获取皮肤名,再定义一个颜色变量,判断不同的皮肤名,来改变变量的内容,来达到在不同皮肤下的点击效果。

    //html5获取本地存储皮肤
    var cssName2 = getStorage("skinName");

    //点击变色
    var colorBright;  //点击背景变亮色

   if (cssName2 && cssName2 != null) {
        if (cssName2 == "blue") {
            colorBright = "rgb(226, 109, 73)";

        } else if (cssName2 == "yellow") {
            colorBright = "#acbf04";

        } else if (cssName2 == "red") {

        }
    } else {
        //没有皮肤,默认是蓝色blue
        colorBright = "rgb(226, 109, 73)";
    };

$("#ul input:eq(0)").attr("data-num", "1").css({ background: "" + colorBright + "" });

写完了,根据自己项目中解决问题的方法写的,不完整之处,请多指教。

  

  

时间: 2024-10-23 04:21:32

js实现换肤效果的相关文章

网页换肤效果的实现原理

效果原理: 准备几套CSS样式表 调式好每个CSS样式表的兼容性 在点击按钮时,改变link中href的值(js获取link标签,通过js改变href的值,link也可以给其id) HTML和js: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <htm

js网页换肤

使网页背景颜色可选黄/粉 <html> <head> <meta charset="utf-8"> <meta name="generator" content="HTML Tidy for HTML5 (experimental) for Windows https://github.com/w3c/tidy-html5/tree/c63cc39" /> <title>网页换肤<

网页换肤效果 系统界面切换皮肤样式

近期需要整理后台系统的界面皮肤样式.就是看一种风格样式习惯了,想换点别的样式界面 思考了一段时间,开始想偏了,想直接在现有样式直接修改.比如:红色,绿色. 思考后,还是写两套皮肤样式,进行切换吧. 默认加载原有的样式文件,点击按钮,切换对应的即可.不必修改结构,直接修改不同的样式属性. 以下为 核心代码片段 <link id="skinStyle" href="../styles/style.css" type="text/css" rel

hrml+css换肤效果

<strong><span style="font-size:12px;"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <META NAME="Generator" CONTENT=&quo

制作一个百度换肤效果

原理就是获取到图片的src地址然后赋值给背景的URL地址 <!DOCTYPE html> <html> <head> <meta charset="{CHARSET}"> <title></title> <style type="text/css"> *{ margin: 0; padding: 0; } body{ background: url(img/11.jpg) no-re

用js来实现页面的换肤功能(带cookie记忆)

用js来实现页面的换肤功能 js实现换肤功能的实现主要是通过利用js控制CSS来实现的.大致的实现原理是这样的, 1.先定义一个页面基本样式style.css来确定div的宽高等属性,使得整个页面的DIV元素有一个基本的框架结构. 2.再定义一系列的样式color1.css,color2.css……用来确定DIV元素的背景颜色,边框颜色等等. 3.用JS函数来决定调用哪个样式,并把调进来的样式写进cookie,这样就可以达功能. 例如:我们的页面结构如下: <div id="header&

antd在线换肤定制功能

最近react项目,用的antd框架,然后看见他的antdPro例子里面有个定制功能很帅,老大说做,那就做吧,鼓捣了一晚终于实现了. 先看预览效果吧 css换肤 入行前端的时候经常看鱼哥(张鑫旭)的博客,记得看过 这篇 ,当时很惊叹,原理其实很简单,就是我们最能想到的方式,多个css,然后用JS替换从而达到换肤效果.但是这个有局限性,比如我们用的是antdUI库,我们不可能每个颜色都去搞个css吧.当时现在我们有less,sass,而且原生的css也有变量var了,所以新时代我们有新技术达到这个

Android学习之 换肤功能模块的实现&lt;二&gt;

在上篇中 主要有学习到皮肤资源内置到应用程序中 的方式实现换肤的 基本思路,本篇将继续以上篇的思路学习 皮肤资源内置的方式实现换肤效果.但本篇侧重于应用中换肤功能的代码设计实现上!切换的皮肤资源位于assets下不同的皮肤资源文件夹中. 本篇demo程序的代码结构如下: 本篇实现换肤功能的代码设计 UML类图如下: 本篇demo的换肤效果如下:               主要的实现代码在于: 1.SkinConfigManager.java 作用:皮肤配置管理,封装了SharedPrefere

WPF换肤之五:创建漂亮的窗体

原文:WPF换肤之五:创建漂亮的窗体 换肤效果 经过了前面四章的讲解,我们终于知道了如何拖拉窗体使之改变大小,也知道了如何处理鼠标事件,同时,也知道了如何利用更好的编写方式来编写一个方便实用和维护的换肤程序.下面请看换肤效果(首先声明,窗体样式和按钮样式均来自于CodeProject,本人美工太差): 支持效果: 窗体拖拉,可以任意拖动窗体:重写了自带的DragMove类,使得拖拉和Resize不冲突. 窗体大小改变:通过WndProc接收所有的Windows消息来处理. 最大化,最小化,关闭窗