在Ajax程序中实现无刷新换肤功能

news/2024/7/4 0:59:33 标签: ajax, class, function, session, stylesheet, button
class="baidu_pl">
class="article_content clearfix">
class="htmledit_views"> class="123" id="contentAdv">
 
将换肤功能从复杂程度上分为二个类别:

1.换图片、CSS文件,但是不换模版(所谓的页面排版不变)。 
2.换图片、CSS文件,模版(页面排版也改变,与CNBLOGS一样的换肤功能)。

稍微了解的人都知道第2个类别的换肤比较复杂,因为要改变所有的页面结构,一般我们是准备很多不同的模版文件,具体的方法下面会详细说明,我们还可以充分发挥Ajax的动态交互功能,来实现无刷新换肤。

现在让我向大家描述一下所有WEB程序换肤功能的实现原理,下面所说的预览并不是截图让用户选择,而是直接换上,感觉好了再存。


1.换图片 

换图片的方法是将存放图片的文件夹命名编号,例如:images1、images2、 images3……然后在路径的字符串上做手脚,现在来实现预览功能,普通WEB程序建立一个session会话变量,比如session ("skin"),来替代1,2,3这样的编号,之所以要用session会话变量,想必大家都了解,是为了确保在页面刷新后不丢失数据。Ajax程序也 是同样道理,因为回调也会丢失数据。改变这个变量的值也就是改变了图片的路径,自然换起来就简单,普通的WEB程序就刷新页面,Ajax程序回调整个页面 (把所有的结构嵌在页面DIV中,回调)。

若要保存选定的皮肤,就把变量的值存数据库,初始页面时就在页面的Page_Load中将数据库中的值 赋给变量,如何判断是用Session("skin")的值还是是数据库字段值,这个简单,判断Session("skin")的值是否为空,不为空就调 用Session("skin")值咯!


2.换CSS

这个很简单拉,用JS就可以搞定,老套路,将CSS文件的命名编号css1.css、css2.css……在首页将CSS文件进行链接。
阅 读代码编辑代码运行效果复制HTML代码保存代码<link id="cssStyle" rel="stylesheet" type="text/css" /><link id="cssStyle" rel="stylesheet" type="text/css" />
自己定义ID标识,然后用下面的JS代码初始化
阅读代码编辑代码运行效果复制HTML代码保存代码<script language="javascript" type="text/javascript">
<!--
function window.onload()
{
    changeCSS('css1.css');//当然'css1.css'是从数据库或Session中读取的初始CSS链接地址。具体实现我就不多说了
}
function changeCSS(CSSLink)
{
    cssStyle.href=CSSLink;
}
 -->
</script><script language="javascript" type="text/javascript">
<!--
function window.onload()
{
    changeCSS('css1.css');//当然'css1.css'是从数据库或Session中读取的初始CSS链接地址。具体实现我就不多说了
}
function changeCSS(CSSLink)
{
    cssStyle.href=CSSLink;
}
 -->
 </script>
若要改变就随便准备几个按钮什么,只要是能直接调用changeCSS(CSSLink)这个方法的都行!(不刷新页面就可以直接看到效果)

预览还是要用Session记录,然后用数据库的字段值初始,判断方法同上。


3.换模版

这个换起来有一点复杂,先说个比较笨的方法,就是准备不同的模版程序,对文件夹编号,然后通过数据库调 用!这个确实很吃力,因为要准备不同的模版,只适用于模块较多和排版做大范围的改变,具体实现也同上,预览时用Session把编号保存起来,普通WEB 改变Session后刷新页面,Ajax回调整个页面结构。

如果你的模块较少,而且只是简单的改变几个模块的位置,那就用CSS中的position: absolute;吧!让模块漂浮起来,比如将不同模块嵌在DIV中,用JS改变它们的top与left就能马上实现预览功能,当然这个就需要自己写JS 来定位,下面我简单的写了2个模块的换肤。
阅读代码编辑代码运行效果复制HTML代码保存代码<script language="javascript" type="text/javascript">
<!--
function window.onload()
{
    changeSkin('1');//当然 '1' 是从数据库或Session中读取的初始模版值。
}
function setDivTop(divID,topValue)
{
    document.getElementById(divID).style.top = topValue;
}
function setDivLeft(divID,leftValue)
{
    document.getElementById(divID).style.left = leftValue;
}
//这个JS方法就要自己写了,一个一个的将模块定位吧!
function changeSkin(skinNO)
{
    switch(skinNO)
    {
    case"1":
         setDivTop('divNews','100px');
         setDivLeft('divNews','100px');
         setDivTop('divMusic','300px');
         setDivLeft('divMusic','300px');
         break;
    case"2":
         setDivTop('divNews','300px');
         setDivLeft('divNews','300px');
         setDivTop('divMusic','100px');
         setDivLeft('divMusic','100px');
         break;
    }
}
 -->
</script><script language="javascript" type="text/javascript">
<!--
function window.onload()
{
    changeSkin('1');//当然 '1' 是从数据库或Session中读取的初始模版值。
}
function setDivTop(divID,topValue)
{
    document.getElementById(divID).style.top = topValue;
}
function setDivLeft(divID,leftValue)
{
    document.getElementById(divID).style.left = leftValue;
}
//这个JS方法就要自己写了,一个一个的将模块定位吧!
function changeSkin(skinNO)
{
    switch(skinNO)
    {
    case"1":
         setDivTop('divNews','100px');
         setDivLeft('divNews','100px');
         setDivTop('divMusic','300px');
         setDivLeft('divMusic','300px');
         break;
    case"2":
         setDivTop('divNews','300px');
         setDivLeft('divNews','300px');
         setDivTop('divMusic','100px');
         setDivLeft('divMusic','100px');
         break;
    }
}
 -->
 </script>
这个可以用几个按钮调用这个changeSkin(skinNO)方法,直接看到效果。
若要保存就存数据库吧!用window.onload()事件初始。

就写到这里了,马马乎乎,丢砖吧!

下面提供了几个Ajax换肤例子 并且附源码供大家下载!
阅读代码编辑代码运行效果复制 HTML代码保存代码<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" >
 <head>
     <title>测试</title>
     <link id="cssStyle" rel="stylesheet" type="text/css" />
     <script language="javascript" type="text/javascript">
<!--
      function window.onload()
     {
         //没有做数据库与Session的存储,所以初始值赋固定初始值,具体使用请用数据库与Session存储并初始化。
         changeSkin('1');
         changeSkin2('1');
         changeCSS('css1.css');
     }
     function setDivTop(divID,topValue)
     {
         document.getElementById(divID).style.top = topValue;
     }
     function setDivLeft(divID,leftValue)
     {
         document.getElementById(divID).style.left = leftValue;
     }
     //这个JS方法就要自己写了,一个一个的将模块定位吧!
     function changeSkin(skinNO)
     {
         switch(skinNO)
         {
             case"1":
                 setDivTop('divWrite','70px');
                 setDivLeft('divWrite','10px');
                 setDivTop('divRead','70px');
                 setDivLeft('divRead','300px');
                 break;
             case"2":
                 setDivTop('divWrite','70px');
                 setDivLeft('divWrite','300px');
                 setDivTop('divRead','70px');
                 setDivLeft('divRead','10px');
                 break;
          }
     }
     //这个方法模拟Ajax回调不同的模版,并且模拟更换图片
     function changeSkin2(skinNO)
     {
         switch(skinNO)
         {
             case"1":
                 document.getElementById('divAjax').innerHTML="<div style=' width:200px;border-style:dashed; border-color:Aqua; border-width:3px;'><IMG SRC='image1/write.gif' /><br /><span class='font_12'>书写模块书写模块书写模块书写模块</span><br /><span class='font_12'>书写模块书写模块书写模块书写模块</span><br /><span class='font_12'>书写模块书写模块书写模块书写模块</span><br /><span class='font_12'>书写模块书写模块书写模块书写模块</span><br /></div><div style=' width:200px; border-style:dashed; border-color:Aqua; border-width:3px;'><IMG SRC='image1/read.gif' /><br /><span class='font_12'>读取模块读取模块读取模块读取模块</span><br /><span class='font_12'>读取模块读取模块读取模块读取模块</span><br /><span class='font_12'>读取模块读取模块读取模块读取模块</span><br /><span class='font_12'>读取模块读取模块读取模块读取模块</span><br /></div>";
                 break;
             case"2":
                 document.getElementById('divAjax').innerHTML="<div style=' width:200px; border-style:dashed; border-color:Aqua; border-width:3px;' id='divRead'><IMG SRC='image2/read.gif' /><br /><span class='font_12'>读取模块读取模块读取模块读取模块</span><br /><span class='font_12'>读取模块读取模块读取模块读取模块</span><br /><span class='font_12'>读取模块读取模块读取模块读取模块</span><br /><span class='font_12'>读取模块读取模块读取模块读取模块</span><br /></div><div style=' width:200px;border-style:dashed; border-color:Aqua; border-width:3px;'><IMG SRC='image2/write.gif' /><br /><span class='font_12'>书写模块书写模块书写模块书写模块</span><br /><span class='font_12'>书写模块书写模块书写模块书写模块</span><br /><span class='font_12'>书写模块书写模块书写模块书写模块</span><br /><span class='font_12'>书写模块书写模块书写模块书写模块</span><br /></div>";
                 break;
          }
     }
     function changeCSS(CSSLink)
     {
         cssStyle.href=CSSLink;
     }
     -->
</script>
 </head>
 <body>
 <span class="font_12">点击动态改变DIV位置更换模版</span><br />
 <input οnclick="changeSkin('1');" type="button" value="Skin1" />  <input οnclick="changeSkin('2');" type="button" value="Skin2" />
 <div style=" top:70px; left:10px; position:absolute; border-style:dashed; border-color:Aqua; border-width:3px;" id="divWrite"><IMG SRC="image1/write.gif" /><br /><span class="font_12">书写模块书写模块书写模块书写模块</span><br /><span class="font_12">书写模块书写模块书写模块书写模块</span><br /><span class="font_12">书写模块书写模块书写模块书写模块</span><br /><span class="font_12">书写模块书写模块书写模块书写模块</span><br /></div>
 <div style=" top:70px; left:300px; position:absolute; border-style:dashed; border-color:Aqua; border-width:3px;" id="divRead"><IMG SRC="image1/read.gif" /><br /><span class="font_12">读取模块读取模块读取模块读取模块</span><br /><span class="font_12">读取模块读取模块读取模块读取模块</span><br /><span class="font_12">读取模块读取模块读取模块读取模块</span><br /><span class="font_12">读取模块读取模块读取模块读取模块</span><br /></div>
 <br /><br /><br /><br /><br /><br /><br />
 <hr />
 <span class="font_12">点击模拟Ajax回调方法更换模版</span><br />
 <input οnclick="changeSkin2('1');" type="button" value="Skin1" />  <input οnclick="changeSkin2('2');" type="button" value="Skin2" />
 <div id="divAjax"></div>
 <hr />
 <span class="font_12">点击更换CSS</span><br />
 <input οnclick="changeCSS('css1.css')" type="button" value="CSS1" />  <input οnclick="changeCSS('css2.css')" type="button" value="CSS2" />
 </body>
 </html><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" >
 <head>
     <title>测试</title>
     <link id="cssStyle" rel="stylesheet" type="text/css" />
     <script language="javascript" type="text/javascript">
     <!--
      function window.onload()
     {
         //没有做数据库与Session的存储,所以初始值赋固定初始值,具体使用请用数据库与Session存储并初始化。
         changeSkin('1');
         changeSkin2('1');
         changeCSS('css1.css');
     }
     function setDivTop(divID,topValue)
     {
         document.getElementById(divID).style.top = topValue;
     }
     function setDivLeft(divID,leftValue)
     {
         document.getElementById(divID).style.left = leftValue;
     }
     //这个JS方法就要自己写了,一个一个的将模块定位吧!
     function changeSkin(skinNO)
     {
         switch(skinNO)
         {
             case"1":
                 setDivTop('divWrite','70px');
                 setDivLeft('divWrite','10px');
                 setDivTop('divRead','70px');
                 setDivLeft('divRead','300px');
                 break;
             case"2":
                 setDivTop('divWrite','70px');
                 setDivLeft('divWrite','300px');
                 setDivTop('divRead','70px');
                 setDivLeft('divRead','10px');
                 break;
          }
     }
     //这个方法模拟Ajax回调不同的模版,并且模拟更换图片
     function changeSkin2(skinNO)
     {
         switch(skinNO)
         {
             case"1":
                 document.getElementById('divAjax').innerHTML="<div style=' width:200px;border-style:dashed; border-color:Aqua; border-width:3px;'><IMG SRC='image1/write.gif' /><br /><span class='font_12'>书写模块书写模块书写模块书写模块</span><br /><span class='font_12'>书写模块书写模块书写模块书写模块</span><br /><span class='font_12'>书写模块书写模块书写模块书写模块</span><br /><span class='font_12'>书写模块书写模块书写模块书写模块</span><br /></div><div style=' width:200px; border-style:dashed; border-color:Aqua; border-width:3px;'><IMG SRC='image1/read.gif' /><br /><span class='font_12'>读取模块读取模块读取模块读取模块</span><br /><span class='font_12'>读取模块读取模块读取模块读取模块</span><br /><span class='font_12'>读取模块读取模块读取模块读取模块</span><br /><span class='font_12'>读取模块读取模块读取模块读取模块</span><br /></div>";
                 break;
             case"2":
                 document.getElementById('divAjax').innerHTML="<div style=' width:200px; border-style:dashed; border-color:Aqua; border-width:3px;' id='divRead'><IMG SRC='image2/read.gif' /><br /><span class='font_12'>读取模块读取模块读取模块读取模块</span><br /><span class='font_12'>读取模块读取模块读取模块读取模块</span><br /><span class='font_12'>读取模块读取模块读取模块读取模块</span><br /><span class='font_12'>读取模块读取模块读取模块读取模块</span><br /></div><div style=' width:200px;border-style:dashed; border-color:Aqua; border-width:3px;'><IMG SRC='image2/write.gif' /><br /><span class='font_12'>书写模块书写模块书写模块书写模块</span><br /><span class='font_12'>书写模块书写模块书写模块书写模块</span><br /><span class='font_12'>书写模块书写模块书写模块书写模块</span><br /><span class='font_12'>书写模块书写模块书写模块书写模块</span><br /></div>";
                 break;
          }
     }
     function changeCSS(CSSLink)
     {
         cssStyle.href=CSSLink;
     }
     -->
     </script>
 </head>
 <body>
 <span class="font_12">点击动态改变DIV位置更换模版</span><br />
 <input οnclick="changeSkin('1');" type="button" value="Skin1" />  <input οnclick="changeSkin('2');" type="button" value="Skin2" />
 <div style=" top:70px; left:10px; position:absolute; border-style:dashed; border-color:Aqua; border-width:3px;" id="divWrite"><IMG SRC="image1/write.gif" /><br /><span class="font_12">书写模块书写模块书写模块书写模块</span><br /><span class="font_12">书写模块书写模块书写模块书写模块</span><br /><span class="font_12">书写模块书写模块书写模块书写模块</span><br /><span class="font_12">书写模块书写模块书写模块书写模块</span><br /></div>
 <div style=" top:70px; left:300px; position:absolute; border-style:dashed; border-color:Aqua; border-width:3px;" id="divRead"><IMG SRC="image1/read.gif" /><br /><span class="font_12">读取模块读取模块读取模块读取模块</span><br /><span class="font_12">读取模块读取模块读取模块读取模块</span><br /><span class="font_12">读取模块读取模块读取模块读取模块</span><br /><span class="font_12">读取模块读取模块读取模块读取模块</span><br /></div>
 <br /><br /><br /><br /><br /><br /><br />
 <hr />
 <span class="font_12">点击模拟Ajax回调方法更换模版</span><br />
 <input οnclick="changeSkin2('1');" type="button" value="Skin1" />  <input οnclick="changeSkin2('2');" type="button" value="Skin2" />
 <div id="divAjax"></div>
 <hr />
 <span class="font_12">点击更换CSS</span><br />
 <input οnclick="changeCSS('css1.css')" type="button" value="CSS1" />  <input οnclick="changeCSS('css2.css')" type="button" value="CSS2" />
 </body>
 </html>

源码下载
http://files.cnblogs.com/aiqingayu/changeskin.rar

 

http://www.niftyadmin.cn/n/1413600.html

相关文章

leecode第一百三十六题(只出现一次的数字)

class Solution { public:int singleNumber(vector<int>& nums) {int lennums.size();int res0;for(int i0;i<len;i)resres^nums[i];//一次异或所有的值return res;} }; 分析&#xff1a; 这个题我见过&#xff0c;剑指offer提供的思路&#xff0c;异或是个很好的…

date 输出格式

2019独角兽企业重金招聘Python工程师标准>>> 1、Date的12小时制和24小时制 public static final DateFormat formatWithTime new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); java.util.Date newStartTime formatWithTime.parse("2016-03-21 14:41…

食物链(并查集)

食物链 动物王国中有三类动物A,B,C&#xff0c;这三类动物的食物链构成了有趣的环形。A吃B&#xff0c; B吃C&#xff0c;C吃A。 现有N个动物&#xff0c;以1&#xff0d;N编号。每个动物都是A,B,C中的一种&#xff0c;但是我们并不知道它到底是哪一种。 有人用两种说法对这N个…

10.Regular Expression Matching

定义一个二维的DP数组&#xff0c;其中dp[i][j]表示s[0,i)和p[0,j)是否match&#xff0c;然后有下面三种情况 1. P[i][j] P[i - 1][j - 1], if p[j - 1] ! * && (s[i - 1] p[j - 1] || p[j - 1] .); 2. P[i][j] P[i][j - 2], if p[j - 1] * and the pattern rep…

面向对象的 Javascript 语言特性:引用

引用 JavaScript的一个重要的方面是引用的概念。引用就是指向对象实际位置的指针。这是一项极其强大的功能。前提是&#xff0c;实际的对象决不是一个 引用&#xff1a;字符串总是一个字符串&#xff0c;数组总是一个数组。然而&#xff0c;多个变量可以引用相同的对象。JavaSc…

[转] JavaScript 原型理解与创建对象应用

这段时间把之前的 JavaScript 的笔记复习了一遍&#xff0c;又学习了一些新的内容&#xff0c;所以把自己的学习笔记加上个人理解在这里总结一下&#xff0c;并提供一个简单的应用示例&#xff0c;希望能帮助一些刚入门的朋友。主 要参考《JavaScript 高级程序设计》一书&#…

面向对象的 Javascript 函数重载和类型检查

函数重载和类型检查 其它面向对象的语言(比如Java)的一种共有的特性是“重载”函数的能力&#xff1a;传给它们不同数目或类型的参数&#xff0c;函数将执行不同操作。虽然这种能力在JavaScript中不是直接可用的&#xff0c;一些工具的提供使得这种探求完全成为可能。   在Ja…

hdu3555数位dp基础

/* dp[i][0|1|2]:没有49的个数|最高位是9&#xff0c;没有49的个数|有49的个数 dp[i][0]10*dp[i-1][0]-dp[i-1][1] dp[i][1]dp[i-1][0] dp[i][2]10*dp[i-1][2]dp[i-1][1] */ #include<bits/stdc.h> using namespace std; #define ll long long ll dp[30][4],n,t; void…