google个性化主页拖拽实现修正版本

本文介绍了一个Google个性化主页的拖拽功能实现方案,包括拖拽模块的交互设计及其实现代码。通过使用JavaScript,实现了模块拖动、读取RSS等功能。

google个性化主页拖拽实现修正版本

忙了两个月的时间.又可以做自己的工作了.上次写的还有很多问题.改进..并完成了读取rss的动作.保存用户信息等功能
js主要由几个部分组成:
1.drag.js:负责拖动的事件
2.dom.js:负责拖动过程中页面节点的变化
3.request.js:主要是读取rss响应的工作


下面是drag.js的部分代码:

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*/

10vartx,ty;
11varstepX,stepY;
12
13//检查位置
14varaim,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
23functiondrag(parent,handle){
24varclone,isNew=false;
25varparentName=parent.getAttribute('id');
26parent.firstChild.onmousedown=function(){returnfalse;};
27handle.onselectstart=function(){returnfalse;};
28handle.onmousedown=function(a){
29aim=parent;
30varnewDiv=document.createElement("div");
31newDiv.setAttribute('id','clone');
32newDiv.style.display="none";
33document.body.appendChild(newDiv);
34clone=document.getElementById("clone");
35
36clone.style.width=300;
37clone.style.display="none";
38clone.style.position="absolute";
39clone.innerHTML=parent.innerHTML;
40
41clone.style.zIndex=10000;
42clone.style.filter="alpha(opacity=70)";//iehack
43clone.style.opacity=0.75;
44
45vard=document;if(!a)a=window.event;
46varx=a.layerX?a.layerX:a.offsetX,y=a.layerY?a.layerY:a.offsetY;
47
48if(parent.setCapture)
49parent.setCapture();
50elseif(window.captureEvents)
51window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
52
53d.onmousemove=function(a){
54parent=document.getElementById(parent.getAttribute('id'));
55if(!a)a=window.event;
56if(!a.pageX)a.pageX=a.clientX;
57if(!a.pageY)a.pageY=a.clientY;
58tx=a.pageX-x-document.body.scrollLeft,ty=a.pageY-y+document.body.scrollTop;
59
60clone.style.left=tx;
61clone.style.top=ty;
62clone.style.display="block";
63
64varaimLeft=aim.parentNode.offsetLeft;
65varaimRight=aim.parentNode.offsetLeft+aim.offsetWidth;
66varaimTop=aim.parentNode.offsetTop+aim.offsetTop-document.body.scrollTop;
67varaimbottom=aim.parentNode.offsetTop+aim.offsetTop+aim.offsetHeight-document.body.scrollTop;
68
69//这里检测处于目标当中则处理事件
70if(a.pageX>=aimLeft&&a.pageX<=aimRight
71&&a.pageY>=aimTop&&a.pageY<=aimbottom)
72{//处于当前块当中
73
74appendAfter(aim.getAttribute('id'),parent.getAttribute('id'),"Move_"+parent.getAttribute('id'));
75document.getElementById("Move_"+parent.getAttribute('id')).style.border="2pxdashed#cc2244";
76deleteNode(parent.getAttribute('id'));
77document.getElementById("Move_"+parent.getAttribute('id')).setAttribute('id',parentName);
78aim=document.getElementById(parent.getAttribute('id'));
79return;
80
81}

82else
83{//否则检测属于哪个模块
84for(vari=0;i<modules.length;i++)
85{
86module=document.getElementById("m_"+modules[i]);
87if(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{//处于当前块当中
90appendBefore(module.getAttribute('id'),parent.getAttribute('id'),"Move_"+parent.getAttribute('id'));
91document.getElementById("Move_"+parent.getAttribute('id')).style.border="2pxdashed#cc2244";
92deleteNode(parent.getAttribute('id'));
93document.getElementById("Move_"+parent.getAttribute('id')).setAttribute('id',parentName);
94aim=module;
95return;
96}

97}

98
99//不属于任何一个位置,属于当前区域之外
100varleft=document.getElementById("left");
101varcenter=document.getElementById("center");
102varright=document.getElementById("right");
103
104//左右属于left上下不属于left
105if(a.pageX>=left.offsetLeft&&a.pageX<=(left.offsetLeft+left.offsetWidth)
106&&a.pageY>=(left.offsetTop+left.offsetHeight+document.body.scrollTop))
107{
108appendLast("left",parent.getAttribute('id'),"Move_"+parent.getAttribute('id'));
109document.getElementById("Move_"+parent.getAttribute('id')).style.border="2pxdashed#cc2244";
110deleteNode(parent.getAttribute('id'));
111document.getElementById("Move_"+parent.getAttribute('id')).setAttribute('id',parentName);
112aim=document.getElementById(parent.getAttribute('id'));
113return;
114}

115
116if(a.pageX>=left.offsetLeft&&a.pageX<=(left.offsetLeft+left.offsetWidth)
117&&a.pageY<=left.offsetTop+document.body.scrollTop)
118{
119appendFirst("left",parent.getAttribute('id'),"Move_"+parent.getAttribute('id'));
120document.getElementById("Move_"+parent.getAttribute('id')).style.border="2pxdashed#cc2244";
121deleteNode(parent.getAttribute('id'));
122document.getElementById("Move_"+parent.getAttribute('id')).setAttribute('id',parentName);
123aim=document.getElementById(parent.getAttribute('id'));
124return;
125}

126
127//左右属于center上不属于center
128if(a.pageX>=center.offsetLeft&&a.pageX<=(center.offsetLeft+center.offsetWidth)
129&&a.pageY>=(center.offsetTop+center.offsetHeight+document.body.scrollTop))
130{
131appendLast("center",parent.getAttribute('id'),"Move_"+parent.getAttribute('id'));
132document.getElementById("Move_"+parent.getAttribute('id')).style.border="2pxdashed#cc2244";
133deleteNode(parent.getAttribute('id'));
134document.getElementById("Move_"+parent.getAttribute('id')).setAttribute('id',parentName);
135aim=document.getElementById(parent.getAttribute('id'));
136return;
137}

138
139if(a.pageX>=center.offsetLeft&&a.pageX<=(center.offsetLeft+center.offsetWidth)
140&&a.pageY<=center.offsetTop+document.body.scrollTop)
141{
142appendFirst("center",parent.getAttribute('id'),"Move_"+parent.getAttribute('id'));
143document.getElementById("Move_"+parent.getAttribute('id')).style.border="2pxdashed#cc2244";
144deleteNode(parent.getAttribute('id'));
145document.getElementById("Move_"+parent.getAttribute('id')).setAttribute('id',parentName);
146aim=document.getElementById(parent.getAttribute('id'));
147return;
148}

149
150//左右属于right上不属于right
151if(a.pageX>=right.offsetLeft&&a.pageX<=(right.offsetLeft+right.offsetWidth)
152&&a.pageY>=(right.offsetTop+right.offsetHeight+document.body.scrollTop))
153{
154appendLast("right",parent.getAttribute('id'),"Move_"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值