zoukankan      html  css  js  c++  java
  • 框架页面的换肤实现

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

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

    Java代码 复制代码 收藏代码
    1.   
    2. /*  
    3. 保存Cookie  
    4. c_name--key  
    5. value---value  
    6. 默认时长为一年  
    7. */  
    8. function setCookie(c_name, value, expiredays) {   
    9.     var exdate = new Date();   
    10.     exdate.setDate(exdate.getDate() + expiredays);   
    11.     document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : "; expires=" + exdate.toGMTString());   
    12. }   
    13. /*  
    14. 获取Cookie,根据c_name--key值来获取  
    15. */  
    16. function getCookie(c_name) {   
    17.     if (document.cookie.length > 0) {   
    18.         var c_start = document.cookie.indexOf(c_name + "=");   
    19.         if (c_start != -1) {   
    20.             c_start = c_start + c_name.length + 1;   
    21.             var c_end = document.cookie.indexOf(";", c_start);   
    22.             if (c_end == -1) {   
    23.                 c_end = document.cookie.length;   
    24.             }   
    25.             return unescape(document.cookie.substring(c_start, c_end));   
    26.         }   
    27.     }   
    28.     return "";   
    29. }   
    30. /*  
    31. 递归换肤  
    32. */  
    33. function changeSkin(winObj, cssPath) {   
    34.     var frames = winObj.frames;   
    35.     for (var i = 0; i < frames.length; i++) {   
    36.         //证明是该页面是框架页面   
    37.         //alert(frames[i].name + ":" + frames[i].frames.length);   
    38.         if (frames[i].frames.length > 0) {   
    39.             //判断页面中是否存在iframe              
    40.             var iframes = frames[i].document.getElementsByTagName("iframe");   
    41.             if(iframes.length > 0){//如果页面含有iframe,那么此页面也需要换肤   
    42.                 var linkObj = frames[i].document.getElementById("style"); //获取link对象   
    43.                 if (linkObj != null) {   
    44.                     linkObj.href = basePath + "/css/" + cssPath + "/test.css";   
    45.                 }   
    46.             }   
    47.             //alert("iframes:" + iframes.length);   
    48.             changeSkin(frames[i], cssPath);//递归换肤   
    49.         } else {   
    50.             //非框架页面,换肤   
    51.             var linkObj = frames[i].document.getElementById("style"); //获取link对象   
    52.             if (linkObj != null) {   
    53.                 linkObj.href = basePath + "/css/" + cssPath + "/test.css";   
    54.             }   
    55.         }   
    56.     }   
    57. }   
    58. /*  
    59. 下拉框调用此方法  
    60. */  
    61. function changeCss(winObj, cssPath) {   
    62.     setCookie("cssPath", cssPath, 365); //设置cookie   
    63.     changeSkin(winObj, cssPath); //换肤   
    64. }  



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



    下拉框的调用:
    Java代码 复制代码 收藏代码
    1. <select onchange="changeCss(window.top,this.value)">   
    2.             <option value="blue" selected="selected">   
    3.                 默认皮肤   
    4.             </option>   
    5.             <option value="red">   
    6.                 红海   
    7.             </option>   
    8.             <option value="green">   
    9.                 苍绿   
    10.             </option>   
    11.         </select>  

    转自:http://zhanghaidang.iteye.com/blog/692053

  • 相关阅读:
    hdu 5723 Abandoned country 最小生成树 期望
    OpenJ_POJ C16G Challenge Your Template 迪杰斯特拉
    OpenJ_POJ C16D Extracurricular Sports 打表找规律
    OpenJ_POJ C16B Robot Game 打表找规律
    CCCC 成都信息工程大学游记
    UVALive 6893 The Big Painting hash
    UVALive 6889 City Park 并查集
    UVALive 6888 Ricochet Robots bfs
    UVALive 6886 Golf Bot FFT
    UVALive 6885 Flowery Trails 最短路
  • 原文地址:https://www.cnblogs.com/ITRoad/p/2280919.html
Copyright © 2011-2022 走看看