海纳百川,有容乃大
善于总结,积累软财富

【摘要】不再东奔西跑,Ajax一网打尽你关心的博客园RSS频道。便于浏览,轻松学习。
     
       1、Ajax源代码, Ajax核心技术XMLHttpRequest, XMLDocument
       2、拖拽使你随意排列各个频道
       3、cookie中保存排列的效果,记住你的个性
       4、把JS代码粘贴到你的博客园中。实现步骤:管理->选项->configure->页脚Html代码
       5、详细的注释说明,你一定看的懂

Ajax源代码
   
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Draging,what do you see!</title>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
<meta content="XML,XMLHttpRequest,web2.0" name="keywords">
<meta name="author" content="David">
<meta name="description" content="实现类似google.com/ig的功能">
<style>
*
{font-size:12px}
/*样式class*/
.dragTable
{
 font-size
:12px;
 border-top
:1px solid #3366cc;
 margin-bottom
: 10px;
 width
:100%;
 background-color
:#FFFFFF;
}

.dragTR
{
 cursor
:move;/*控制当鼠标移动到该行上时显示的样式*/
 color
:#7787cc;
 background-color
:#e5eef9;
 font-size
:16px;
 font-family
:"宋体";
 font-weight
:bold;
 letter-spacing
:1px;
}

/*利用tagName定义样式*/
td
{vertical-align:top;}
/*#表示对id=parentTable元素的样式定义*/
#parentTable
{
 border-collapse
:collapse;
 letter-spacing
:25px;
}

</style>
<script language="javascript">
<!--
/*AJAX*/
// JavaScript Document
function echo(obj1,html)
{
    $(obj1).innerHTML
=html;
}

function $(id)
{
    
return document.getElementById(id);    
}

function createXMLHttpRequest() {
    
var xmlHttpObj;
    
if (window.ActiveXObject) {
        xmlHttpObj 
= new ActiveXObject("Microsoft.XMLHTTP");
    }
else if (window.XMLHttpRequest) {
        xmlHttpObj 
= new XMLHttpRequest();
    }

    
return xmlHttpObj;
}


function parseResults(obj1,xmlHttp) {
var results = xmlHttp.responseXML;
var item = null;
var title;
var items = results.getElementsByTagName("item");
for(var i = 0; i < items.length; i++{
item 
= items[i];
 title 
= item.getElementsByTagName("title")[0].firstChild.nodeValue;

 
//clearPreviousResults();
 link2=item.getElementsByTagName("link")[0].firstChild.nodeValue;
 title
=str(title);
addListRow(title,link2,obj1);
}

}


function readrss(url,obj)

var xmlHttp=createXMLHttpRequest();
xmlHttp.onreadystatechange 
= handleStateChange;
xmlHttp.open(
"GET",url,true);
xmlHttp.send(
null);

    
//xmlHttp.abort();
    function handleStateChange()//FN2
    {
        
if(xmlHttp.readyState==2)
        
{
            
            echo(obj,
"正在提交数据,请稍等");
        }

        
else if(xmlHttp.readyState==4)
        
{
            
if(xmlHttp.status==200)
            
{
            
//echo(obj,"正在提交数据,请稍等");
            clearPreviousResults(obj);
            parseResults(obj,xmlHttp);

            }

        }

    }
//End FN2

}


function addListRow(title,link1,obj2)
{
//clearPreviousResults(obj2);
$(obj2).innerHTML+='<a href="'+link1+'" target="_blank" >'+title+'</a><br>';
}


function str(stri)
{
    
var strb;
    
if(stri.length>30)
    
{
        strb
=stri.substring(0,30)+'..';
    }

    
else
    
{
        strb
=stri;
    }

    
return strb;
}


function clearPreviousResults(obj3) {
    
while($(obj3).childNodes.length > 0{
    $(obj3).removeChild($(obj3).childNodes[
0]);
    }

}

//-->
</script>
<script language ="javascript" type="text/javascript">
//----设置Cookie------

        
function setCookie(name,value,domain)

        
{

            
var value = escape(value);

            
var nameString = "Drag_"+name + "=" + value; //给cookie变量增加前缀

            
var extime = new Date();            

            extime.setTime (extime.getTime () 
+ 315360000);

            
var expiryString = ";expires=" + extime.toGMTString();

            
var domainString = "";

            
var pathString = ";path=/";    

            
var setvalue = nameString + expiryString;

                document.cookie 
= setvalue;
        }


        
//----设置Cookie 结束------

        
//---读取Cookie-------

        
function getcookie (name) 
        
{
            
var CookieFound = false;
            
var start = 0;
            
var end = 0;
            
var CookieString = document.cookie;
            
            
var i = 0;
            name
="Drag_"+name; //增加前缀
            while (i <= CookieString.length) 
            
{
                start 
= i ;
                end 
= start + name.length;
                
if (CookieString.substring(start, end) == name)
                
{
                    CookieFound 
= true;
                    
break
                }

                i
++;
            }


            
if (CookieFound)
            
{
                start 
= end + 1;
                end 
= CookieString.indexOf(";",start);
                
if (end < start)
                    end 
= CookieString.length;
                
var getvalue = CookieString.substring(start, end);
                
return unescape(getvalue);
            }

            
return "";
        }


        
//---读取Cookie 结束-------
            
        
//检测是否禁用了cookie
        function isEnableCookie() {                
            
try {
            
var cookie_helper = new CookieHelper("");
            
var test_cookie_name = "test_cookie_name";
            
var test_cookie_value = "test_cookie_value";
            
var test_cookie_value_ret = "";
            
            cookie_helper.writeCookie(test_cookie_name,test_cookie_value);
            test_cookie_value_ret 
= cookie_helper.getCookieValue(test_cookie_name);            
            
            
if ( test_cookie_value_ret != null ) {
                cookie_helper.removeCookie(test_cookie_name);
                
return true;
            }
 else {                
                
return false;
            }
                    
        }
 catch (error) {            
            
return false;
        }

    }
    


</script>
<script language="javascript" >
function init()
{

readrss('http:
//www.cnblogs.com/rss.aspx','div1');
readrss('http://www.cnblogs.com/beginner/rss.aspx','div2');
readrss('http://www.cnblogs.com/pick/rss.aspx','div3');
readrss('http://www.cnblogs.com/expert/rss.aspx','div4');
readrss('http://www.cnblogs.com/book/rss.aspx','div5');

setTimeout(
"init()","180000");
}

</script>
</head>
<body onLoad="init()">
<table border="0" cellpadding="0" cellspacing="10" width="798" height=500 id="parentTable">
<tr >
 
<td width="266" valign="top">
    
<table id ="st1" border=1 class="dragTable" cellspacing="0">
    
<tr><td>首页原创.NET区    div1</td></tr>
    
<tr><td id="div1"></td></tr>
    
</table>
    
<table style="display:none" class="dragTable"><tr><td></td></tr></table>
    
<table id="st2" border=1 class="dragTable" cellspacing="0">
    
<tr><td>.NET新手区    div2</td></tr>
    
<tr><td id="div2"></td></tr>
    
</table>
    
 
</td>
 
<td width="266">
           
<table id="st3" border=1 class="dragTable" cellspacing="0">
    
<tr><td>精华区    div3</td></tr>
    
<tr><td id="div3"></td></tr>
    
</table>
  
<table style="display:none" class="dragTable"><tr><td></td></tr></table>

    
<table id="st4" border=1 class="dragTable" cellspacing="0">
    
<tr><td>专家区       div4</td></tr>
    
<tr><td id="div4" ></td></tr>
    
</table>
           
</td>
 
<td width="266">
    
<table id="st5" border=1 class="dragTable" cellspacing="0">
    
<tr><td>读书心得区      div5</td></tr>
    
<tr><td id="div5"></td></tr>
    
</table>
    
<table style="display:none" class="dragTable"><tr><td></td></tr></table>
    
<table id="st6" border=1 class="dragTable" cellspacing="0">
    
<tr><td>Google  AdSense</td></tr>
    
<tr align=center>
        
<td id="div6">
            
<table cellSpacing=0 cellPadding=0 border=0 >
            
<tr>
            
<td align=center>
                                                 
<script type="text/javascript"><!--
google_ad_client 
= "pub-3677762604679039";
google_ad_width 
= 120;
google_ad_height 
= 240;
google_ad_format 
= "120x240_as_rimg";
google_cpa_choice 
= "CAAQ1PT8hwIaCLQJm6CuvvAZKNzI6n4";
google_ad_channel 
= "6380057915";
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>                                   </td>
            
</tr>
            
</table>
               
</td></tr>
    
</table>
    
<table style="display:none" class="dragTable" ID="Table1"><tr><td></td></tr></table>
    
<table id="st7" border=1 class="dragTable" cellspacing="0">
    
<tr><td>Google Adsense    div7</td></tr>
    
<tr><td id="div7">
    
<table cellSpacing=0 cellPadding=0 width=260 border=0 ID="Table2">
    
<tr>
    
<td align="center">
<!--Google Adsense2-->
<script type="text/javascript"><!--
google_ad_client 
= "pub-3677762604679039";
google_ad_width 
= 120;
google_ad_height 
= 240;
google_ad_format 
= "120x240_as_rimg";
google_cpa_choice 
= "CAAQ8fOujAIaCOun9lVDwMlHKJPM93M";
google_ad_channel 
= "1950414295";
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><!--Google Adsense2 end-->
         
</td>
            
</tr>
              
</table>

    
</td>
    
</tr>
    
</table>
 
</td>
</tr>
</table>
<hr>
<script language="javascript" defer>
<!--
/*
实现拖拽的代码

*/
 
var draged=false;
     tdiv
=null;

function dragStart(){
 ao
=event.srcElement; //设置或获取触发事件的对象,这里是可以移动的table对象的TD对象
 if((ao.tagName=="TD")||(ao.tagName=="TR"))
    ao
=ao.offsetParent;//获取定义对象offsetTop和offsetLeft属性的容器对象的引用,这里是获取的被移动的table对象。
 else 
    
return;

 draged
=true;
 tdiv
=document.createElement("div");
 tdiv.innerHTML
=ao.outerHTML;
 tdiv.style.display
="block";
 tdiv.style.position
="absolute";
 tdiv.style.filter
="alpha(opacity=70)";
 tdiv.style.cursor
="move";
 tdiv.style.width
=ao.offsetWidth;//被移动table对象的高度
 tdiv.style.height=ao.offsetHeight;

 tdiv.style.top
=getInfo(ao).top;
 tdiv.style.left
=getInfo(ao).left;

 document.body.appendChild(tdiv);

 lastX
=event.clientX;
 lastY
=event.clientY;
 lastLeft
=tdiv.style.left;
 lastTop
=tdiv.style.top;

 
try{
  ao.dragDrop(); 
//初始化拖曳事件
 }
catch(e){}

}


function draging(){//重要:判断MOUSE的位置
 if(!draged)return;
 
var tX=event.clientX;
 
var tY=event.clientY;

 tdiv.style.left
=parseInt(lastLeft)+tX-lastX;//
 tdiv.style.top=parseInt(lastTop)+tY-lastY;

 
for(var i=0;i<parentTable.cells.length;i++){//for1
  var parentCell=getInfo(parentTable.cells[i]);
  
if(tX>=parentCell.left&&tX<=parentCell.right&&tY>=parentCell.top&&tY<=parentCell.bottom)//判断鼠标的位置是否移动到父表的某个列中
    {//if1
        var subTables=parentTable.cells[i].getElementsByTagName("table");
        
if(subTables.length==0)//如果鼠标所在的列中没有没有子表,直接增加子对象(table)
        {
            
if(tX>=parentCell.left&&tX<=parentCell.right&&tY>=parentCell.top&&tY<=parentCell.bottom)
                
{parentTable.cells[i].appendChild(ao);}
        
break;
        }


        
for(var j=0;j<subTables.length;j++)//列中存在子表的处理
        {
            
var subTable=getInfo(subTables[j]);
            
if(tX>=subTable.left&&tX<=subTable.right&&tY>=subTable.top&&tY<=subTable.bottom)
            
{
                parentTable.cells[i].insertBefore(ao,subTables[j]);
                
break;
            }
else{
                parentTable.cells[i].appendChild(ao);
            }
 
        }

   }
//if1
 }
//for1

}


function dragEnd(){
 
if(!draged)return;
 draged
=false;
 
//---save sub table position---
 var pttyle="";
  
for(var i=0;i<parentTable.cells.length;i++){//for1
         var subTables=parentTable.cells[i].getElementsByTagName("table");
        
        
if(subTables.length==0)
        
{
            pttyle
+="|";
            
break;
        }
else{
            
for(var j=0;j<subTables.length;j++)//列中存在子表的处理
            {
                
if(subTables[j].className!="dragTable"continue//这里仅仅对className==dragTable的表处理,排除组织页面中使用的table
                pttyle+=subTables[j].id+","+subTables[j].rows[0].cells[0].innerText+":";
            }

            pttyle
+="|";
        }

 }
//for1
 setCookie("pttyle",pttyle,"");
//---save sub table position end---
 mm=ff(150,15);//
}


function getInfo(o){//取得对象的绝对坐标
 var to=new Object();
     to.left
=to.right=to.top=to.bottom=0;

 
var twidth=o.offsetWidth;
 
var theight=o.offsetHeight;

 
while(o!=document.body){
    to.left
+=o.offsetLeft;
    to.top
+=o.offsetTop;
    o
=o.offsetParent;
 }

  to.right
=to.left+twidth;
  to.bottom
=to.top+theight;
 
return to;
}


function ff(aa,ab){//用于恢复位置,来自该死的GOOGLE网站;aa/ab其值越大恢复的速度越快
 var ac=parseInt(getInfo(tdiv).left);
 
var ad=parseInt(getInfo(tdiv).top);

 
var ae=(ac-getInfo(ao).left)/ab;
 
var af=(ad-getInfo(ao).top)/ab;

 
return setInterval(function(){if(ab<1){
       clearInterval(mm);
       tdiv.removeNode(
true);
       ao
=null;
       
return
      }

     ab
--;
     ac
-=ae;
     ad
-=af;
     tdiv.style.left
=parseInt(ac)+"px";
     tdiv.style.top
=parseInt(ad)+"px"
    }

,aa
/ab)
}


function inint(){//初始化
    /*根据cookie组织父表*/
    
var pttyle=getcookie("pttyle");
    
    
if (pttyle.length>0){
            
//*****获得父表中所有的子表对象***
            var ctCount=0//计数器
            var stObjects=new Array();//保存子表对象
                        
            
for(var i=0;i<parentTable.cells.length;i++){
                
var subTables=parentTable.cells[i].getElementsByTagName("table");//获得子表            
                for(var j=0;j<subTables.length;j++){                    
                    stObjects[ctCount]
=subTables[j];
                    ctCount
++;                
                    parentTable.cells[i].removeChild(subTables[j]);    
//删除列中的子表对象            
                }

            }

            
            
//读取cookie中子表对象id            
            var tempCells=pttyle.split("|");//因为格式为pttyle=stid,stt:stid,stt:|stid,stt:stid,stt:|
                    
            
//begin for2
            for(var i=0; i<tempCells.length-1;i++)//拆成数组时存在一个多余的元素,故循环减去1 
            {
                
var tempSTs=tempCells[i].split(":");                
                
for (var j=0;j<tempSTs.length-1;j++)//遍历子表信息,
                {                
                    
for(var n=0;n<stObjects.length;n++)//从子表对象数组中查询子表对象
                    {
                        
if(tempSTs[j].indexOf(stObjects[n].id)!=-1)//id值存在
                        {
                            parentTable.cells[i].appendChild(stObjects[n]);
break;
                        }
                        
                    }

                }

            }
//end for2                
    }
//pttyle.length>0 End
    
    
/*根据cookie组织父表结束*/
    
    
/*设置拖拽的样式和事件*/
    
for(var i=0;i<parentTable.cells.length;i++){
    
var subTables=parentTable.cells[i].getElementsByTagName("table");//获得子表
        for(var j=0;j<subTables.length;j++){
        
if(subTables[j].className!="dragTable"continue;
        subTables[j].rows[
0].className="dragTR";//给行添加表示可以移动的样式
        subTables[j].rows[0].attachEvent("onmousedown",dragStart);//将指定函数绑定到事件,以便每当该事件在对象上触发时都调用该函数
        subTables[j].attachEvent("ondrag",draging);//将draging函数邦定到进行拖曳操作时,在源对象上持续触发的事件。
        subTables[j].attachEvent("ondragend",dragEnd);//ondragend事件:当用户在拖曳操作结束后释放鼠标时在源对象上触发。
        }

    }
    
    
/*设置拖拽的样式和事件结束*/
}

inint();
</script>
</body>
</html>

   【效果图
              

【关键字】Ajax 初探,Ajax实现拖拽效果,Ajax实战,RSS聚合技术

声明】源代码中含有Google Adsense 的代码,您可选择删除。了解Google Adsense ,请点击
posted on 2007-02-06 13:46  海纳百川  阅读(2374)  评论(14编辑  收藏  举报

首页原创.NET区 div1
.NET新手区 div2
精华区 div3
专家区 div4
读书心得区 div5
百度主题实验室
百度主题推广 div7

-->