google个性化主页拖拽实现修正版本
忙了两个月的时间.又可以做自己的工作了.上次写的还有很多问题.改进..并完成了读取rss的动作.保存用户信息等功能
js主要由几个部分组成:
1.drag.js:负责拖动的事件
2.dom.js:负责拖动过程中页面节点的变化
3.request.js:主要是读取rss响应的工作
下面是drag.js的部分代码:
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->1

/**//*2
**************************************3
*AuthorByBlackSoul*4
*2006-08-05*5
*BlackSoulylk@gmail.com*6
*QQ:9136194*7
*http://blacksoul.cnblogs.cn*8
**************************************9
*/10
vartx,ty;11
varstepX,stepY;12

13
//检查位置14
varaim,module;15

16

/**//*-----调用函数之前需要初始化aim为当前模块-----//17
*varmodules=[1,2,3,4,5,6];18
*其中数字代表模块id号.19
*主要位置div从左到右为"left","center","right"20
*页面当中模块名称为m_1,m_2,m_3
.21
*/22

23

functiondrag(parent,handle)
{24
varclone,isNew=false;25
varparentName=parent.getAttribute('id');26

parent.firstChild.onmousedown=function()
{returnfalse;};27

handle.onselectstart=function()
{returnfalse;};28

handle.onmousedown=function(a)
{29
aim=parent;30
varnewDiv=document.createElement("div");31
newDiv.setAttribute('id','clone');32
newDiv.style.display="none";33
document.body.appendChild(newDiv);34
clone=document.getElementById("clone");35

36
clone.style.width=300;37
clone.style.display="none";38
clone.style.position="absolute";39
clone.innerHTML=parent.innerHTML;40

41
clone.style.zIndex=10000;42
clone.style.filter="alpha(opacity=70)";//iehack43
clone.style.opacity=0.75;44

45
vard=document;if(!a)a=window.event;46
varx=a.layerX?a.layerX:a.offsetX,y=a.layerY?a.layerY:a.offsetY;47

48
if(parent.setCapture)49
parent.setCapture();50
elseif(window.captureEvents)51
window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);52

53

d.onmousemove=function(a)
{54
parent=document.getElementById(parent.getAttribute('id'));55
if(!a)a=window.event;56
if(!a.pageX)a.pageX=a.clientX;57
if(!a.pageY)a.pageY=a.clientY;58
tx=a.pageX-x-document.body.scrollLeft,ty=a.pageY-y+document.body.scrollTop;59

60
clone.style.left=tx;61
clone.style.top=ty;62
clone.style.display="block";63

64
varaimLeft=aim.parentNode.offsetLeft;65
varaimRight=aim.parentNode.offsetLeft+aim.offsetWidth;66
varaimTop=aim.parentNode.offsetTop+aim.offsetTop-document.body.scrollTop;67
varaimbottom=aim.parentNode.offsetTop+aim.offsetTop+aim.offsetHeight-document.body.scrollTop;68

69
//这里检测处于目标当中则处理事件70
if(a.pageX>=aimLeft&&a.pageX<=aimRight71
&&a.pageY>=aimTop&&a.pageY<=aimbottom)72


{//处于当前块当中73

74
appendAfter(aim.getAttribute('id'),parent.getAttribute('id'),"Move_"+parent.getAttribute('id'));75
document.getElementById("Move_"+parent.getAttribute('id')).style.border="2pxdashed#cc2244";76
deleteNode(parent.getAttribute('id'));77
document.getElementById("Move_"+parent.getAttribute('id')).setAttribute('id',parentName);78
aim=document.getElementById(parent.getAttribute('id'));79
return;80

81
}82
else83


{//否则检测属于哪个模块84
for(vari=0;i<modules.length;i++)85


{86
module=document.getElementById("m_"+modules[i]);87
if(a.pageX>=module.parentNode.offsetLeft&&a.pageX<=(module.parentNode.offsetLeft+module.offsetWidth)88
&&a.pageY>=(module.parentNode.offsetTop+module.offsetTop-document.body.scrollTop)&&a.pageY<=(module.parentNode.offsetTop+module.offsetTop+module.offsetHeight-document.body.scrollTop))89


{//处于当前块当中90
appendBefore(module.getAttribute('id'),parent.getAttribute('id'),"Move_"+parent.getAttribute('id'));91
document.getElementById("Move_"+parent.getAttribute('id')).style.border="2pxdashed#cc2244";92
deleteNode(parent.getAttribute('id'));93
document.getElementById("Move_"+parent.getAttribute('id')).setAttribute('id',parentName);94
aim=module;95
return;96
}97
}98

99
//不属于任何一个位置,属于当前区域之外100
varleft=document.getElementById("left");101
varcenter=document.getElementById("center");102
varright=document.getElementById("right");103

104
//左右属于left上下不属于left105
if(a.pageX>=left.offsetLeft&&a.pageX<=(left.offsetLeft+left.offsetWidth)106
&&a.pageY>=(left.offsetTop+left.offsetHeight+document.body.scrollTop))107


{108
appendLast("left",parent.getAttribute('id'),"Move_"+parent.getAttribute('id'));109
document.getElementById("Move_"+parent.getAttribute('id')).style.border="2pxdashed#cc2244";110
deleteNode(parent.getAttribute('id'));111
document.getElementById("Move_"+parent.getAttribute('id')).setAttribute('id',parentName);112
aim=document.getElementById(parent.getAttribute('id'));113
return;114
}115

116
if(a.pageX>=left.offsetLeft&&a.pageX<=(left.offsetLeft+left.offsetWidth)117
&&a.pageY<=left.offsetTop+document.body.scrollTop)118


{119
appendFirst("left",parent.getAttribute('id'),"Move_"+parent.getAttribute('id'));120
document.getElementById("Move_"+parent.getAttribute('id')).style.border="2pxdashed#cc2244";121
deleteNode(parent.getAttribute('id'));122
document.getElementById("Move_"+parent.getAttribute('id')).setAttribute('id',parentName);123
aim=document.getElementById(parent.getAttribute('id'));124
return;125
}126

127
//左右属于center上不属于center128
if(a.pageX>=center.offsetLeft&&a.pageX<=(center.offsetLeft+center.offsetWidth)129
&&a.pageY>=(center.offsetTop+center.offsetHeight+document.body.scrollTop))130


{131
appendLast("center",parent.getAttribute('id'),"Move_"+parent.getAttribute('id'));132
document.getElementById("Move_"+parent.getAttribute('id')).style.border="2pxdashed#cc2244";133
deleteNode(parent.getAttribute('id'));134
document.getElementById("Move_"+parent.getAttribute('id')).setAttribute('id',parentName);135
aim=document.getElementById(parent.getAttribute('id'));136
return;137
}138

139
if(a.pageX>=center.offsetLeft&&a.pageX<=(center.offsetLeft+center.offsetWidth)140
&&a.pageY<=center.offsetTop+document.body.scrollTop)141


{142
appendFirst("center",parent.getAttribute('id'),"Move_"+parent.getAttribute('id'));143
document.getElementById("Move_"+parent.getAttribute('id')).style.border="2pxdashed#cc2244";144
deleteNode(parent.getAttribute('id'));145
document.getElementById("Move_"+parent.getAttribute('id')).setAttribute('id',parentName);146
aim=document.getElementById(parent.getAttribute('id'));147
return;148
}149

150
//左右属于right上不属于right151
if(a.pageX>=right.offsetLeft&&a.pageX<=(right.offsetLeft+right.offsetWidth)152
&&a.pageY>=(right.offsetTop+right.offsetHeight+document.body.scrollTop))153


{154
appendLast("right",parent.getAttribute('id'),"Move_"
本文介绍了一个Google个性化主页的拖拽功能实现方案,包括拖拽模块的交互设计及其实现代码。通过使用JavaScript,实现了模块拖动、读取RSS等功能。

3772

被折叠的 条评论
为什么被折叠?



