关于firefox下img元素拖拽效果处理

问题说明:
      Firefox下以图片为句柄的拖拽效果无法触发onmouseup事件

解决方法 :
      Firefox下Drag效果句柄不能作用在img元素上,解决有两种。
            1、 用一个div层盖住img
            2、 用非img元素作拖拽句柄
涉及概念总结:
      1、handle.onmousedown:      触发拖拽时间,并在事件中绑定move和up事件
      2、document.onmousemove: 鼠标移动事件,持续响应拖拽
      3、document.onmouseup:     拖拽结束即鼠标up事件,负责挂拖拽结束后的事件回调函数。
      4、因为拖拽的范围是整个浏览器所以move和up事件应该作用到document上。
      5、这里有联系事件捕捉概念,setCapture函数的作用就是将后续的mouse事件都发送给这个对象,releaseCapture就是将鼠标事件还回去。特别说明一下,在windows32位系统中,move事件是每个一个时间段检测一次鼠标位置,而非每次拖拽,所以如果不加setCapture函数很容易失去拖拽焦点,而且这并不保证一定出现,测试难度很大。
      6、clientX,clientY事件触发的坐标,这里持续跟踪鼠标拖拽。
      7、设置偏移量: 事件触发到句柄元素上,但往往不是句柄的0,0坐标,这是就引入偏移量问题,通过如下表达式计算出偏移量。
            evt.clientX-handle.offsetLeft;
            evt.clientY-handle.offsetTop;
      8、计算拖拽句柄的left和top,通过事件坐标减去偏移量就可以得到最终的拖拽方位了。
    handle.style.left=e.clientX-fx;
    handle.style.top=e.clientY-fy;
      9、在整个过程中你还应考虑事件冒泡和浏览器时间兼容
           getEvt:function(evt){
                return evt||window.event;
           },
           stopEvt:function(evt){
                Browser.isIE?(evt.cancelBubble=true):evt.stopPropagation();
           }           
     
并附上一个拖拽库,功能和效果不如dom-drag但是只有0.8k轻巧一些,30多行代码。

你可能感兴趣的:(浏览器,UP,firefox)