`
fqmly520
  • 浏览: 64631 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

如何在 JavaScript 中实现拖放

阅读更多
 译者:Flyingis

    JavaScript擅长于修改页面中的DOM元素,但是我们使用JavaScript通常只是实现一些简单功能,例如实现图片的翻转,网页中的标签页,等等。这篇文章将向你展示如何在页面中,对创建的元素实现拖放。

    有许多理由让你在页面中加入拖放的功能,其中最简单的理由是重新组织数据。举个例子,你可能希望用户能够重组一系列的页面元素,通过放置一个input或select组件在各个元素的旁边来代表它们的顺序是一种解决方案,使该组元素可以被拖放是一种替代方案。或者也许你想在网站上拥有一个可以被用户移动的导航窗口。这些都是使用拖放功能的简单理由,因为你能够实现!

    在你的网页上实现拖放的效果并不是很复杂。首先,我们知道鼠标的位置,然后我们需要了解用户什么时候点击一个元素,以至于我们知道要准备开始拖动它,最后我们要移动这个元素。

    捕获鼠标的移动

    第一步,我们需要获取鼠标的坐标,通过一个函数并赋给document.onmousemove可以实现这一功能:

document.onmousemove = mouseMove;
function mouseMove(ev) {
  ev 
= ev || window.event;
  
var mousePos = mouseCoords(ev);
}

function mouseCoords(ev) {
  
if(ev.pageX || ev.pageY) {
    
return {x:ev.pageX, y:ev.pageY};
  }

  
return {
    x:ev.clientX 
+ document.body.scrollLeft - document.body.clientLeft,
    y:ev.clientY 
+ document.body.scrollTop - document.body.clientTop
  }
;
}

    首先我们需要解释一下event对象。不论你什么时候移动、点击鼠标,或按键,等等,一个事件都会发生。在IE中,这个事件是全局的,它被存储在window.event中,对于Firefox,及其他的浏览器来说,这个事件将被传递到任何指向这个页面动作的函数中。因此,我们使document.onmousemove指向鼠标移动的函数,鼠标移动的函数获得事件对象。

    上述代码中,ev在所有浏览器环境中都包含了event对象。在Firefox里,"||window.event"将被忽略,因为它已经包含事件。在IE中,ev的值为空,以至于需要将它的值设置为window.event。

    本文中我们需要多次捕获到鼠标的坐标,因此我们写了一个mouseCoords方法,它有一个参数:event。

    我们要再次讨论IE和其他浏览器之间的差异。Firefox和其他的浏览器使用event.pageX和event.pageY来表示鼠标相对于document文档的位置。如果你有一个500*500的窗口,并且鼠标位于窗口中间,那么pageX和pageY的值将都是250。如果你将窗口向下滚动500象素,pageY的值为750。

    如此相反的是,微软的IE使用event.clientX和event.clientY来表示鼠标相对于window窗口的位置,而不是当前document文档。在相同的例子中,如果将鼠标放置于500*500窗口的中间,clientX和clientY值将均为250。如果向下滚动页面,clientY将仍为250,因为它是相对于window窗口来测量,而不是当前的document文档。因此,在鼠标位置中,我们应该引入document文档body区域的scrollLeft和scrollTop属性。最后,IE中document文档实际并不在(0,0)的位置,在它周围有一个小(通常有2px)边框,document.body.clientLeft和document.body.clientTop包含了这个边框的宽度,从而还需要在鼠标位置中引入它们。

    幸运的是,现在我们拥有了mouseCoords函数,不用再为获取鼠标位置担心了。

    捕获鼠标的点击
 
    下一步,我们必须知道鼠标何时点击及何时释放。如果我们跳过这一步,只要你的鼠标移动经过这些元素时,都将产生拖动这些元素的效果,这是令人讨厌并违反人的直觉的。

    在这里,有两个函数可以帮助我们:onmousedown和onmouseup。先前我们已将document.onmousemove指向一个函数,因此从逻辑上似乎应该使document.onmousedown和document.onmouseup都指向函数。如果我们让document.onmousedown指向一个函数,那么这个函数将会因为鼠标点击任何元素而执行:文本、图像、表格,等等。我们只想页面中特定的元素具有被拖放的功能,因此,我们可以通过如下方法实现:

document.onmouseup = mouseUp;
var dragObject = null;
function makeClickable(object) {
  object.onmousedown 
= function() {
  dragObject 
= this;
  }

}

function mouseUp(ev) {
  dragObject 
= null;
}

    我们现在有了一个变量dragObject,包含了你点击的任何元素。当你释放鼠标的时候,dragObject被设置为空,从而在dragObject非空的时候,我们需要进行拖动操作。
分享到:
评论

相关推荐

    掌握 JavaScript 中的拖放(Drag and Drop)API:实现动态交互

    通过本文的介绍,你应该能够理解拖放API的基本概念,掌握在JavaScript中实现拖放功能的方法,并能够在实际项目中应用这一API来实现动态交互。这将有助于你构建更加动态和交互式的Web应用,为用户提供更加丰富的体验...

    两款JAVASCRIPT拖拽(拖放)

    在本文中,我们将探讨拖放的基本原理以及如何使用JavaScript实现这一功能。 首先,拖放功能的核心在于浏览器提供的`HTML5 Drag and Drop API`,它允许开发者定义拖动源(drag source)、放置目标(drop target)...

    HTML5中实现拖放效果无须借助javascript.docx

    通过以上介绍可以看出,在HTML5中实现拖放效果无需编写额外的JavaScript代码。仅通过简单的HTML标记和CSS样式即可完成基本的拖放功能。这种方式不仅简化了开发流程,而且提升了页面性能。不过需要注意的是,虽然...

    MooTools 1.2中的Drag.Move来实现拖放

    在MooTools 1.2中,`Drag.Move`是用于实现拖放功能的一个强大类,它扩展了基础的`Drag`类,使得元素不仅能够被拖动,还能在特定的可接受元素(droppables)之间进行移动。 `Drag.Move`的基本用法涉及创建一个新的...

    javascript 拖放实现的要点

    这个API使得在浏览器环境中实现拖放功能变得更加简单和标准化。它提供了`dragstart`、`drag`、`dragenter`、`dragover`、`dragleave`、`drop`和`dragend`等一系列事件,帮助开发者监听和处理拖放过程的各个阶段。 1...

    javaScript 拼图游戏

    6. **拖放API**:HTML5引入了拖放API,使得在JavaScript中实现拖放功能变得更加简单。`dragstart`、`dragenter`、`dragover`、`dragleave`、`drop`和`dragend`是一系列相关的拖放事件,通过监听这些事件可以实现拖放...

    asp.net 实现拖放操作

    下面将详细探讨如何在ASP.NET中实现拖放操作。 首先,了解HTML5的拖放API是关键。HTML5引入了`draggable`属性,使得任何HTML元素都可以被拖动。同时,通过监听`dragstart`、`drag`、`dragend`等事件,可以实现拖动...

    javascript 拖放效果实现代码

    在你的网页上实现拖放的效果并不是很复杂。首先,我们知道鼠标的位置,然后我们需要了解用户什么时候点击一个元素,以至于我们知道要准备开始拖动它,最后我们要移动这个元素。 捕获鼠标的移动 第一步,我们需要...

    javascript 拖放效果实现代码.docx

    以下将详细讲解如何利用JavaScript实现拖放效果的关键步骤和涉及的技术。 首先,理解拖放的基本流程至关重要。拖放操作通常包括以下几个阶段: 1. **监听鼠标按下(mousedown)**:当用户点击可拖动元素时,我们...

    强大的js拖动控件

    在JavaScript中实现拖放功能,一般涉及到以下知识点: 1. `dragstart`、`drag`、`dragenter`、`dragover`、`dragleave`、`drop`和`dragend`等拖放相关的DOM事件。每个事件都有特定的作用,比如`dragstart`在拖动...

    Javascript拖放框架

    在本压缩包文件中,我们可能找到了一个简易而灵活的JavaScript拖放框架的源代码或者相关文档,这将有助于我们理解并快速实现拖放功能。 拖放功能的核心在于以下几点关键技术: 1. **数据Transfer对象**:在拖放...

    拖拽的三种实现方式

    HTML5引入了一套完整的拖放API,使得在JavaScript中实现拖放功能变得相对简单。主要涉及`dragstart`、`drag`、`dragend`、`drop`等事件以及`DataTransfer`对象。开发者可以通过设置元素的`draggable`属性为`true`来...

    【JavaScript源代码】如何利用vue.js实现拖放功能.docx

    在Vue.js中实现拖放功能,首先我们需要配置项目数据。创建一个包含项目的`items`数组,每个项目都有唯一的`id`、显示文本`title`以及所属的列表`list`。例如: ```javascript data() { return { items: [ { id: ...

    实现拖放上传图片文件

    HTML5引入了拖放功能,使得在浏览器中实现拖放操作变得可能。主要涉及的事件包括`dragstart`、`dragenter`、`dragover`、`dragleave`、`drop`和`dragend`。在`index.html`文件中,我们需要创建一个可拖放区域,通常...

    可以实现拖放的JS代码

    在这个"可以实现拖放的JS代码"中,我们将探讨如何使用纯JavaScript实现拖放功能。 首先,我们需要了解HTML5引入的拖放API。这个API提供了一系列的事件和接口,使得在网页上实现拖放操作变得相对简单。关键的事件...

    dragsvg 实现拖放、拉伸

    在`dragsvg.html`中,开发者可能使用了原生JavaScript或者SVG事件监听器来实现拖放功能。SVG元素拥有`dragstart`、`drag`和`dragend`等事件,通过绑定这些事件处理函数,可以控制SVG图形在用户的鼠标操作下移动。...

    javascript实现拖放效果

    在Web开发中,使用JavaScript实现拖放效果可以增加页面的交互性,改善用户体验。本文将详细介绍使用JavaScript实现拖放效果的核心知识点和基本原理。 首先,要实现拖放功能,需要使用到几个关键的DOM事件:...

    JS实现拖放效果,dataTransfer对象实现拖放效果

    dataTransfer对象用于从被拖动元素向放置目标传递字符串数据。因为这个对象是 event 的属性,所以在拖放事件的事件处理程序外部无法访问 data...在事件处理程序内部,可以使用这个对象的属性和方法实现拖放功能。

    JavaScript_拖放太简单了,很伤人.zip

    "JavaScript_拖放太简单了,很伤人.zip"这个文件名暗示了一个关于JavaScript实现拖放功能的教程或者示例代码库,可能是作者在尝试或教学过程中发现其比预期的更易上手,从而产生了“伤人”的趣味说法。 拖放功能在...

Global site tag (gtag.js) - Google Analytics