zoukankan
html css js c++ java
类似google拖拽效果的原理实现(来自codeproject)
页面内容很简单 有三个div 一个用来拖拽的id是“a”,另外三个都是用来放置“a”的;
实现原理不难:
窗口打开后调用MakeElementDraggable函数。
MakeElementDraggable函数功能如下:
把a的鼠标按下事件的响应函数指向 InitiateDrag,它将重新定位拖拽窗口为鼠标所在位置,然后鼠标移动事件用drag函数响应,鼠标放开事件用drop函数响应,这两个函数自己看吧,就是实现动态拖拽和在指定区域放置id为a的窗口。
代码下载。
页面代码
<!
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
<
html
xmlns
="http://www.w3.org/1999/xhtml"
>
<
head
>
<
title
>
Drag and Drop Demo
</
title
>
<
style
type
="text/css"
>
.dragElement
{
}
{
background-color
:
Green
;
position
:
absolute
;
z-index
:
5000
;
display
:
block
;
padding-top
:
30px
;
}
.dropZone
{
}
{
background-color
:
Blue
;
width
:
300px
;
height
:
300px
;
position
:
absolute
;
top
:
100px
;
right
:
200px
;
}
.highlightDropZone
{
}
{
background-color
:
Yellow
;
}
.DefaultDropZoneColor
{
}
{
background-color
:
Blue
;
}
</
style
>
</
head
>
<
body
>
<
form
id
="form1"
runat
="server"
>
<
div
>
<
div
id
="a"
class
="dragElement"
>
拖拽窗口
</
div
>
<
div
id
="dZone"
style
="position:absolute; top:100px; right:200; 300px; height:300px"
class
="DefaultDropZoneColor"
>
放开区域 1
</
div
>
<
div
id
="dZone2"
class
="DefaultDropZoneColor"
style
="position:absolute; top:500px; right:200px; 300px; height:300px"
>
放开区域 2
</
div
>
<
div
id
="dZone3"
class
="DefaultDropZoneColor"
style
="position:absolute; top:300;right:100px; 100px; height:200px"
>
放开区域 3
</
div
>
</
div
>
</
form
>
</
body
>
</
html
>
<
script
language
="javascript"
type
="text/javascript"
>
var
dropZoneArray
=
new
Array(
5
);
dropZoneArray[
0
]
=
"
dZone
"
;
dropZoneArray[
1
]
=
"
dZone2
"
;
dropZoneArray[
2
]
=
"
dZone3
"
;
var
mouseState
=
'up';
function
MakeElementDraggable(obj)
{
var
startX
=
0
;
var
startY
=
0
;
function
InitiateDrag(e)
{
var
evt
=
e
||
window.event;
startX
=
parseInt(evt.clientX);
startY
=
parseInt(evt.clientY);
obj.style.top
=
parseInt(startY)
+
'px';
obj.style.left
=
parseInt(startX)
+
'px';
document.onmousemove
=
Drag;
document.onmouseup
=
Drop;
return
false
;
}
function
Drop(e)
{
var
evt
=
e
||
window.event;
//
check that if we are in the drop zone
if
(IsInDropZone(evt))
{
document.onmouseup
=
null
;
document.onmousemove
=
null
;
}
}
function
Drag(e)
{
//
only drag when the mouse is down
var
dropZoneObject;
var
evt
=
e
||
window.event;
obj.style.top
=
evt.clientY
+
'px';
obj.style.left
=
evt.clientX
+
'px';
//
Check if we are in the drop Zone
if
(IsInDropZone(evt))
{
dropZoneObject
=
evt.srcElement;
dropZoneObject.className
=
'highlightDropZone';
}
else
{
ResetColor();
}
}
a.onmousedown
=
InitiateDrag;
}
function
ResetColor()
{
document.getElementById(
"
dZone
"
).className
=
'DefaultDropZoneColor';
document.getElementById(
"
dZone2
"
).className
=
'DefaultDropZoneColor';
document.getElementById(
"
dZone3
"
).className
=
'DefaultDropZoneColor';
}
function
IsInDropZone(evt)
{
var
result
=
false
;
var
obj
=
evt.srcElement;
//
iterate through the array and find it the id exists
for
(i
=
0
; i
<
dropZoneArray.length; i
++
)
{
if
(obj.id
==
dropZoneArray[i])
{
result
=
true
;
break
;
}
}
return
result;
}
//
make the element draggable
window.onload
=
MakeElementDraggable(document.getElementById(
"
a
"
));
</
script
>
查看全文
相关阅读:
ActiveMq主从机制
Calling handler.OnEndpointsUpdate报错原因
【Android Studio安装部署系列】二十二、Android studio自动生成set、get方法
【Android Studio安装部署系列】二十一、Android studio将项目上传到github中
【Android Studio安装部署系列】二十、Android studio如何将so文件添加到svn中
【Android Studio安装部署系列】十九、Android studio使用SVN
【Android Studio安装部署系列】十八、Android studio更换APP应用图标
【Android Studio安装部署系列】十七、Android studio引用第三方库、jar、so、arr文件
【Android Studio安装部署系列】十六、Android studio在layout目录下新建子目录
【Android Studio安装部署系列】十五、Android studio添加Assets目录
原文地址:https://www.cnblogs.com/ddr888/p/674630.html
最新文章
【转载】MyEclipse使用指南(精简版)
【转载】CodeLite汉化
在 Hibernate 中inverse的属性
【SSH进阶之路】Hibernate系列——总结篇(九)
【SSH进阶之路】Hibernate映射——多对多关联映射(八)
【SSH进阶之路】Hibernate映射——一对多关联映射(七)
【SSH进阶之路】Hibernate映射——一对一双向关联映射(六)
【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)
【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)
【SSH进阶之路】Hibernate基本映射(三)
热门文章
【SSH进阶之路】Hibernate搭建开发环境+简单实例(二)
【SSH进阶之路】Hibernate基本原理(一)
查看ntp时间是否同步
Got permission denied while trying to connect to the Docker daemon socket at
was cached in the local repository, resolution will not be reattempted until the update interval of fintech has elapsed or updates are forced
kubernetes 存储卷
Harbor配置https认证
源码安装Nginx加TCP反向代理模块
The connection to the server localhost:8080 was refused
cAdvisor+Prometheus+Grafana监控docker
Copyright © 2011-2022 走看看