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

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

Dropping an Item

前面的例子目的很简单,就是拖拽item到我们希望到的地方.我们经常还有其他目的如删除item,比如我们可以将item拖到垃圾桶里,或者其他页面定义的位置.

很不幸,我们有一个很大的难题,当我们拖拽,item会在鼠标之下,比如mouseove,mousedown,mouseup或者其他mouse action.如果我们拖拽一个item到垃圾桶上,鼠标信息还在item上,不在垃圾桶上.

怎么解决这个问题呢?有几个方法可以来解决.第一,这是以前比较推荐的,我们在移动鼠标时item会跟随鼠标,并占用了mouseover/mousemove等鼠标事件,我们不这样做,只是让item跟随着鼠标,并不占用mouseover等鼠标事件,这样会解决问题,但是这样并不好看,我们还是希望item能直接跟在mouse下.

另一个选择是不做item的拖拽.你可以改变鼠标指针来显示需要拖拽的item,然后放在鼠标释放的位置.这个解决方案,也是因为美学原因不予接受.

最后的解决方案是,我们并不去除拖拽效果.这种方法比前两种繁杂许多,我们需要定义我们需要释放目标的列表,当鼠标释放时,手工去检查释放的位置是否是在目标列表位置上,如果在,说明是释放在目标位置上了.


/*
All code from the previous example is needed with the exception
of the mouseUp function which is replaced below
*/

var dropTargets = [];

function addDropTarget(dropTarget){
 dropTargets.push(dropTarget);
}

function mouseUp(ev){
 ev           = ev || window.event;
 var mousePos = mouseCoords(ev);

 for(var i=0; i<dropTargets.length; i++){
  var curTarget  = dropTargets[i];
  var targPos    = getPosition(curTarget);
  var targWidth  = parseInt(curTarget.offsetWidth);
  var targHeight = parseInt(curTarget.offsetHeight);

  if(
   (mousePos.x > targPos.x)                &&

   (mousePos.x < (targPos.x + targWidth))  &&
   (mousePos.y > targPos.y)                &&
   (mousePos.y < (targPos.y + targHeight))){
    // dragObject was dropped onto curTarget!
  }
 }

 dragObject   = null;
}


运行代码框

鼠标释放时会去取是否有drop属性,如果存在,同时鼠标指针还在drop的范围内,执行drop操作.我们检查鼠标指针位置是否在目标范围是用(mousePos.x>targetPos.x),而且还要符合条件(mousePos.x<(targPos.x + targWidth)).如果所有的条件符合,说明指针确实在范围内,可以执行drop指令了.

标签:拖拽,javascript
0
投稿

猜你喜欢

  • ASP Crazy 模版操作类(最简单的模板类、仅提供交流)

    2011-03-17 11:06:00
  • 各种JavaScript开发工具比较

    2007-10-23 13:29:00
  • 妙用Dreamweaver MX共享Word XP文件

    2010-09-05 21:17:00
  • 像数艺术

    2010-02-08 12:33:00
  • 对SQL Server数据库进行优化的经验总结

    2010-07-26 14:52:00
  • 五种方法解决 Web2.0设计中的匹配度

    2007-09-22 10:58:00
  • 巧用Dreamweaver MX控制页面元素

    2009-09-13 18:38:00
  • 跨浏览器的CSS固定定位{position:fixed}

    2007-05-11 16:50:00
  • 用我喜欢的字体(Cufon)

    2009-12-11 18:51:00
  • XML的简单读取与写入

    2008-09-04 10:35:00
  • php获取文件扩展名的3种方法实例

    2023-05-25 02:15:51
  • css+JavaScript实现PDF、ZIP、DOC链接的标注

    2007-05-11 17:03:00
  • 不同操作系统下的mysql数据库同步

    2008-12-22 14:41:00
  • asp查询xml的代码实现无刷新 模糊查询

    2008-04-30 15:39:00
  • Mootools 1.2教程(20)——选项卡效果(Tabs)

    2008-12-26 18:19:00
  • 根据Dreamweaver里的ToolTip代码改进的提示框

    2008-11-27 12:19:00
  • Oracle 9i轻松取得建表和索引的DDL语句

    2010-07-16 13:09:00
  • 嵌入Flash应该考虑不支持Flash的浏览器

    2007-12-20 12:29:00
  • 在IE6中用PNG图片实现半透明效果

    2008-05-30 13:14:00
  • Access 2002的三个实用技巧

    2007-10-22 12:22:00
  • asp之家 网络编程 m.aspxhome.com