`

JavaScript实现拖拽网页内元素的方法

阅读更多

/**
* 跨平台的事件监听函数
* @param {Node} node 需要监听事件的DOM节点
* @param {String} eventType 需要监听的事件类型
* @param {Function} callback 事件监听回调函数
* @type Function 返回值为函数类型
* @return 返回监听回调函数的引用,用于释放监听
*/
function bindEvent(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);
 }
 return callback;
}
/**
* 跨平台的事件监听卸载函数
* @param {Node} node 需要卸载监听事件的DOM节点
* @param {String} eventType 需要卸载监听的事件类型
* @param {Function} callback 卸载事件监听回调函数
*/
function removeEvent(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 需要被拖动的元素
*/
//必须告诉系统,哪些元素是可以进行交互,而哪些是不行
function canDrag(dragger) {
 var drag = bindEvent(dragger,'onmousedown',function(e){
  //兼容事件对象
  e = e || event;
  //兼容坐标属性
  var pageX = e.clientX || e.pageX;
  var pageY = e.clientY || e.pageY;
  //兼容样式对象
  var style = dragger.currentStyle || window.getComputedStyle(dragger,null);
  //当没有设置left和top属性时,IE下默认值为auto
  var offX = parseInt(style.left) || 0;
  var offY = parseInt(style.top) || 0;
  //获取鼠标相对于元素的间距
  var offXL = pageX - offX;
  var offYL = pageY - offY;
  //为dragger增加onDrag属性,用来存储拖动事件
  if (!dragger.onDrag) {
   //监听拖动事件
   dragger.onDrag = bindEvent(document,'onmousemove',function(e){
    e = e || event;
    var x = e.clientX || e.pageX;
    var y = 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){
    //释放前读取事件对象
    var x = e.clientX || e.pageX;
    var y = e.clientY || e.pageY
    //释放拖动监听和结束监听
    removeEvent(document, 'onmousemove', dragger.onDrag);
    removeEvent(document, 'onmouseup', dragger.onDragEnd);
    try {
     //删除拖动时所用的属性,兼容FF使用
     delete dragger.onDrag;
     delete dragger.onDragEnd;
    } catch (e) {
     //删除拖动时所用的属性,兼容IE6使用
     dragger.removeAttribute('onDrag');
     dragger.removeAttribute('onDragEnd');
    }
   });
  }
 });
 return function() {
  //返回一个可以取消拖动功能的函数引用
  //释放拖动监听和结束监听
  removeEvent(document, 'onmousemove', dragger.onDrag);
  removeEvent(document, 'onmouseup', dragger.onDragEnd);
  try {
   //删除拖动时所用的属性,兼容FF使用
   delete dragger.onDrag;
   delete dragger.onDragEnd;
  } catch (e) {
   //删除拖动时所用的属性,兼容IE6使用
   dragger.removeAttribute('onDrag');
   dragger.removeAttribute('onDragEnd');
  }
 }
}
分享到:
评论

相关推荐

    Javascript实现网页元素拖拽排序

    Javascript实现网页元素拖拽排序

    javascript实现拖拽并替换网页块元素

    实现类似于学生换座位的效果,将网页内的两个元素通过拖拽的方式互换。

    js实现网页上dom元素拖动 并实时显示坐标效果.rar

    网页上元素拖动的实现实例,压缩包内有8个示例,比如在图片上放大时候会出现一个可拖动的虚线框,还有类似一个Div层的拖动,另外还有拖动方式的拖动,限制拖动区域的拖动等,本压缩包内都有相关的例子。

    JavaScript网页特效范例宝典源码

    实例043 应用JavaScript实现指定尺寸无边框无滚动条窗口 67 1.8 水平导航条应用 69 实例044 图片按钮导航条 69 实例045 导航条的动画效果 71 实例046 不用图片实现质感导航条 72 1.9 下拉菜单式导航条 73 实例047 二...

    javascript实现漂亮的拖动层,窗口拖拽特效

    一个可关闭、可随意拖动位置的网页弹出层代码,美化的相当漂亮,简洁实用,还可拖动改变大小,通过八个方向改变大小,学习这类特效编写的网页设计者可参阅一下

    javascript实现简单的鼠标拖动效果实例

    本文实例讲述了javascript实现简单的鼠标拖动效果。分享给大家供大家参考。具体分析如下: 用鼠标拖动一个元素,放到网页的任意一个位置上,这是很常见的,例如很多博客模板版块位置可以自己拖动到相应位置。 下面先...

    程序天下:JavaScript实例自学手册

    14.10 用JavaScript实现数组排序 14.11 数字千分位函数 14.12 读写Cookie的函数 14.13 获取JavaScript函数中的所有参数 14.14 奇偶数的判断 14.15 在JavaScript运行VBScript函数 14.16 购物篮中常用的计算总价效果 ...

    JS实现的简单拖拽购物车功能示例【附源码下载】

    主要介绍了JS实现的简单拖拽购物车功能,涉及javascript事件响应及页面元素动态操作相关实现技巧,并附带完整实例源码供读者下载参考,需要的朋友可以参考下

    《程序天下:JavaScript实例自学手册》光盘源码

    14.10 用JavaScript实现数组排序 14.11 数字千分位函数 14.12 读写Cookie的函数 14.13 获取JavaScript函数中的所有参数 14.14 奇偶数的判断 14.15 在JavaScript运行VBScript函数 14.16 购物篮中常用的计算总价效果 ...

    网页上元素拖动的实现,有近8个实例打包

    内容索引:脚本资源,Ajax/JavaScript,拖动 网页上元素拖动的实现实例,压缩包内有8个示例,比如在图片上放大时候会出现一个可拖动的虚线框,还有类似一个Div层的拖动,另外还有拖动方式的拖动,限制拖动区域的拖动等...

    HTML、CSS、JavaScript+网页特效、动画设计、交互式体验、视觉艺术+该代码用于创建一个有视觉特效和交互式体验的网页

    此外,代码中还包含了一些交互式元素,如禁止文本选择和拖动,以及响应式的布局调整。 适用人群: 该代码适用于有一定前端开发经验的网页设计师和开发者,特别是那些对创建具有视觉冲击力和交互性网页感兴趣的人。...

    DIY拖拽(二)

    用js实现了页面元素在页面自由拖拽而不会破坏网页结构 该方法是两种不同的方式实现了该功能,这是方法二实现的代码

    JQuery权威指南源代码

    使用JavaScript实现隔行变色 使用jQuery选择器实现隔行变色 JavaScript代码检测页面元素 jQuery代码检测页面元素 使用jQuery基本选择器 使用jQuery层次选择器 使用jQuery基本过滤选择器 使用jQuery内容过滤...

    精通JavaScript

    • 11.8.htm JavaScript实现事件控制器 • 11.9.htm 元素属性综合应用 • 11.10.htm 动态修改表单元素内容 第12章(\第12章) • 12.1.htm Document树的简单例子 • 12.2....

    精通javascript

    • 11.8.htm JavaScript实现事件控制器 • 11.9.htm 元素属性综合应用 • 11.10.htm 动态修改表单元素内容 第12章(\第12章) • 12.1.htm Document树的简单例子 • 12.2....

    自定义拖拽(一)

    用js实现了页面元素在页面自由拖拽而不会破坏网页结构 该方法是两种不同的方式实现了该功能,这是方法一实现的代码

    JS实现网页Div层Clone拖拽效果

    主要介绍了JS实现网页Div层Clone拖拽效果,涉及JavaScript响应鼠标事件动态改变页面元素位置属性及层级属性的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics