`
zhanghaidang
  • 浏览: 39369 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

框架页面的换肤实现

阅读更多
换肤原理,准备N套皮肤CSS,放在webroot/css/red/test.css, webroot/css/blue/test.css……

程序员只需要通过Cookie来控制red, blue这里的目录,将这里目录变成变量即可,单页面通过DOM操作Link即可实现,框架页面同样,通过递归即可实现全站换肤,以下为JS代码


/*
保存Cookie
c_name--key
value---value
默认时长为一年
*/
function setCookie(c_name, value, expiredays) {
	var exdate = new Date();
	exdate.setDate(exdate.getDate() + expiredays);
	document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : "; expires=" + exdate.toGMTString());
}
/*
获取Cookie,根据c_name--key值来获取
*/
function getCookie(c_name) {
	if (document.cookie.length > 0) {
		var c_start = document.cookie.indexOf(c_name + "=");
		if (c_start != -1) {
			c_start = c_start + c_name.length + 1;
			var c_end = document.cookie.indexOf(";", c_start);
			if (c_end == -1) {
				c_end = document.cookie.length;
			}
			return unescape(document.cookie.substring(c_start, c_end));
		}
	}
	return "";
}
/*
递归换肤
*/
function changeSkin(winObj, cssPath) {
	var frames = winObj.frames;
	for (var i = 0; i < frames.length; i++) {
		//证明是该页面是框架页面
		//alert(frames[i].name + ":" + frames[i].frames.length);
		if (frames[i].frames.length > 0) {
			//判断页面中是否存在iframe			
			var iframes = frames[i].document.getElementsByTagName("iframe");
			if(iframes.length > 0){//如果页面含有iframe,那么此页面也需要换肤
				var linkObj = frames[i].document.getElementById("style"); //获取link对象
				if (linkObj != null) {
					linkObj.href = basePath + "/css/" + cssPath + "/test.css";
				}
			}
			//alert("iframes:" + iframes.length);
			changeSkin(frames[i], cssPath);//递归换肤
		} else {
			//非框架页面,换肤
			var linkObj = frames[i].document.getElementById("style"); //获取link对象
			if (linkObj != null) {
				linkObj.href = basePath + "/css/" + cssPath + "/test.css";
			}
		}
	}
}
/*
下拉框调用此方法
*/
function changeCss(winObj, cssPath) {
	setCookie("cssPath", cssPath, 365); //设置cookie
	changeSkin(winObj, cssPath); //换肤
}



方法准备好了以后,需要在共享页面(taglibs.jsp)加入以下代码:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%@ taglib prefix="page" uri="page-tag"%>
<%@ page isELIgnored="false"%>
<c:set var="basePath" value="${pageContext.request.contextPath}" />
<script type="text/javascript" src="${basePath}/script/skin.js"></script>
<script type="text/javascript">
var basePath = '${basePath}'; //基路径
var cssPath = getCookie("cssPath"); //获取默认皮肤路径
//判断用户Cookie中是否有路径,无采用默认,有采用用户的信息
if (cssPath != null && cssPath != ""){
	document.write("<link href='${basePath}/css/" + cssPath + "/test.css' id='style' rel='stylesheet' type='text/css' />");
}else{
	setCookie('cssPath',"blue",365);
	document.write("<link href='${basePath}/css/blue/test.css' id='style' rel='stylesheet' type='text/css' />");
}
</script>



下拉框的调用:
<select onchange="changeCss(window.top,this.value)">
			<option value="blue" selected="selected">
				默认皮肤
			</option>
			<option value="red">
				红海
			</option>
			<option value="green">
				苍绿
			</option>
		</select>
分享到:
评论

相关推荐

    后台框架页面换肤并保存设置简单实例

    在本实例中,"后台框架页面换肤简单实例"可能包含了实现以上步骤的代码示例、说明文档或者演示页面。开发者可以通过学习这个实例,了解如何在实际项目中应用这些技术,为用户提供更好的交互体验。同时,这也涉及到...

    页面换肤

    许多前端开发框架,如Bootstrap、Angular Material、React和Vue.js,都提供了内置的主题系统,允许开发者轻松实现页面换肤功能。这些框架通常提供了一套完整的样式组件,用户只需更改主题变量即可改变整个应用的...

    CSS换肤标准与实现

    #### 多项目工程中的换肤实现 在多项目环境中实现换肤功能时,需要考虑不同项目之间的差异性和共通性。 1. **相同点**: - 所有项目共享相同的模板初始化文件,以统一浏览器的基础样式。 - 定义统一的class名称...

    vue换肤,全屏,中英文切换框架

    在"vue换肤,全屏,中英文切换框架"这个项目中,开发者已经整合了一些常见的功能特性,以便于快速搭建一个具备用户友好的PC端应用。以下是这个框架涉及的主要知识点: 1. **Vue组件化开发**:Vue的核心理念之一就是...

    JSF2.0实战 - 8、实现换肤功能

    在本篇内容中,我们将深入探讨如何在JavaServer Faces (JSF) 2.0框架中实现换肤功能。JSF是一种用于构建Web应用程序的Java EE标准组件模型,而换肤功能则是提升用户体验的重要手段,它允许用户根据个人喜好选择不同...

    利用JS实现背景换肤

    在本文中,我们将深入探讨如何利用JavaScript(JS)来实现网页背景换肤的功能,类似于QQ空间的个性化设置。背景换肤是提升用户交互体验的重要手段,它允许用户根据个人喜好自定义网页的视觉样式,从而增加用户的参与...

    iOS APP动态换肤方案详解.docx

    换肤功能是现代移动应用提升用户体验的重要手段,它不仅涵盖了全局主题的更换,如节假日主题切换,还包括局部页面的个性化设置,如白天/夜间模式。iOS系统自iOS13开始引入暗黑模式,为实现动态换肤提供了基础。本文...

    在Ajax程序中实现无刷新换肤功能(asp.net2.0

    在Ajax程序中实现无刷新换肤功能是提升用户体验的重要手段,尤其是在ASP.NET 2.0框架下。这种技术允许用户更改网站的外观和感觉而无需重新加载整个页面,从而提供了流畅且快速的交互体验。本文将详细介绍如何在ASP...

    安卓换肤主题更换夜间模式相关-Android手指滑动切换页面换皮肤.rar

    总之,这个压缩包提供了关于Android应用中手指滑动切换页面和主题换肤的实现思路,包括触摸事件处理、主题资源管理和夜间模式切换。通过学习和理解这些代码,开发者可以提升自己的Android开发技能,为用户打造更友好...

    换肤技术

    4. 桌面应用:在Windows和macOS等桌面平台上,换肤技术通常依赖于特定的框架或库,如Qt、WPF或JavaFX,它们提供了丰富的界面元素和样式控制。 四、换肤技术的挑战与解决方案 1. 性能优化:大量更换皮肤资源可能...

    AntDesign最简单的动态换肤方案

    标题 "AntDesign最简单的动态换肤方案" 指向的是使用Ant Design框架实现应用程序的动态主题切换功能。Ant Design是阿里巴巴开源的一款基于React的UI组件库,它提供了丰富的界面设计元素和良好的交互体验,广泛应用于...

    网站整站换肤源码(demo)

    - 如今许多前端框架(如React、Vue或Angular)和库(如jQuery)提供了便捷的方法来管理CSS和用户设置,简化换肤功能的实现。 7. **代码结构与模块化**: - 良好的源码组织结构能让代码易于维护和扩展。换肤功能...

    jeecg开源框架常用内容汇总整理.rar

    6. **移动办公支持**:Jeecg框架兼容移动设备,能适应不同终端的展示需求,实现了移动办公的无缝对接。 7. **插件化设计**:Jeecg采用插件化设计,各个功能模块独立,方便扩展和维护,降低系统耦合度。 在文档...

    若依登录页面改造源码资源

    【标题】"若依登录页面改造源码资源"是一个针对Vue.js框架的登录页面开发项目,其中包含了Vue组件化的登录界面、验证码实现以及背景图片素材。这个资源旨在帮助开发者快速构建美观且功能齐全的登录系统。 【描述】...

    JQuery换肤

    本文将深入探讨如何利用JQuery实现页面换肤。 首先,我们需要了解JQuery的基本概念。JQuery是由John Resig于2006年创建的,它简化了JavaScript编程,通过链式操作、事件处理、动画和Ajax交互等特性,使得开发者能更...

    .net网站换肤的设计原理

    本文将深入探讨网站换肤的设计原理,特别是针对.NET平台下的实现方法,包括CSS隔离、模板识别、主题应用、动态控件加载以及XML与XSLT的结合等技术点。 #### CSS隔离与样式控制 CSS(层叠样式表)是网站换肤的核心...

    CSS换肤

    5. **使用CSS框架或库**:有些库如Bootstrap和Materialize提供了预设的皮肤,可以通过简单的类名添加或移除来实现换肤。 CSS换肤带来的好处包括: 1. **用户体验提升**:用户可以根据自己的喜好选择界面风格,提高...

    jqueryEasyui换肤技术

    在提供的"jqueryEasyui换肤技术"压缩包中,应该包含了这样的示例代码和演示页面。 总结来说,jQuery EasyUI的换肤技术主要涉及皮肤样式的引入、默认皮肤的移除、JavaScript设置的调整、自定义皮肤的创建以及动态...

    带图标和界面换肤功能的左侧导航菜单(非常好)

    界面换肤则涉及到软件的可定制性和用户界面设计的灵活性,这可能涉及到CSS、JavaScript或者更高级的框架如React或Vue等来实现动态换肤功能。 在实现这种功能时,开发人员通常会采用以下技术: 1. HTML/CSS: 用于...

    Vue百度换肤.zip

    在“Vue百度换肤”这个项目中,我们可以看到一个基于Vue.js的皮肤切换功能的实现,这对于初学者来说是理解Vue指令操作和实际应用的一个很好案例。 首先,我们来探讨Vue.js的核心知识点: 1. **数据绑定**:Vue.js...

Global site tag (gtag.js) - Google Analytics