- 主题
- 0
- 积分
- 0
- 贝壳
- 0 个
- 注册时间
- 2006-11-29
- 最后登录
- 2006-11-29
|
Javascript 如何实现对象的拖动
Javascript 如何实现对象的拖动
在线示例:
http://hfans.go3.icpcn.com/thysea/thysea.htm
解决思路
这个效果并不算常见,通常用于游戏或个人站点中。因为拖曳是靠鼠标来操作的,所以对鼠标的位置的捕获是问题的重点,然后才是根据鼠标的位置设置层的位置。
具体步骤:
1.在对象(层)上按下鼠标时,先捕获到需要拖曳的对象,然后获取或设置该对象的相关属性。 obj=event.srcElement
obj.setCapture()
z=obj.style.zIndex
obj.style.zIndex=100
x=event.offsetX
y=event.offsetY
down=true 2.开始拖曳时,捕获鼠标当前位置,并根据该数值设置被拖曳对象的位置。 obj.style.posLeft=document.body.scrollLeft+event.x-x
obj.style.posTop=document.body.scrollTop+event.y-y 3.拖曳完松开鼠标后,重设标志 down ,还原对象的 z-index并释放对它的鼠标捕捉。 down=false
obj.style.zIndex=z
obj.releaseCapture() 4.完整代码。 注意:只有 CSS 的 position 属性值为 absolute 的对象才能进行拖动操作。
提示:如果需要将拖曳组件化,可以参考第二部分HTC一节。
技巧:可以在 init() 函数中加一句 event.cancelBubble=true ,以取消在该对象上的事件冒泡。
试一试:读者可以试着实现移动其他对象,例如移动一个图片或文本框。
特别提示
在拖曳对象前必须确保该对象的为绝对定位的,把上面的完整代码保存就可以看到效果了,在实际就用时务必在对象上加上 onmousedown、onmousemove和onmouseup三个事件并触发相应函数。
特别说明
本例需要掌握的技巧比较多,捕捉鼠标,获取鼠标位置(相当于对象),释放鼠标捕捉,文档的滚动距离还有with 语句。
1. setCapture() 设置属于当前文档的对象的鼠标捕捉。
2. event.offsetX 设置或获取鼠标指针位置相对于触发事件的对象的 x 坐标。
3. event.offsetY 设置或获取鼠标指针位置相对于触发事件的对象的 y 坐标。
4. releaseCapture() 释放当前文档中对象的鼠标捕捉。
5. scrollLeft 设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离。
6. scrollTop 设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离。
7. with 为一个或多个语句设定默认对象。
相关示例
|
|