推荐:怎么用javascript进行拖拽(5)

作者:雪山老人 来源:sohotx.com 时间:2007-09-21 20:14:00 

Pulling It All Together

最后我们拥有了所有的drag/drop的脚本片断!下一个事情是我们将创建一个DOM处理.如果你不是很熟悉,请先阅读我的JavaScript Primer on DOM Manipulation.

下面的代码将创建container(容器),而且使任何一个需要drag/drop的item变成一个容器的item.代码在这个文章第二个demo的后面,它可以用户记录一个list(列表),定为一个导航窗口在左边或者右边,或者更多的函数你可以想到的.

下一步我们将通过"假代码"让reader看到真代码,下面为推荐:

1、当document第一次载入时,创建dragHelper DIV.dragHelper将给移动的item加阴影.真实的item没有被dragged,只是用了insertBefor和appendChild来移动了,我们隐藏了dragHelper

2、有了mouseDown与mouseUp函数.所有的操作会对应到当到iMouseDown的状态中,只有当mouse左键为按下时iMouseDown才为真,否则为假.

3、我们创建了全局变量DragDrops与全局函数CreateDragContainer.DragDrops包含了一系列相对彼此的容器.任何参数(containers)将通过CreatedcragContainer进行重组与序列化,这样可以自由的移动.CreateDragContainer函数也将item进行绑定与设置属性.

4、现在我们的代码知道每个item的加入,当我们移动处mouseMove,mouseMove函数首先会设置变量target,鼠标移动在上面的item,如果这个item在容器中(checked with getAttribute):

  • 运行一小段代码来改变目标的样式.创造rollover效果

  • 检查鼠标是否没有放开,如果没有

    • 设置curTarget代表当前item

    • 记录item的当前位置,如果需要的话,我们可以将它返回

    • 克隆当前的item到dragHelper中,我们可以移动带阴影效果的item.

    • item拷贝到dragHelper后,原有的item还在鼠标指针下,我们必须删除掉dragObj,这样脚本起作用,dragObj被包含在一个容器中.

    • 抓取容器中所有的item当前坐标,高度/宽度,这样只需要记录一次,当item被drag时,每随mouse移动,每移钟就会记录成千上万次.

  • 如果没有,不需要做任何事,因为这不是一个需要移动的item

5、检查curTarget,它应该包含一个被移动的item,如果存在,进行下面操作:

  • 开始移动带有阴影的item,这个item就是前文所创建的

  • 检查每个当前容器中的container,是否鼠标已经移动到这些范围内了

    • 我们检查看一下正在拖动的item是属于哪个container

    • 放置item在一个container的某一个item之前,或者整个container之后

    • 确认item是可见的

  • 如果鼠标不在container中,确认item是不可见了.

6、剩下的事就是捕捉mouseUp的事件了

标签:拖拽,javascript
0
投稿

猜你喜欢

  • 彻底终结浏览器Cache页面的解决方案

    2008-04-21 15:10:00
  • Linux操作系统中如何安装MySQL数据库

    2007-10-26 15:58:00
  • 渗透和改变 非洲web 2.0网站Logo

    2008-01-22 13:31:00
  • 小议javascript设计模式

    2009-10-09 13:31:00
  • msxml3.dll (0x80070005)拒绝访问 解决方法

    2010-03-11 21:26:00
  • Oracle 多行记录合并/连接/聚合字符串的几种方法

    2009-11-17 08:53:00
  • ASP UTF-8页面乱码+GB2312转UTF-8 +生成UTF-8格式的文件(编码)

    2011-04-19 11:15:00
  • 图文教程教你asp编译成dll组件

    2010-07-16 13:16:00
  • 网页设计中HTML常范的五个错误

    2008-04-22 18:14:00
  • 组件:Adodb.Stream 用法介绍

    2008-10-09 12:39:00
  • oracle 优化的一点体会

    2009-10-02 17:59:00
  • delete from 表名与truncate table 表名区别

    2012-11-30 20:31:37
  • asp截取字符串方法

    2009-02-09 13:30:00
  • asp长文章分页显示思路

    2007-08-23 13:54:00
  • When we`re only No.2, we try harder之淘宝节日LOGO互动设计小探讨

    2010-01-20 10:31:00
  • WEB前端开发经验总结 Ⅰ

    2008-06-12 12:23:00
  • 看看那些名牌LOGO的成长史

    2009-03-24 20:37:00
  • Asp 日期格式化问题

    2011-03-31 10:47:00
  • 思考关于搜索框的设计

    2008-12-09 18:17:00
  • 用VB编写ActiveX DLL实现ASP编程

    2008-10-21 21:28:00
  • asp之家 网络编程 m.aspxhome.com