日期:2014-05-16  浏览次数:20803 次

雅虎、网易ajax标签导航效果的实现
经过多次改进,可以在普通网站上直接使用了,现在发布源程序下载(编码为utf-8,改为gb3212的方法是:用记事本打开,另存时选择相应的编码),希望对大家有用(虽然不一定实用)。
因为只是标签导航,所有内容还会在频道页中体现,所在全部用AJAX读取。
功能的实现思路:

S1??雅虎中国

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

S2? ? 网易
·鼠标滑过延时触发: onmouseover时var waitInterval=window.setTimeout("func();",300);onmouseout时clearTimeout(waitInterval);
·<A>块锁定、AJAX读取数据、数据暂存、窗口平滑收缩

其它功能:
·cookie记忆
·最后读取数据的服务器时间
·滑动门技术

在线效果
http://www.lorlo.com/tab.html

源码下载(见附件)

JS文件分析:

[Copy to clipboard] [ - ]
CODE:
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;
? ? }
}
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.length>1)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()