雅虎、网易ajax标签导航效果实现

2016-02-19 20:37 9 1 收藏

下面是个超简单的雅虎、网易ajax标签导航效果实现教程,图老师小编精心挑选推荐,大家行行好,多给几个赞吧,小编吐血跪求~

【 tulaoshi.com - Web开发 】

经过多次改进,可以在普通网站上直接使用了,现在发布源程序下载(编码为utf-8,改为gb3212的方法是:用记事本打开,另存时选择相应的编码),希望对大家有用(虽然不一定实用)。

因为只是标签导航,所有内容还会在频道页中体现,所在全部用AJAX读取。

功能的实现思路:

雅虎中国

单击触发
A块锁定:a{display:block;height:16px;}/*将A锁定为块级,再定义高度和宽度*/
再次单击弹出链接:在A标记的onclick事件中需要执行读取时,return false;否则return true;
AJAX读取数据
数据暂存
窗口平滑收缩
!--由于我看不懂雅虎的代码,所以使用了一些基本的代码去实现这些功能,可能效率不高,不过效果是出来了.--

网易

鼠标滑过延时触发: onmouseover时var waitInterval=window.setTimeout("func();",300);onmouseout时clearTimeout(waitInterval);
A块锁定、AJAX读取数据、数据暂存、窗口平滑收缩
其它功能:

cookie记忆
最后读取数据的服务器时间
滑动门技术
在线效果:
http://www.lorlo.com/tab.html

源码下载:点击这里下载源文件

JS文件分析:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

代码拷贝框
function getObject(objectId) {
     if(document.getElementById && document.getElementById(objectId)) {
    // W3C DOM
       return document.getElementById(objectId);
     }
     else if (document.all && document.all(objectId)) {
    // MSIE 4 DOM
       return document.all(objectId);
     }
     else if (document.layers && document.layers[objectId]) {
    // NN 4 DOM.. note: this won't find nested layers
       return document.layers[objectId];
     }
     else {
       return false;
    }
}

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

var responsecont;
var xmlHttp;
var xH=new Object();
var rqtp=new Object();
var dateStr,dStr;
var requestType;
var etype=0;
var newsstring;
var ajccache=new Object();
var url;
var MouseDelayTime=200;//鼠标感应延迟
var waitInterval;
var Browser = new Object();
Browser.isMozilla = (typeof document.implementation != 'undefined') && (typeof document.implementation.createDocument != 'undefined') && (typeof HTMLDocument!='undefined');
Browser.isIE = window.ActiveXObject ? true : false;
Browser.isFirefox = (navigator.userAgent.toLowerCase().indexOf("firefox")!=-1);
Browser.isOpera = (navigator.userAgent.toLowerCase().indexOf("opera")!=-1);

function SetCookie(name,value,expires){//写cookie
var exp=new Date();
exp.setTime(exp.getTime()+expires*60000);
document.cookie=name+"="+escape(value)+";expires="+exp.toGMTString();//+";domain=arkoo.com;path=/";
}
function readcookie(name){//读取cookie
var oRegex=new RegExp(name+'=([^;]+)','i');
var oMatch=oRegex.exec(document.cookie);
if(oMatch&&oMatch.length1)return unescape(oMatch[1]);
else return '';
}

function CreateXMLHttpRequest(){
   // Initialize Mozilla XMLHttpRequest object
   if (window.XMLHttpRequest){
       xmlHttp = new XMLHttpRequest();
   }
   // Initialize for IE/Windows ActiveX version
   else if (window.ActiveXObject) {
       try{
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");
       }
       catch (e){
            try{
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (e){newsstring = "div class='loading'Loading rquest content fail, Please try it again latter.../div";}
       }
   }
}

function getnews(tagid,x){
url = "tab/"+tagid+'_'+x+'.html';
var url2=url;
requestType = tagid;
if(ajccache[url]==null){
var loadstatustext="div class='loading'img src='tab/images/loading.gif' / Loading request content, please wait.../div";
rqtp[tagid]=tagid;
CreateXMLHttpRequest();  
var hdr=tagid;
   xH[tagid]=xmlHttp;
   if(etype==1)getObject(requestType+'_cnt').innerHTML = loadstatustext;
   xH[tagid].onreadystatechange = function(){
   // only if xmlHttp shows "complete"
   if (xH[tagid].readyState == 4){
      // only http 200 to process
      if (window.location.href.indexOf("http")==-1 || xH[tagid].status == 200){
         newsstring = xH[tagid].responseText;
    dateStr=xH[tagid].getResponseHeader("Date");
    dStr = new Date(dateStr);SetCookie('dStr',dStr,10000000);
         //inject centent to tab-pane
            shownews(rqtp[tagid],newsstring);
            ajccache[url2]=newsstring;
      }
   }
}
   xH[tagid].open("GET", url, true);
   xH[tagid].setRequestHeader("If-Modified-Since","0");
   xH[tagid].send(null);
}
else
{shownews(requestType,ajccache[url]);}
}

function shownews(requestType,newsstring){
//![CDATA[
    responsecont = getObject(requestType+'_cnt');
    responsecont.innerHTML = newsstring;
    getObject("pdate").innerHTML=dStr;
if(getObject("alta")){ata(getObject("alta"));hideText();}
//]]
}

function TabNews(tagid,x){
    var lim=getObject(tagid+"_mn").getElementsByTagName('li');
    var mnt=getObject(tagid+"_mn").getElementsByTagName('li').length;
    if(!mnt)mnt=4;
    for(var i=0;imnt;i++){
        if(i == (x-1)){
            if(i==0){
                lim[i].className="tabactive1";
            }
            else{
                lim[i].className="tabactive2";
                lim[i-1].getElementsByTagName('a')[0].style.background="url()";
            }
            lim[i].getElementsByTagName('a')[0].style.background="url(tab/images/tab_bgs.gif) right -60px no-repeat";
            try{getnews(tagid,x);}catch(e){alert(e);}
        }   
        else{
            lim[i].className="";
            lim[i].getElementsByTagName('a')[0].style.background="url(tab/images/tab_bgs.gif) right -88px no-repeat";       
        }
    }
}

var idn,tmpa,tmpat;
var aw="";
var rT;
function aet(tagid,etp){
var lis=getObject(tagid+"_mn").getElementsByTagName('li');
var wts=tagid+"_cnt";
var wnf=tagid+"info";
if(readcookie(tagid+"_cntd")=="none"){
    hiddenList(getObject(wts));
    maxh[wts]=readcookie(tagid+"_cnth");
    getObject("pdate").innerText=readcookie("dStr");
    }
else{
    if(parseInt(readcookie(wnf))1)
    TabNews(tagid,readcookie(wnf));//返回上次访问
    else
    TabNews(tagid,1);
    if(etp==1)aw=tagid+readcookie(wnf);
}
    for(var iy=0;iylis.length;iy++){
        with(lis[iy]){
        if(etp==0){
        lis[iy].onmouseover=function(){
            rT=attributes.getNamedItem('id').value.substring(0, attributes.getNamedItem('id').value.length-1);
            if(getObject(rT+'_cnt').style.display != "none"&&className!="") return;
            idn=parseInt(attributes.getNamedItem('id').value.substring(attributes.getNamedItem('id').value.length-1, attributes.getNamedItem('id').value.length));
            clearTimeout(waitInterval);
            waitInterval=window.setTimeout("etype=0;TabNews(rT,idn);if(getObject(rT+'_cnt').style.display == 'none')displayList(rT+'_cnt'); SetCookie(rT+'info',idn,10000000);SetCookie(rT+'_cntd','ture',10000000);",MouseDelayTime);
            }
        lis[iy].onmouseout=function(){if(getObject(rT+'_cnt').style.display != "none"&&className!="") return;clearTimeout(waitInterval);}
        }
        if(etp==1){
        lis[iy].onmouseover=function(){getElementsByTagName('a')[0].blur();}
        lis[iy].onclick=function(){
            idn=parseInt(attributes.getNamedItem('id').value.substring(attributes.getNamedItem('id').value.length-1, attributes.getNamedItem('id').value.length));
            rT=attributes.getNamedItem('id').value.substring(0, attributes.getNamedItem('id').value.length-1);
            if(getObject(rT+'_cnt').style.display != "none"&&(idn==1&&(this.className=="tabactive1")||aw==attributes.getNamedItem('id').value)) return true;
                if(getObject(rT+'_cnt').style.display == "none"){

                displayList(rT+'_cnt');SetCookie(rT+'_cntd','ture',10000000);
                }
            etype=1;
            TabNews(rT,idn);
            SetCookie(rT+'info',idn,10000000);
            aw=attributes.getNamedItem('id').value;
            getElementsByTagName('a')[0].blur();
            return false;
            }}}
    }
}

function ata(objid){
var as=objid.getElementsByTagName('a');
for(var i=0;ias.length;i++){
as[i].target="_self";
}
}

function GetUrlParam(paramName){    //获取URL参数的函数
    var oRegex = new RegExp('[?&]' + paramName + '=([^&]+)', 'i');
    var oMatch = oRegex.exec(window.location.search);
    if(oMatch && oMatch.length 1)
        return oMatch[1];
    else
        return '';
}

function hideText(){
if(document.getElementsByTagName("arkoo:title").length==0){
var upu=GetUrlParam("username");
var upa=GetUrlParam("articleid");
getObject("closeit").innerHTML='a href="http://cn.arkoo.com/diaryfiles/showpage.aspx?username='+upu+'&articleid='+upa+'" target="_blank"查看原文/a a href="tab.html" target="_self"×/a';
}
}

var maxh=new Object();
//显示内容框
function displayList(oid){   
    var h = 0; 
    var objid=getObject(oid);
          if(isNaN(parseInt(maxh[oid]))) var max_h = 210; // 容器的最大高度
        else
            var max_h = maxh[oid];
          var anim = function(){           
                    h += 50; // 每次递增50像素
                    if(h = max_h){
                    objid.style.height = max_h + "px";;
                    getObject('tab'+objid.attributes.getNamedItem('id').value).style.background="url(tab/images/tab_bgs.gif) 5px -113px no-repeat"; // 让图片标签改变背景          
                    if(tt){window.clearInterval(tt);}
                    }
                    else{
                objid.style.display="block";
                objid.style.height = h + "px";
                    }
            }
              
              var tt = window.setInterval(anim,2);     
}

// 隐藏列表框
function hiddenList(objid){
       var h = objid.offsetHeight;
           var anim = function(){
                 h -= 50; // 每次递减50像素
                 if(h = 5){
                 objid.style.display="none";
                   getObject('tab'+objid.attributes.getNamedItem('id').value).style.background="url(tab/images/tab_bgs.gif) -14px -114px no-repeat";
                   if(tt){window.clearInterval(tt);}
               }
               else{
                   objid.style.height = h + "px";
               }
           }
            
           var tt = window.setInterval(anim,2);
}

function showClassList(oid){
var objid=getObject(oid);
   if(objid.style.display == "none"){
    if(objid.getElementsByTagName("img").length==0)TabNews(oid.substring(0,oid.indexOf("_")),1);
       displayList(oid); // 显示内容框
    SetCookie(oid+'d',"ture",10000000);
   }
   else{
      if(isNaN(parseInt(maxh[oid]))){
         if(Browser.isFirefox){
            maxh[oid]=objid.offsetHeight;
      }
      else{
         maxh[oid]=objid.offsetHeight; // 内容容器的初始高度
          }
      }
      hiddenList(objid); // 隐藏内容框
    SetCookie(oid+'d',"none",10000000);SetCookie(oid+'h',maxh[oid],10000000);
   }
}
[Ctrl+A 全部选择 然后拷贝]

来源:http://www.tulaoshi.com/n/20160219/1624139.html

延伸阅读
标签: Web开发
现在.NET的Ajax组件确实不少了,微软的ajax extensions用起来很方便,一个UpdatePanel就可以搞定一切。不过,可能有些朋友更愿意自己来写。那么在.NET里,你是否知道ICallbackEventHandler呢? 大家应该都知道ASP.NET页面调用时的几种方式:Postback/Cross-page posting/Server transfer/Callback,如果你还不太了解,你可以看看MSDN:How to:...
以前也模仿者ireader实现了书架的效果,但是那种是使用listview实现的,并不好用。绝大多数都是用gridview实现的,网上这方面资料比较少,有些开源的电子书都是重点做了阅读,并没有像ireader和QQ阅读这样的书架效果。 书架这种效果我早就实现了,本来想做一个完美的电子书,但是因为自己的懒惰,仅仅持续了一两天,今天又找到了以前的代码分...
标签: Web开发
     我们写一个检测用户是否已经注册的小程序,这在每个用户注册页面上都可以用到。 前台Default.aspx: %@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" EnableViewState="false" % !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org...
标签: Web开发
     文章简介:现在.NET的Ajax组件确实不少了,微软的ajax extensions用起来很方便,一个UpdatePanel就可以搞定一切。不过,可能有些朋友更愿意自己来写。那么在.NET里,你是否知道ICallbackEventHandler呢? 现在.NET的Ajax组件确实不少了,微软的ajax extensions用起来很方便,一个UpdatePanel就可以搞定一切。不过...
标签: Web开发
修复了一些细节代码(支持持续按键事件) *项目名称:AJAX实现类Google Suggest效果 *作者:草履虫(也就是蓝色的ecma) *联系:caolvchong@gmail.com *时间:2007-7-7 *工具: DreamWeaver(写ASP),Aptana(写Javascript,HTML和CSS),Emeditor(写这篇文章),Access2003(数据库) *测试平台:Firefox2.0,IE6.0,IE7.0 *演示地址:http://finish.3322.org/sugge...

经验教程

437

收藏

60
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部