`

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实现网页元素拖拽排序涉及HTML的`<draggable>`属性、JavaScript的事件监听和DOM操作。通过这些技术,我们可以创建出交互性强、用户体验佳的拖拽排序功能,适用于各种列表、网格等布局的网页元素...

    网页制作中如何实现拖拽

    在网页制作中,实现拖拽功能可以极大地提升用户体验,使得用户能够自由地调整页面元素的位置,从而创建个性化的布局。这种交互方式常见于各种网页编辑器、在线设计工具以及一些可自定义布局的应用中。本文将详细讲解...

    javascript拖动div或table等网页元素

    JavaScript 提供了实现这一功能的强大支持,特别是对于div、table等网页元素的拖动操作。在这个主题中,我们将深入探讨如何使用JavaScript来实现这些元素的拖放功能,并兼容不同的浏览器,包括IE、Firefox、Opera和...

    javascript几个网页特效

    在“javascript几个网页特效”这个主题中,我们可以深入探讨JavaScript实现的一些常见和有趣的网页特效。 1. **动画效果**:JavaScript可以创建各种动画,如淡入淡出、滑动、旋转等。例如,使用CSS3的transition和...

    原生javascript实现拖拽改变table表格行高(html)

    标题提到的“原生javascript实现拖拽改变table表格行高”是一项技术挑战,因为大部分在线资源都集中在改变列宽上,而对行高的调整相对较少。 首先,我们需要理解HTML表格的基本结构。表格由`<table>`元素定义,内部...

    JQ JS javascript layui UI组件 元素 div 拖动插件

    3. **拖动中**:持续更新div的位置,使其跟随鼠标移动,同时确保元素在页面范围内。 4. **结束拖动**:当鼠标释放时,停止更新div位置,可能触发一些回调函数,比如保存新的位置信息。 5. **边界检测**:防止元素被...

    Javascript jquery 实现 拖拽, 和吸附功能

    containment: "parent", // 限制拖动范围为父元素内 opacity: 0.5, // 拖动时透明度降低 }); ``` 在上述代码中,`cursor`属性定义了拖动时的鼠标样式,`containment`用于限制可拖动的区域,`opacity`则可以调整...

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

    在当前互联网中,用户交互界面的...总之,通过JavaScript实现拖拽并替换网页块元素是一个典型的前端开发任务,涉及到事件处理、DOM操作以及浏览器兼容性处理等多个方面。掌握这些知识对于前端开发者来说是非常重要的。

    JavaScript+css实现拖拽效果

    本文将详细讲解如何使用JavaScript和CSS来实现这一效果,以创建一个可拖拽的元素并处理其在页面上的位置。 首先,我们需要理解JavaScript在拖放功能中的角色。JavaScript提供了`dragstart`、`drag`、`dragend`以及`...

    javascript实现鼠标拖动div的效果

    在JavaScript中实现鼠标拖动div的效果是一项常见的交互功能,它能增强用户与网页元素的互动性。这个功能主要涉及到事件监听、元素位置的计算以及页面重绘等技术。以下将详细讲解如何通过JavaScript来实现这一效果。 ...

    利用JavaScript实现拖拽改变元素大小

    在网页中实现拖拽来改变元素大小是前端交互中常见的需求,为了达到这个效果,我们通常会使用JavaScript来编写相关的逻辑代码。在本篇知识分享中,我们将详细探讨如何利用JavaScript来实现拖拽改变元素大小的原理和...

    javascript 购物车(图片拖动)

    这个“JavaScript 购物车(图片拖动)”项目,旨在教你如何利用JavaScript实现一个允许用户通过拖动图片来添加商品到虚拟购物车的功能。这种交互方式既直观又有趣,能够吸引用户的注意力并提升其在网站上的停留时间...

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

    在这个主题中,我们将深入探讨如何实现网页元素的拖动,通过近8个实例来解析这个过程。这些实例可能包括但不限于图片拖动、Div层拖动以及限制拖动范围等功能。 首先,让我们从基础开始,了解实现网页元素拖动的基本...

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

    JavaScript DOM元素拖动技术是网页交互中的重要组成部分,它允许用户通过鼠标操作页面上的元素,实现元素的自由移动。在本资源"js实现网页上dom元素拖动 并实时显示坐标效果.rar"中,包含了多个关于DOM元素拖动的...

    JavaScript 实现图片拖拽

    当图片被放下时,会创建一个新的`img`元素,其`src`属性设为拖动图片的源URL,然后计算出新的位置并添加到`dropzone`元素内。 为了使拖放体验更加流畅,还可以添加额外的优化,如使用CSS3的`transition`属性来平滑...

    【JavaScript】canvas实现可拖拽、修改的分段进度条

    在JavaScript开发中,Canvas是一个非常重要的元素,它允许开发者在网页上进行动态图形绘制。本教程将探讨如何利用Canvas和JavaScript技术实现一个可拖拽、可修改的分段进度条,这在各种用户界面设计中非常实用。我们...

    用JavaScript实现网页里的Window7半透明窗体

    以上代码实现了一个基本的JavaScript半透明窗体,用户可以拖动窗口并使用滑块调整透明度。然而,为了达到Windows 7的效果,可能还需要考虑边框样式、阴影、动画和其他细节,这可能涉及到更复杂的CSS和JavaScript逻辑...

    一个类似QQ的用JavaScript实现的在网页右下角弹出窗口源码例子

    在网页设计和开发中,有时候我们需要创建类似即时通讯软件如QQ那样的交互式功能,例如在网页右下角弹出...同时,这些技术也可以应用于更复杂的应用场景,比如聊天应用、实时通知系统或者其他需要动态交互的网页元素。

Global site tag (gtag.js) - Google Analytics