zoukankan      html  css  js  c++  java
  • 在Ajax程序中实现无刷新换肤功能(asp.net2.0)

    (转载:http://www.cnblogs.com/aiqingayu/archive/2006/10/26/539833.html)小弟我又来献丑了,不知道放在原创区是否合适,不行就用砖头飞我吧!
          写了一年多的WEB程序,觉得程序中换肤的功能是非常吸引人眼球的技术。特别是在子父级的WEB平台与论坛上应用广泛,可以突出不同人的风格与个性。
          从文章的标题上看是Ajax的无刷新换肤,只是本人比较喜欢Ajax程序而已,其实普通的WEB程序与Ajax实现换肤原理都一样,所以下面两种程序的换肤功能都会介绍。
          我将换肤功能从复杂程度上分为二个类别:
          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文件进行链接。

    <link id="cssStyle" rel="stylesheet" type="text/css" />
    自己定义ID标识,然后用下面的JS代码初始化
     1<script language="javascript" type="text/javascript">
     2 2 <!--
     3 3 function window.onload()
     4 4 {
     5 5     changeCSS('css1.css');//当然'css1.css'是从数据库或Session中读取的初始CSS链接地址。具体实现我就不多说了
     6 6 }

     7 7 function changeCSS(CSSLink)
     8 8 {
     9 9     cssStyle.href=CSSLink;
    1010 }

    1111 -->
    1212 
    </script>

     若要改变就随便准备几个按钮什么,只要是能直接调用changeCSS(CSSLink)这个方法的都行!(不刷新页面就可以直接看到效果)
          预览还是要用Session记录,然后用数据库的字段值初始,判断方法同上。

          3.换模版
          这个换起来有一点复杂,先说个比较笨的方法,就是准备不同的模版程序,对文件夹编号,然后通过数据库调用!这个确实很吃力,因为要准备不同的模版,只适用于模块较多和排版做大范围的改变,具体实现也同上,预览时用Session把编号保存起来,普通WEB改变Session后刷新页面,Ajax回调整个页面结构。
          如果你的模块较少,而且只是简单的改变几个模块的位置,那就用CSS中的position:absolute;吧!让模块漂浮起来,比如将不同模块嵌在DIV中,用JS改变它们的top与left就能马上实现预览功能,当然这个就需要自己写JS来定位,下面我简单的写了2个模块的换肤。

     1 <script language="javascript" type="text/javascript">
     2 2 <!--
     3 3 function window.onload()
     4 4 {
     5 5     changeSkin('1');//当然 '1' 是从数据库或Session中读取的初始模版值。
     6 6 }

     7 7 function setDivTop(divID,topValue)
     8 8     {
     9 9         document.getElementById(divID).style.top = topValue;
    1010     }

    1111     function setDivLeft(divID,leftValue)
    1212     {
    1313         document.getElementById(divID).style.left = leftValue;
    1414     }

    1515 //这个JS方法就要自己写了,一个一个的将模块定位吧!
    1616 function changeSkin(skinNO)
    1717 {
    1818     switch(skinNO)
    1919     {
    2020     case"1":
    2121         setDivTop('divNews','100px');
    2222         setDivLeft('divNews','100px');
    2323         setDivTop('divMusic','300px');
    2424         setDivLeft('divMusic','300px');
    2525         break;
    2626         case"2":
    2727         setDivTop('divNews','300px');
    2828         setDivLeft('divNews','300px');
    2929         setDivTop('divMusic','100px');
    3030         setDivLeft('divMusic','100px');
    3131         break;
    3232     }

    3333 }

    3434 -->
    3535 </script>

    这个可以用几个按钮调用这个changeSkin(skinNO)方法,直接看到效果。
    若要保存就存数据库吧!用window.onload()事件初始。

          就写到这里了,马马乎乎,丢砖吧!
          下面提供了几个Ajax换肤例子 并且附源码供大家下载!

     1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     2 2 <html xmlns="http://www.w3.org/1999/xhtml" >
     3 3 <head>
     4 4     <title>测试</title>
     5 5     <link id="cssStyle" rel="stylesheet" type="text/css" />
     6 6     <script language="javascript" type="text/javascript">
     7 7     <!--
     8 8      function window.onload()
     9 9     {
    1010         //没有做数据库与Session的存储,所以初始值赋固定初始值,具体使用请用数据库与Session存储并初始化。
    1111         changeSkin('1');
    1212         changeSkin2('1');
    1313         changeCSS('css1.css');
    1414     }

    1515     function setDivTop(divID,topValue)
    1616     {
    1717         document.getElementById(divID).style.top = topValue;
    1818     }

    1919     function setDivLeft(divID,leftValue)
    2020     {
    2121         document.getElementById(divID).style.left = leftValue;
    2222     }

    2323     //这个JS方法就要自己写了,一个一个的将模块定位吧!
    2424     function changeSkin(skinNO)
    2525     {
    2626         switch(skinNO)
    2727         {
    2828             case"1":
    2929                 setDivTop('divWrite','70px');
    3030                 setDivLeft('divWrite','10px');
    3131                 setDivTop('divRead','70px');
    3232                 setDivLeft('divRead','300px');
    3333                 break;
    3434             case"2":
    3535                 setDivTop('divWrite','70px');
    3636                 setDivLeft('divWrite','300px');
    3737                 setDivTop('divRead','70px');
    3838                 setDivLeft('divRead','10px');
    3939                 break;
    4040          }

    4141     }

    4242     //这个方法模拟Ajax回调不同的模版,并且模拟更换图片
    4343     function changeSkin2(skinNO)
    4444     {
    4545         switch(skinNO)
    4646         {
    4747             case"1":
    4848                 document.getElementById('divAjax').innerHTML="<div style=' 200px;border-style:dashed; border-color:Aqua; border-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=' 200px; border-style:dashed; border-color:Aqua; border-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>";
    4949                 break;
    5050             case"2":
    5151                 document.getElementById('divAjax').innerHTML="<div style=' 200px; border-style:dashed; border-color:Aqua; border-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=' 200px;border-style:dashed; border-color:Aqua; border-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>";
    5252                 break;
    5353          }

    5454     }

    5555     function changeCSS(CSSLink)
    5656     {
    5757         cssStyle.href=CSSLink;
    5858     }

    5959     -->
    6060     
    </script>
    6161 </head>
    6262 <body>
    6363 <span class="font_12">点击动态改变DIV位置更换模版</span><br />
    6464 <input onclick="changeSkin('1');" type="button" value="Skin1" />&nbsp;&nbsp;<input onclick="changeSkin('2');" type="button" value="Skin2" />
    6565 <div style=" top:70px; left:10px; position:absolute; border-style:dashed; border-color:Aqua; border-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>
    6666 <div style=" top:70px; left:300px; position:absolute; border-style:dashed; border-color:Aqua; border-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>
    6767 <br /><br /><br /><br /><br /><br /><br />
    6868 <hr />
    6969 <span class="font_12">点击模拟Ajax回调方法更换模版</span><br />
    7070 <input onclick="changeSkin2('1');" type="button" value="Skin1" />&nbsp;&nbsp;<input onclick="changeSkin2('2');" type="button" value="Skin2" />
    7171 <div id="divAjax"></div>
    7272 <hr />
    7373 <span class="font_12">点击更换CSS</span><br />
    7474 <input onclick="changeCSS('css1.css')" type="button" value="CSS1" />&nbsp;&nbsp;<input onclick="changeCSS('css2.css')" type="button" value="CSS2" />
    7575 </body>
    7676 </html>

    下载:link

     

    http://u.huoban001.com/space.php
  • 相关阅读:
    对话框隐藏的简单实现(转)
    CoInitializeSecurity 学习(转)
    VC++实现CD/DVD刻录(转)
    网络连接的保活机制(心跳机制转)
    tcp架构
    木马的隐藏及其启动方式 (转)
    vs2005 控件bug
    vs2005 虚拟调试配置(转)
    sprintf用法(转)
    要掌握真正的免杀必须懂汇编【汇编语言超浓缩教程】(转)
  • 原文地址:https://www.cnblogs.com/zpq521/p/817653.html
Copyright © 2011-2022 走看看