JavaScript实现拖拽网页内元素的方法
本文实例讲述了JavaScript实现拖拽网页内元素的方法。分享给大家供大家参考。具体如下:
这段代码详细讲述了JS拖拽的原理和方法,值得学习和借鉴。
/** *跨平台的事件监听函数 *@param{Node}node需要监听事件的DOM节点 *@param{String}eventType需要监听的事件类型 *@param{Function}callback事件监听回调函数 *@typeFunction返回值为函数类型 *@return返回监听回调函数的引用,用于释放监听 */ functionbindEvent(node,eventType,callback){ if(node.attachEvent){ if(eventType.indexOf('on')){eventType='on'+eventType;} node.attachEvent(eventType,callback); }else{ if(!eventType.indexOf('on')) eventType=eventType.substring(2,eventType.length); node.addEventListener(eventType,callback,false); } returncallback; } /** *跨平台的事件监听卸载函数 *@param{Node}node需要卸载监听事件的DOM节点 *@param{String}eventType需要卸载监听的事件类型 *@param{Function}callback卸载事件监听回调函数 */ functionremoveEvent(node,eventType,callback){ if(node.detachEvent){ if(eventType.indexOf('on')){eventType='on'+eventType;} node.detachEvent(eventType,callback); }else{ if(!eventType.indexOf('on')) eventType=eventType.substring(2,eventType.length); node.removeEventListener(eventType,callback,false); } } /** *兼容不同定位方式的通用拖动接口 *@param{Node}dragger需要被拖动的元素 */ //必须告诉系统,哪些元素是可以进行交互,而哪些是不行 functioncanDrag(dragger){ vardrag=bindEvent(dragger,'onmousedown',function(e){ //兼容事件对象 e=e||event; //兼容坐标属性 varpageX=e.clientX||e.pageX; varpageY=e.clientY||e.pageY; //兼容样式对象 varstyle=dragger.currentStyle||window.getComputedStyle(dragger,null); //当没有设置left和top属性时,IE下默认值为auto varoffX=parseInt(style.left)||0; varoffY=parseInt(style.top)||0; //获取鼠标相对于元素的间距 varoffXL=pageX-offX; varoffYL=pageY-offY; //为dragger增加onDrag属性,用来存储拖动事件 if(!dragger.onDrag){ //监听拖动事件 dragger.onDrag=bindEvent(document,'onmousemove',function(e){ e=e||event; varx=e.clientX||e.pageX; vary=e.clientY||e.pageY //设置X坐标 dragger.style.left=x-offXL+'px'; //设置Y坐标 dragger.style.top=y-offYL+'px'; }); //监听拖动结束事件 dragger.onDragEnd=bindEvent(document,'onmouseup',function(e){ //释放前读取事件对象 varx=e.clientX||e.pageX; vary=e.clientY||e.pageY //释放拖动监听和结束监听 removeEvent(document,'onmousemove',dragger.onDrag); removeEvent(document,'onmouseup',dragger.onDragEnd); try{ //删除拖动时所用的属性,兼容FF使用 deletedragger.onDrag; deletedragger.onDragEnd; }catch(e){ //删除拖动时所用的属性,兼容IE6使用 dragger.removeAttribute('onDrag'); dragger.removeAttribute('onDragEnd'); } }); } }); returnfunction(){ //返回一个可以取消拖动功能的函数引用 //释放拖动监听和结束监听 removeEvent(document,'onmousemove',dragger.onDrag); removeEvent(document,'onmouseup',dragger.onDragEnd); try{ //删除拖动时所用的属性,兼容FF使用 deletedragger.onDrag; deletedragger.onDragEnd; }catch(e){ //删除拖动时所用的属性,兼容IE6使用 dragger.removeAttribute('onDrag'); dragger.removeAttribute('onDragEnd'); } } }
希望本文所述对大家的javascript程序设计有所帮助。