ajax实现tab切换效果

ajax的HelloWorld会写了,也算是我进门了,慢慢来吧,这次准备写一个tab切换的效果,以前都是页面初次加载,就将所有帧的内容都读出来,然后触发事件,让层显示或者消失就ok。这次想来个ajax版的,也就是页面初次加载只加载第一帧的内容,然后鼠标挪上去切换帧异步读取数据,就这么简单。

程序设计思路:

1,页面初次加载,绑定window.onload事件,异步读取works_0.xml文件中的内容并显示,一帧一个xml文件,帧切换其实就是读取不同的xml文件。

2,鼠标挪上去,触发一个异步请求,读取相应的xml文件

3,解析xml文件内容

4,拼接html字符串

5,使用innerHTML方法显示到指定div中

容易忽略的问题:

1,鼠标挪到当前的标签,就不应该触发请求,应当做个判断

2,每一帧的请求只请求一次,然后将数据保存起来,触发请求前应当判断,如是第一次触发,请求;如是非第一次则不请求,直接将第一次请求保存的结果显示。我是在页面使用了一个hidden,将结果保存到了它的Value值当中,当然也有其他办法,以后再说。

3,加载xml字符串进行处理的时候,IE和FF的方法不一样,应当注意,我在网上搜了一段通用函数用上了^_^

4,好像没有什么了.......

html代码:

view plaincopy to clipboardprint?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
        <meta http-equiv="Content-Type" content="text/html" charset="utf-8" /> 
        <meta http-equiv="pragma" content="no-cache"> 
        <title>myTino月度优秀会员作品展示</title> 
        <link type="text/css" href="css/reset.css" mce_href="css/reset.css" rel="stylesheet" media="all" /> 
        <link type="text/css" href="css/default.css" mce_href="css/default.css" rel="stylesheet" media="all" /> 
        <!--[if IE 7]> 
            <link type="text/css" href="css/ie7.css" mce_href="css/ie7.css" rel="stylesheet" media="screen" /> 
        <![endif]--> 
        <!--[if IE 6]> 
            <link type="text/css" href="css/ie6.css" mce_href="css/ie6.css" rel="stylesheet" media="screen" /> 
        <![endif]--> 
        <mce:script type="text/javascript" src="js/works.js" mce_src="js/works.js"></mce:script> 
    <?php include_once("../header_index.php");?> 
        <div id="wrap"> 
            <div id="header"></div> 
            <div id="bodyContent"> 
                <div id="tabs" class="clearfix"> 
                    <ul> 
                        <li class="curTab" οnmοuseοver="changeTab(this,'works_0');"><h2>最近7天优秀作品</h2& gt;</li> 
                        <li οnmοuseοver="changeTab(this,'works_1');"><h2>本月度优秀作品</h2></li> 
                        <li οnmοuseοver="changeTab(this,'works_2');"><h2>随机推荐作品</h2></li> 
                    </ul> 
                </div> 
                <div id="worksContent"> 
                        <ul id="works" class="works clearfix"> 
                             
                        </ul> 
                </div> 
            </div> 
            <div id="footer"></div> 
        <?php require_once("../../templates/foot.php")?> 
        </div> 
        <input type="hidden" id="works_0" value="" /> 
        <input type="hidden" id="works_1" value="" /> 
        <input type="hidden" id="works_2" value="" /> 
        <?php include_once("../../commonphp/google_analytics.php");?> 
         
    </body> 
</html> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html" charset="utf-8" />
        <meta http-equiv="pragma" content="no-cache">
        <title>myTino月度优秀会员作品展示</title>
        <link type="text/css" href="css/reset.css" mce_href="css/reset.css" rel="stylesheet" media="all" />
        <link type="text/css" href="css/default.css" mce_href="css/default.css" rel="stylesheet" media="all" />
        <!--[if IE 7]>
            <link type="text/css" href="css/ie7.css" mce_href="css/ie7.css" rel="stylesheet" media="screen" />
        <![endif]-->
        <!--[if IE 6]>
            <link type="text/css" href="css/ie6.css" mce_href="css/ie6.css" rel="stylesheet" media="screen" />
        <![endif]-->
        <mce:script type="text/javascript" src="js/works.js" mce_src="js/works.js"></mce:script>
    <?php include_once("../header_index.php");?>
        <div id="wrap">
            <div id="header"></div>
            <div id="bodyContent">
                <div id="tabs" class="clearfix">
                    <ul>
                        <li class="curTab" οnmοuseοver="changeTab(this,'works_0');"><h2>最近7天优秀作品</h2& gt;</li>
                        <li οnmοuseοver="changeTab(this,'works_1');"><h2>本月度优秀作品</h2></li>
                        <li οnmοuseοver="changeTab(this,'works_2');"><h2>随机推荐作品</h2></li>
                    </ul>
                </div>
                <div id="worksContent">
                        <ul id="works" class="works clearfix">
                          
                        </ul>
                </div>
            </div>
            <div id="footer"></div>
        <?php require_once("../../templates/foot.php")?>
        </div>
        <input type="hidden" id="works_0" value="" />
        <input type="hidden" id="works_1" value="" />
        <input type="hidden" id="works_2" value="" />
        <?php include_once("../../commonphp/google_analytics.php");?>
      
    </body>
</html>

 
css样式:

view plaincopy to clipboardprint?
/* General */ 
body {  
    text-align:center;  
    background:#F1F1F1;  
    width:980px;  
}  
/* layerout*/ 
#wrap {  
    width:980px;  
    margin:10px auto;  
    text-align:left;  
}  
#header {  
    background:url(../images/works_header.gif);  
    height:180px;  
}  
#bodyContent {  
    margin-bottom:10px;  
    border:solid 1px #ccc;  
}  
.last {  
    margin-right:0;  
}  
/* clear both */ 
.clearfix {display: inline-block;}  
/* Hides from IE-mac /*/ 
* html .clearfix {height: 1%;}  
.clearfix {display: block;}  
/* End hide from IE-mac */ 
.clearfix:after {  
    content: ".";  
    display: block;  
    height: 0;  
    clear: both;  
    visibility: hidden 
}  
/* End layerout*/ 
/* @navigation */ 
#tabs {  
    display:inline-block;  
}  
#tabs li {  
    background:url("../images/tab_bg.gif") repeat-x;  
    float:left;  
    width:200px;  
    height:33px;  
    border-left:solid 1px #fff;  
    border-right:solid 1px #cecece;  
    cursor:pointer;  
}  
#tabs h2 {  
    height:33px;  
    line-height:33px;  
    text-align:center;  
}  
#tabs .curTab {  
    background:#ffffff;  
    border-right:0;  
    font-weight:bold;  
}  
/* End navigation */ 
/* @worksContent */ 
#worksContent {  
    padding:15px;  
    _padding:10px;  
    background-color:#fff;  
}  
#works li {  
    float:left;  
    width:186px;  
    height:134px;  
    margin:5px;  
    _margin:4px;  
    padding:20px;  
    background:url("../images/work_bg.gif");  
}  
#worksContent .works {  
     
}  
/* End worksContent */ 
/* General */
body {
    text-align:center;
    background:#F1F1F1;
    width:980px;
}
/* layerout*/
#wrap {
    width:980px;
    margin:10px auto;
    text-align:left;
}
#header {
    background:url(../images/works_header.gif);
    height:180px;
}
#bodyContent {
    margin-bottom:10px;
    border:solid 1px #ccc;
}
.last {
    margin-right:0;
}
/* clear both */
.clearfix {display: inline-block;}
/* Hides from IE-mac /*/
* html .clearfix {height: 1%;}
.clearfix {display: block;}
/* End hide from IE-mac */
.clearfix:after {
    content: ".";
    display: block;
    height: 0;
    clear: both;
    visibility: hidden
}
/* End layerout*/
/* @navigation */
#tabs {
    display:inline-block;
}
#tabs li {
    background:url("../images/tab_bg.gif") repeat-x;
    float:left;
    width:200px;
    height:33px;
    border-left:solid 1px #fff;
    border-right:solid 1px #cecece;
    cursor:pointer;
}
#tabs h2 {
    height:33px;
    line-height:33px;
    text-align:center;
}
#tabs .curTab {
    background:#ffffff;
    border-right:0;
    font-weight:bold;
}
/* End navigation */
/* @worksContent */
#worksContent {
    padding:15px;
    _padding:10px;
    background-color:#fff;
}
#works li {
    float:left;
    width:186px;
    height:134px;
    margin:5px;
    _margin:4px;
    padding:20px;
    background:url("../images/work_bg.gif");
}
#worksContent .works {
  
}
/* End worksContent */

js代码:

view plaincopy to clipboardprint?
/** 
 * @author liuyong 
 */ 
var xmlHttp;  
var xmlDoc;  
var works_0 ='';  
var works_1 ='';  
var works_2 ='';    //标志变量,存储第一次请求拼好的content_str  
var divId = '';  
function loadXmlStr(strxml){ //兼容IE和FF的加载xml字符串的通用函数  
    try{  
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");  
        xmlDoc.loadXML(strxml);  
    }  
    catch(e){  
        var oParser=new DOMParser();  
        xmlDoc=oParser.parseFromString(strxml,"text/xml");  
    }  
        return xmlDoc;  
}  
function createXMLHttpRequest(){  
    if(window.ActiveXObject){  /*在IE下初始化XMLHttpRequest对象 */ 
        try{  
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); //新版本IE     
        }catch(otherMicrosoft){  
            try{  
                //较老版本的 Internet Explorer  
                xmlHttp= new ActiveXObject("Microsoft.XMLHTTP");  
            }catch(failed){  
                // 还是失败,那么就认为创建失败……  
                   xmlHttp= false;  
            }  
        }  
    }else if(window.XMLHttpRequest){  
        xmlHttp = new XMLHttpRequest();  
    }  
    if(!xmlHttp){  
        alert("创建 XMLHttpRequest 对象失败!");      
    }  
}  
function startRequest(fileName){  
         
        divId = fileName;  
        createXMLHttpRequest();  
        try{  
            if(document.getElementById(fileName).value == '' ){  
                xmlHttp.onreadystatechange = handleStateChange;  
                xmlHttp.open("GET", "data/" + fileName + ".xml", true);  
                xmlHttp.send(null);  
            }else{  
                document.getElementById("works").innerHTML = document.getElementById(fileName).value;  
            }                 
        }catch(exception){  
            alert("您要访问的资源不存在!");  
        }     
}  
function handleStateChange(){  
    if(xmlHttp.readyState == 4){  
        if (xmlHttp.status == 200 || xmlHttp.status == 0){  
            // 取得XML的DOM对象  
            //alert(xmlHttp.responseText);  
            xmlDoc = loadXmlStr(xmlHttp.responseText);  
            // 取得XML文档的根  
            var root = xmlDoc.documentElement;  
            try 
            {  
                // 取得<works>结果  
                var works = root.getElementsByTagName('work');  
                //alert(works.length);  
                var userid;  
                var foldID;  
                var workid;  
                var content_str = '';  //拼好的HTML字符串  
                for(i = 0;i<works.length;i++){  
                    userid = works[i].getElementsByTagName("userid")[0].firstChild.nodeValue;  
                    foldID = works[i].getElementsByTagName("foldID")[0].firstChild.nodeValue;  
                    workid = works[i].getElementsByTagName("workid")[0].firstChild.nodeValue;  
                    content_str = content_str + '<li><a href="/" mce_href="/""http://www.mytino.com/cn/profile/profile_works_detail.php?workid=' + workid + '&foldID=' + foldID + '&type=2&userid=' + userid + '/" target=/"_blank/"><img src="/" mce_src="/""images/'+workid+'.jpg/" alt=/"/" /></a></li>';  
                     
                }  
                document.getElementById("works").innerHTML = content_str;  
                document.getElementById(divId).value = content_str;  
                divId = '';  
            }catch(exception)  
            {  
                alert("异常情况!");  
            }  
        }  
    }else{  
        document.getElementById("works").innerHTML = '<img src="/" mce_src="/""images/loading.gif/" />';  
    }  
     
}  
function changeText(str,element){  
    if(navigator.appName.indexOf("Explorer") > -1){  
        document.getElementById(element).innerText = str;  
    }else{  
        document.getElementById(element).textContent = str;  
    }  
}  
var arr_li;  
function changeTab(arg,con){  
    arr_li = document.getElementById("tabs").getElementsByTagName("li");  
    for(var i = 0;i<arr_li.length;i++){  
        arr_li[i].className = 'none';         
    }  
    arg.className = 'curTab';  
    if(arg.className == 'curTab'){  
        if (con == 'works_0') {  
            startRequest('works_0');  
        }else if(con == 'works_1'){  
            startRequest('works_1');  
        }else if(con == 'works_2'){  
            startRequest('works_2');  
        }     
    }     
}  
window.onload = function(){  
    startRequest('works_0');  

/**
 * @author liuyong
 */
var xmlHttp;
var xmlDoc;
var works_0 ='';
var works_1 ='';
var works_2 ='';    //标志变量,存储第一次请求拼好的content_str
var divId = '';
function loadXmlStr(strxml){ //兼容IE和FF的加载xml字符串的通用函数
    try{
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.loadXML(strxml);
    }
    catch(e){
        var oParser=new DOMParser();
        xmlDoc=oParser.parseFromString(strxml,"text/xml");
    }
        return xmlDoc;
}
function createXMLHttpRequest(){
    if(window.ActiveXObject){  /*在IE下初始化XMLHttpRequest对象 */
        try{
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); //新版本IE  
        }catch(otherMicrosoft){
            try{
                //较老版本的 Internet Explorer
                xmlHttp= new ActiveXObject("Microsoft.XMLHTTP");
            }catch(failed){
                // 还是失败,那么就认为创建失败……
                   xmlHttp= false;
            }
        }
    }else if(window.XMLHttpRequest){
        xmlHttp = new XMLHttpRequest();
    }
    if(!xmlHttp){
        alert("创建 XMLHttpRequest 对象失败!");   
    }
}
function startRequest(fileName){
      
        divId = fileName;
        createXMLHttpRequest();
        try{
            if(document.getElementById(fileName).value == '' ){
                xmlHttp.onreadystatechange = handleStateChange;
                xmlHttp.open("GET", "data/" + fileName + ".xml", true);
                xmlHttp.send(null);
            }else{
                document.getElementById("works").innerHTML = document.getElementById(fileName).value;
            }              
        }catch(exception){
            alert("您要访问的资源不存在!");
        }  
}
function handleStateChange(){
    if(xmlHttp.readyState == 4){
        if (xmlHttp.status == 200 || xmlHttp.status == 0){
            // 取得XML的DOM对象
            //alert(xmlHttp.responseText);
            xmlDoc = loadXmlStr(xmlHttp.responseText);
            // 取得XML文档的根
            var root = xmlDoc.documentElement;
            try
            {
                // 取得<works>结果
                var works = root.getElementsByTagName('work');
                //alert(works.length);
                var userid;
                var foldID;
                var workid;
                var content_str = '';  //拼好的HTML字符串
                for(i = 0;i<works.length;i++){
                    userid = works[i].getElementsByTagName("userid")[0].firstChild.nodeValue;
                    foldID = works[i].getElementsByTagName("foldID")[0].firstChild.nodeValue;
                    workid = works[i].getElementsByTagName("workid")[0].firstChild.nodeValue;
                    content_str = content_str + '<li><a href="/" mce_href="/""http://www.mytino.com/cn/profile/profile_works_detail.php?workid=' + workid + '&foldID=' + foldID + '&type=2&userid=' + userid + '/" target=/"_blank/"><img src="/" mce_src="/""images/'+workid+'.jpg/" alt=/"/" /></a></li>';
                  
                }
                document.getElementById("works").innerHTML = content_str;
                document.getElementById(divId).value = content_str;
                divId = '';
            }catch(exception)
            {
                alert("异常情况!");
            }
        }
    }else{
        document.getElementById("works").innerHTML = '<img src="/" mce_src="/""images/loading.gif/" />';
    }
  
}
function changeText(str,element){
    if(navigator.appName.indexOf("Explorer") > -1){
        document.getElementById(element).innerText = str;
    }else{
        document.getElementById(element).textContent = str;
    }
}
var arr_li;
function changeTab(arg,con){
    arr_li = document.getElementById("tabs").getElementsByTagName("li");
    for(var i = 0;i<arr_li.length;i++){
        arr_li[i].className = 'none';      
    }
    arg.className = 'curTab';
    if(arg.className == 'curTab'){
        if (con == 'works_0') {
            startRequest('works_0');
        }else if(con == 'works_1'){
            startRequest('works_1');
        }else if(con == 'works_2'){
            startRequest('works_2');
        }  
    }  
}
window.onload = function(){
    startRequest('works_0');
}

xml文件:

works_0.xml

<?xml version="1.0" encoding="utf-8"?>
<root>
    <work>
        <userid>97026</userid>
        <foldID>3893</foldID>
        <workid>8379</workid>
    </work>
    <work>
        <userid>97026</userid>
        <foldID>3893</foldID>
        <workid>8378</workid>
    </work>
    <work>
        <userid>97026</userid>
        <foldID>3893</foldID>
        <workid>8374</workid>
    </work>
    <work>
        <userid>97026</userid>
        <foldID>3893</foldID>
        <workid>8369</workid>
    </work>
    <work>
        <userid>358611</userid>
        <foldID>14049</foldID>
        <workid>33964</workid>
    </work>
    <work>
        <userid>358611</userid>
        <foldID>14046</foldID>
        <workid>33960</workid>
    </work>
    <work>
        <userid>358611</userid>
        <foldID>14046</foldID>
        <workid>33959</workid>
    </work>
    <work>
        <userid>358542</userid>
        <foldID>14033</foldID>
        <workid>33951</workid>
    </work>   
</root>

works_1.xml

<?xml version="1.0" encoding="utf-8"?>
<root>
    <work>
        <userid>358457</userid>
        <foldID>14027</foldID>
        <workid>33946</workid>
    </work>
    <work>
        <userid>358413</userid>
        <foldID>14025</foldID>
        <workid>33936</workid>
    </work>
    <work>
        <userid>358413</userid>
        <foldID>14025</foldID>
        <workid>33935</workid>
    </work>
    <work>
        <userid>358413</userid>
        <foldID>14025</foldID>
        <workid>33934</workid>
    </work>
    <work>
        <userid>358458</userid>
        <foldID>14024</foldID>
        <workid>33931</workid>
    </work>
    <work>
        <userid>233263</userid>
        <foldID>8049</foldID>
        <workid>33927</workid>
    </work>
    <work>
        <userid>162003</userid>
        <foldID>14016</foldID>
        <workid>33925</workid>
    </work>
    <work>
        <userid>162003</userid>
        <foldID>14015</foldID>
        <workid>33919</workid>
    </work>
</root>

works_2.xml

<?xml version="1.0" encoding="utf-8"?>
<root>
    <work>
        <userid>358818</userid>
        <foldID>14082</foldID>
        <workid>34050</workid>
    </work>
    <work>
        <userid>358818</userid>
        <foldID>14082</foldID>
        <workid>34045</workid>
    </work>
    <work>
        <userid>196211</userid>
        <foldID>5503</foldID>
        <workid>11983</workid>
    </work>
    <work>
        <userid>92431</userid>
        <foldID>13756</foldID>
        <workid>33296</workid>
    </work>
    <work>
        <userid>358704</userid>
        <foldID>14089</foldID>
        <workid>34060</workid>
    </work>
    <work>
        <userid>359066</userid>
        <foldID>14094</foldID>
        <workid>34070</workid>
    </work>
    <work>
        <userid>358656</userid>
        <foldID>14061</foldID>
        <workid>33998</workid>
    </work>
    <work>
        <userid>359206</userid>
        <foldID>14104</foldID>
        <workid>34089</workid>
    </work>
</root>

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/liuyong0818/archive/2009/04/21/4098062.aspx

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值