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

写了一年多的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 <!--
 3 function window.onload()
 4 {
 5     changeCSS('css1.css');//当然'css1.css'是从数据库或Session中读取的初始CSS链接地址。具体实现我就不多说了
 6 }
 7 function changeCSS(CSSLink)
 8 {
 9     cssStyle.href=CSSLink;
10 }
11 -->
12 </script>

 

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

 1 <script language="javascript" type="text/javascript">
 2 <!--
 3 function window.onload()
 4 {
 5     changeSkin('1');//当然 '1' 是从数据库或Session中读取的初始模版值。
 6 }
 7 function setDivTop(divID,topValue)
 8     {
 9         document.getElementById(divID).style.top = topValue;
10     }
11     function setDivLeft(divID,leftValue)
12     {
13         document.getElementById(divID).style.left = leftValue;
14     }
15 //这个JS方法就要自己写了,一个一个的将模块定位吧!
16 function changeSkin(skinNO)
17 {
18     switch(skinNO)
19     {
20     case"1":
21         setDivTop('divNews','100px');
22         setDivLeft('divNews','100px');
23         setDivTop('divMusic','300px');
24         setDivLeft('divMusic','300px');
25         break;
26         case"2":
27         setDivTop('divNews','300px');
28         setDivLeft('divNews','300px');
29         setDivTop('divMusic','100px');
30         setDivLeft('divMusic','100px');
31         break;
32     }
33 }
34 -->
35 </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 <html xmlns="http://www.w3.org/1999/xhtml" >
 3 <head>
 4     <title>测试</title>
 5     <link id="cssStyle" rel="stylesheet" type="text/css" />
 6     <script language="javascript" type="text/javascript">
 7     <!--
 8      function window.onload()
 9     {
10         //没有做数据库与Session的存储,所以初始值赋固定初始值,具体使用请用数据库与Session存储并初始化。
11         changeSkin('1');
12         changeSkin2('1');
13         changeCSS('css1.css');
14     }
15     function setDivTop(divID,topValue)
16     {
17         document.getElementById(divID).style.top = topValue;
18     }
19     function setDivLeft(divID,leftValue)
20     {
21         document.getElementById(divID).style.left = leftValue;
22     }
23     //这个JS方法就要自己写了,一个一个的将模块定位吧!
24     function changeSkin(skinNO)
25     {
26         switch(skinNO)
27         {
28             case"1":
29                 setDivTop('divWrite','70px');
30                 setDivLeft('divWrite','10px');
31                 setDivTop('divRead','70px');
32                 setDivLeft('divRead','300px');
33                 break;
34             case"2":
35                 setDivTop('divWrite','70px');
36                 setDivLeft('divWrite','300px');
37                 setDivTop('divRead','70px');
38                 setDivLeft('divRead','10px');
39                 break;
40          }
41     }
42     //这个方法模拟Ajax回调不同的模版,并且模拟更换图片
43     function changeSkin2(skinNO)
44     {
45         switch(skinNO)
46         {
47             case"1":
48                 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>";
49                 break;
50             case"2":
51                 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>";
52                 break;
53          }
54     }
55     function changeCSS(CSSLink)
56     {
57         cssStyle.href=CSSLink;
58     }
59     -->
60     </script>
61 </head>
62 <body>
63 <span class="font_12">点击动态改变DIV位置更换模版</span><br />
64 <input onclick="changeSkin('1');" type="button" value="Skin1" />&nbsp;&nbsp;<input onclick="changeSkin('2');" type="button" value="Skin2" />
65 <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>
66 <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>
67 <br /><br /><br /><br /><br /><br /><br />
68 <hr />
69 <span class="font_12">点击模拟Ajax回调方法更换模版</span><br />
70 <input onclick="changeSkin2('1');" type="button" value="Skin1" />&nbsp;&nbsp;<input onclick="changeSkin2('2');" type="button" value="Skin2" />
71 <div id="divAjax"></div>
72 <hr />
73 <span class="font_12">点击更换CSS</span><br />
74 <input onclick="changeCSS('css1.css')" type="button" value="CSS1" />&nbsp;&nbsp;<input onclick="changeCSS('css2.css')" type="button" value="CSS2" />
75 </body>
76 </html>


源码下载 changeSkin.rar

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

转载于:https://www.cnblogs.com/hzuIT/articles/911278.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jbl css-h15,JBL CSS8006BM 天花音箱

原标题&#xff1a;JBL CSS8006BM 天花音箱JBL CSS8006BM 天花音箱JBL Commercial CSS-8006BM吸顶扬声器为寻呼和背景音乐应用提供了出色的性能。即使在低敲击设置下&#xff0c;高灵敏度也能提供最大音量。产品特性/ PRODUCT FEATURES价格实惠&#xff0c;高品质的双锥天花扬声…

窗宽窗位改变图像_CT、MRI图像的影像诊断4大原则、5个步骤、3大阅片方法

来源:互联网第一节 影像诊断原则与步骤医学影像诊断包括&#xff38;线、CT、MRI、超声等&#xff0c;是重要的临床诊断方法之一。为了达到正确诊断&#xff0c;必须遵循一定的诊断原则和步骤&#xff0c;才能全面、客观地作出结论。一、影像诊断原则一般应掌握16字原则&#x…

EFCore 5 新特性 Savepoints

EFCore 5 中的 SavepointsIntroEFCore 5中引入了一个新特性&#xff0c;叫做 Savepoints&#xff0c;主要是事务中使用&#xff0c;个人感觉有点类似于 Windows 上的系统还原点&#xff0c;如果事务发生了异常&#xff0c;可以回滚到某一个还原点。Savepoints当我们在一个事务里…

KBuilderTools小灰熊歌词制作

KBuilderTools小灰熊歌词制作<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />——实战KbuilderTools利用KbuilderTools您可以自己制作卡拉OK字幕描述脚本&#xff0c;这样&#xff0c;您可以利用现成的音乐资源&#xff0c;随心…

安装默认报表服务器虚拟目录,本机模式安装默认配置 (Reporting Services)

“本机模式默认配置”指安装程序既安装报表服务器实例也对其进行配置的 Reporting Services 安装。 安装程序结束后&#xff0c;报表服务器便进入运行状态&#xff0c;可供使用。本机模式报表服务器作为一个独立的应用程序服务器运行。本机模式是默认模式。当选择本机模式默认配…

mongorepository查询条件_MongoRepository实现增删改查和复杂查询【支持的查询类型】...

与HibernateRepository类似&#xff0c;通过继承MongoRepository接口&#xff0c;我们可以非常方便地实现对一个对象的增删改查&#xff0c;要使用Repository的功能&#xff0c;先继承MongoRepository接口&#xff0c;其中T为仓库保存的bean类&#xff0c;TD为该bean的唯一标识…

python numpy数据类型_python numPy模块 与numpy里的数据类型、数据类型对象dtype

学习链接&#xff1a;http://www.runoob.com/numpy/numpy-tutorial.html 简介&#xff1a; numPy是python语言的一个扩展库&#xff0c;是一个运行非常快的数学库&#xff0c;主要用于数组计算。它支持大量的维度与数据运算还针对数组运算提供大量的数学函数库。它包含&#xf…

AWS 宣布创建“真正”开源的 Elasticsearch 分支

喜欢就关注我们吧&#xff01;Elasticsearch 和 Kibana 宣布变更开源许可证后引发了各方激烈讨论&#xff0c;但整起事件的另一个关键角色——被 Elastic 公司 CEO 发文怒斥的 AWS 却一直没有发声。然而就在今日&#xff0c;AWS 宣布将基于目前仍为开源状态的 Elasticsearch 和…

备忘贴,请勿看

今天看了一个黑鹰的动画教程&#xff0c;教程中提到了对白宫***&#xff0c;结果猜解出用户名和密码分别是admin和password。感觉不太对吧&#xff0c;[url]www.whitehouse.org[/url]就这么简单&#xff1f;估计有两种可能&#xff0c;一是教程作者先把网站黑掉了&#xff0c;再…

数控车椭圆编程实例带图_数控车床任意位置椭圆宏程序编程,内附实例程序!...

不在轴线上的椭圆宏程序编制也没有什么特殊的&#xff0c;只是改下偏置的数值罢了。椭圆的参数方程为&#xff1a;Xa*COSθYb*SINθ可改写为&#xff1a; #130*cos[#3] #3为参数方程对应的中角度#220*sin[#3]图中椭圆长半轴30mm&#xff0c;短半轴20mm&#xff0c;椭圆中心位置…

在服务器系统怎么设置地址怎么办,路由器怎么设置地址

路由器怎么设置地址路由器怎么设置地址呢?你是否也很想了解呢?今天我们就一起来看看相关内容吧!路由器怎么设置地址一、自动设置IP地址&#xff0c;使用DHCP服务器功能DHCP是路由器的一个特殊功能&#xff0c;使用DHCP功能可以避免因手工设置IP地址及子网掩码所产生的错误。(…

python迅雷_迅雷下载链接解析器。

1.[代码][Python]代码 Python语言: 迅雷下载链接解析器。 #!/usr/bin/env python #coding:utf-8 import os import base64 import sys def baseurl(argv): if len(argv) 2: url argv[1] else: print "Input Error!\n usage: %s url"%(argv [0]) sys.exit(1) if url…

祝贺 在线文件管理系统 访问量 超过500

到目前为止,<<在线文件管理系统>>一文已有超过500位网友访问过了&#xff0c;深感欣慰。祝贺一下&#xff0c;转载于:https://www.cnblogs.com/GISDEV/archive/2007/10/21/932384.html

dotNet Core 3.1 使用 Elasticsearch

Elasticsearch 是基于 Lucene 的搜索引擎。可以非常方便地实现分布式的全文搜索&#xff0c;本文介绍在 dotNet Core 3.1 中怎样使用 Elasticsearch 。版本dotnet Core &#xff1a;3.1Elasticsearch&#xff1a;7.6.1Kibana&#xff1a;7.6.1NEST&#xff1a;7.10.1Docker&am…

python笔试题 github_简单的python面试题,居然

晚上翻手机&#xff0c;看见一道网友发的python面试题求助帖&#xff0c;当时简单扫一眼就跳过了&#xff0c;但下来仔细想想觉得还蛮有趣&#xff0c;开电脑梳理下思路&#xff0c;因为没有官方答案&#xff0c;所以大家可以一起来做做&#xff0c;其中涉及的python知识点还是…

思科3550 IOS

两种方法升级思科3550 IOS 有两种方法做3550 IOS升级&#xff1a; int vlan 1 ip address 192.168.1.1 255.255.255.0 no shut int f0/1 no shut 默认的接口都VLAN 1下的 一使用.bin文件形式的IOS 1.copy tftp flash: 2.boot system flash:.bin 3.show boot 确定下次启动是用新…

沙洋有几个微服务群_集群 分布式 微服务

转自&#xff1a;https://blog.csdn.net/qq_37788067/article/details/79250623概念:集群是个物理形态&#xff0c;分布式是个工作方式。1.分布式&#xff1a;一个业务分拆多个子业务&#xff0c;部署在不同的服务器上2.集群&#xff1a;同一个业务&#xff0c;部署在多个服务器…

聊聊如何构建一支自驱团队(一)

每一个管理者都致力于构建一支自我驱动的团队&#xff0c;更有甚至&#xff0c;许多人公开宣称&#xff0c;在一支20人以下的团队其实是不用管理手段的&#xff0c;靠团队自驱就能实现团队的快速运作&#xff0c;但知易行难&#xff0c;如果不能根据组织特色灵活的运用管理手段…

java之for循环

/*for循环里i计数器需要用int声明* 本程序是计算*135。。。99。* i2处可以写成i,i 或者ii2如果间隔50 *显然不是一种好的方法*copyright paryjie qq:613972*/public class TextFor {public static void main(String[] args) {long result 0; //用result来存放结果。for(int i1…

action评测 osmo_前后双屏 大疆OSMO ACTION运动相机评测

2019年5月15日晚&#xff0c;大疆正式发布了旗下全新一代运动摄像机&#xff1a;OSMO ACTION。作为OSMO家族的新成员&#xff0c;这款产品的诞生其实一点也不意外&#xff0c;一方面是vlog视频的火爆加速了用户对拍摄设备的使用需求&#xff0c;另外一方面则是运动摄像机这块的…