google个性化主页拖拽实现修正版本
2007-01-09 16:46
681 查看
google个性化主页拖拽实现修正版本
忙了两个月的时间.又可以做自己的工作了.上次写的还有很多问题.改进..并完成了读取rss的动作.保存用户信息等功能js主要由几个部分组成:
1.drag.js:负责拖动的事件
2.dom.js:负责拖动过程中页面节点的变化
3.request.js:主要是读取rss响应的工作
下面是drag.js的部分代码:
drag.js的全部代码
1
/**//*
2
**************************************
3
* Author By BlackSoul *
4
* 2006-08-05 *
5
* BlackSoulylk@gmail.com *
6
* QQ:9136194 *
7
* http://blacksoul.cnblogs.cn *
8
**************************************
9
*/
10
var tx,ty;
11
var stepX,stepY;
12
13
//检查位置
14
var aim,module;
15
16
/**//*-----调用函数之前需要初始化aim为当前模块-----//
17
* var modules=[1,2,3,4,5,6];
18
* 其中数字代表模块id号.
19
* 主要位置div从左到右为"left","center","right"
20
* 页面当中模块名称为m_1,m_2,m_3
.
21
*/
22
23
function drag(parent,handle)
{
24
var clone,isNew=false;
25
var parentName = parent.getAttribute('id');
26
parent.firstChild.onmousedown=function()
{return false;};
27
handle.onselectstart = function()
{return false;};
28
handle.onmousedown=function(a)
{
29
aim = parent;
30
var newDiv = 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)";//ie hack
43
clone.style.opacity = 0.75;
44
45
var d=document;if(!a)a=window.event;
46
var x=a.layerX?a.layerX:a.offsetX,y=a.layerY?a.layerY:a.offsetY;
47
48
if(parent.setCapture)
49
parent.setCapture();
50
else if(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
var aimLeft= aim.parentNode.offsetLeft;
65
var aimRight = aim.parentNode.offsetLeft + aim.offsetWidth;
66
var aimTop = aim.parentNode.offsetTop + aim.offsetTop - document.body.scrollTop;
67
var aimbottom = aim.parentNode.offsetTop + aim.offsetTop + aim.offsetHeight - document.body.scrollTop;
68
69
//这里检测处于目标当中则处理事件
70
if(a.pageX >= aimLeft && a.pageX <= aimRight
71
&& 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="2px dashed #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
else
83
{//否则检测属于哪个模块
84
for(var i = 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="2px dashed #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
var left = document.getElementById("left");
101
var center = document.getElementById("center");
102
var right = document.getElementById("right");
103
104
//左右属于left 上下不属于left
105
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="2px dashed #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="2px dashed #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 上不属于center
128
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="2px dashed #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="2px dashed #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 上不属于right
151
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_"+parent.getAttribute('id'));
155
document.getElementById("Move_"+parent.getAttribute('id')).style.border="2px dashed #cc2244";
156
deleteNode(parent.getAttribute('id'));
157
document.getElementById("Move_"+parent.getAttribute('id')).setAttribute('id',parentName);
158
aim = document.getElementById(parent.getAttribute('id'));
159
return;
160
}
161
162
if(a.pageX >= right.offsetLeft && a.pageX <= (right.offsetLeft + right.offsetWidth)
163
&& a.pageY <= right.offsetTop + document.body.scrollTop)
164
{
165
appendFirst("right",parent.getAttribute('id'),"Move_"+parent.getAttribute('id'));
166
document.getElementById("Move_"+parent.getAttribute('id')).style.border="2px dashed #cc2244";
167
deleteNode(parent.getAttribute('id'));
168
document.getElementById("Move_"+parent.getAttribute('id')).setAttribute('id',parentName);
169
aim = document.getElementById(parent.getAttribute('id'));
170
return;
171
}
172
}
173
174
};
175
176
d.onmouseup=function(a)
{
177
if(!a)a=window.event;
178
if(!a.pageX)a.pageX=a.clientX;
179
if(!a.pageY)a.pageY=a.clientY;
180
tx=a.pageX-x,ty=a.pageY-y;
181
182
clone.style.left = tx;
183
clone.style.top = ty;
184
clone.style.zIndex = 1;
185
clone.style.filter="alpha(opacity=100)";//ie hack
186
clone.style.opacity = 1;
187
188
if(parent.releaseCapture)
189
parent.releaseCapture();
190
else if(window.captureEvents)
191
window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
192
d.onmousemove=null;
193
d.onmouseup=null;
194
195
document.getElementById(parent.getAttribute('id')).style.border="1px dashed #999999";
196
//重新注册新节点事件
197
drag(document.getElementById(parent.getAttribute('id')),document.getElementById(handle.getAttribute('id')));
198
document.body.removeChild(clone);
199
// alert("readRss.aspx?left="+getPosition("left")+"&right="+getPosition("right")+"¢er="+getPosition("center"));
200
send("Repos.aspx?left="+getPosition("left")+"&right="+getPosition("right")+"¢er="+getPosition("center"));
201
};
202
};
203
}
已经发现的bug:以上代码可以在ff下面运行,但是有一个关于坐标的问题,ff的层总是把第一行的y轴当作它自己的y轴..不解..这个是一个bug,
页面当中调用需要注册层,并且设定三个框架层("left","center","right"),如下:
<div style="position:relative; width:935px">
<form id="Form1" runat="server" action="#" style="border:0px">
<asp:TextBox ID="tbRssFeeds" runat="server" EnableViewState="False"></asp:TextBox>
<asp:Button ID="addFeeds" runat="server" Text="添加RSS" OnClick="addFeeds_Click" EnableViewState="False" />
</form>
<div id="left" style="border:0px">
<asp:Literal ID="leftSub" runat="server"></asp:Literal>
</div>
<div id="center" style="border:0px">
<asp:Literal ID="centerSub" runat="server"></asp:Literal>
</div>
<div id="right" style="border:0px">
<asp:Literal ID="rightSub" runat="server"></asp:Literal>
</div>
<div style="position:relative; width:935px">
<hr/>
Author:BlackSoul
</div>
</div>
页面框架好的了之后就是注册事件
<script language="javascript" type="text/javascript">
modules=[1138572788,1028124506,1400846246,1102454511,1498854668,1446864555,1177172025,1126220777];window.onload=function()
{drag(document.getElementById('m_1138572788'),document.getElementById('mh_1138572788'));send_request("getRss.aspx?url=http://game.yesky.com/index.xml",'c_1138572788');drag(document.getElementById('m_1028124506'),document.getElementById('mh_1028124506'));send_request("getRss.aspx?url=http://myhard.yesky.com/index.xml",'c_1028124506');drag(document.getElementById('m_1400846246'),document.getElementById('mh_1400846246'));send_request("getRss.aspx?url=http://community.csdn.net/IndexPage/HotLife/HotLife.xml",'c_1400846246');drag(document.getElementById('m_1102454511'),document.getElementById('mh_1102454511'));send_request("getRss.aspx?url=http://rss.xinhuanet.com/rss/it.xml",'c_1102454511');drag(document.getElementById('m_1498854668'),document.getElementById('mh_1498854668'));send_request("getRss.aspx?url=http://www.techtarget.com.cn/index.xml",'c_1498854668');drag(document.getElementById('m_1446864555'),document.getElementById('mh_1446864555'));send_request("getRss.aspx?url=http://column.chinabyte.com/index.xml",'c_1446864555');drag(document.getElementById('m_1177172025'),document.getElementById('mh_1177172025'));send_request("getRss.aspx?url=http://e.yesky.com/index.xml",'c_1177172025');drag(document.getElementById('m_1126220777'),document.getElementById('mh_1126220777'));send_request("getRss.aspx?url=http://telecom.chinabyte.com/index.xml",'c_1126220777');};
window.onerror = function()
{return true;}
</script>
基本实现了google的定制rss,但是google的module还不能加载...下一步准备实现..
拖拽的代码效果可以查看http://blacksoulylk.googlepages.com/drag.html
aspx读取RSS可以到http://blacksoulylk.googlepages.com/PersonalPage.rar去下载
在下的.net功底比较差,读取rss不知有什么好的方法没有..希望各位大侠不吝赐教
找到一个.net免费空间部署成功:http://www.onlinegf.com/users/blacksoul/ 添加你自己的rss就可以构建你的个性化页面了
----------------------------------
http://www.google.com
http://www.dodoor.cn/
相关文章推荐
- google个性化主页拖拽实现修正版本
- MicroSoft Live 和GOOGLE个性主页 页面元素可拖拽放置的实现原理
- MicroSoft Live 和GOOGLE个性主页 页面元素可拖拽放置的实现原理
- MicroSoft Live 和GOOGLE个性主页 页面元素可拖拽放置的实现原理(2)
- MicroSoft Live 和GOOGLE个性主页 页面元素可拖拽放置的实现原理
- MicroSoft Live 和GOOGLE个性主页 页面元素可拖拽放置的实现原理(2)
- MicroSoft Live 和GOOGLE个性主页 页面元素可拖拽放置的实现原理
- Google 个性化主页类似,如何保存最后的布局三
- 使用jquery 实现 仿google 的智能提示输入框功能 (改进版本)
- HTML5附件拖拽上传drop & google.gears实现代码
- js应用-实现博客个性主页布局拖拽功能
- js应用-实现博客个性主页布局拖拽功能
- 转google上搜来的一篇,《软件插件技术的原理与实现》,修正了格式,算是做了好事。
- JQuery实现个性化,可以拖拽 自定义自己的界面(一)
- javascript实现类似google和msn space的拖拽
- 纯JS模仿Google个性化主页
- 试用了一下google的个性化主页
- Google Protocol Buffer 的各语言实现版本
- Google 个性化主页类似,如何保存最后的布局
- 个性化Google主页