Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单的JavaScript拖放,无需库的帮助_Javascript_Drag And Drop - Fatal编程技术网

简单的JavaScript拖放,无需库的帮助

简单的JavaScript拖放,无需库的帮助,javascript,drag-and-drop,Javascript,Drag And Drop,我只是在寻找一种不使用jquery或任何其他库而使用拖放的方法。如果拖动的对象被放置在另一个元素上,后面的元素应该在FF中启动一个事件-最好是独立于浏览器的 我知道JavaScript的拖放功能以前曾被讨论过,但之前的帖子对我没有帮助 虽然我发现了一些例子,但我不清楚是否存在跌落或拖坠事件,但这些事情不起作用: <p ondrop='alert("It worked");'>Text</p> <p ondragdrop='alert("It worked");'&g

我只是在寻找一种不使用jquery或任何其他库而使用拖放的方法。如果拖动的对象被放置在另一个元素上,后面的元素应该在FF中启动一个事件-最好是独立于浏览器的

我知道JavaScript的拖放功能以前曾被讨论过,但之前的帖子对我没有帮助

虽然我发现了一些例子,但我不清楚是否存在跌落或拖坠事件,但这些事情不起作用:

<p ondrop='alert("It worked");'>Text</p>
<p ondragdrop='alert("It worked");'>Text</p>
这怎么可能呢


非常感谢。

嗯。您可能不想自己动手做,但我会看看Peter Michaux的FORK Javascript-与JQuery或所有那些大型库不同,FORK的模块彼此解耦,并且非常简单,您可以查看Peter的源代码并找出您需要的位。编辑:我只需要使用FORK.Drag,因为它非常小:总共缩小了7.6KB

我只是在寻找一种不使用jquery或任何其他库而使用拖放的方法


很抱歉,没有库的简单拖放操作是不存在的。您可以自己编写,但要使其在所有浏览器中都能工作,需要大量的JS。

我同意其他答案。图书馆将为你节省大量时间和头痛。这是来自最近刚刚从头开始创建拖放控件的人

如果你坚持这是你需要做的:

将onmousedown事件绑定到要拖动div.onmousedown的div。 将div的位置样式更改为绝对div.style.position='absolute' 开始捕获鼠标移动文档.onmousemove。 鼠标移动时更新div的位置div.style.top | left='[location]px' 在div的onmouseup事件或文档的onmouseup事件上,解除所有处理程序的绑定,并执行任何其他清除null out位置更改,等等。 图书馆可能会解决的一些问题:

拖动时,您将选择页面上的文字看起来很难看。 不同浏览器之间的事件绑定不同。 如果要显示占位符并在开始拖动控件时使其不弹出,则必须计算要拖动的元素的大小,因为更改为绝对定位将从流中删除该元素。 您可能希望拖动的图元流畅地移动,因此在选择图元时必须存储一些鼠标偏移量,或者自动将图元居中放置在鼠标上。 如果要拖动列表中的项目,则必须为该列表编写更多自定义代码,以接受拖动的项目。 在滚动窗口时,您必须考虑拖动,并且可能会在其他位置奇怪的元素中拖动。
虽然我同意图书馆是一条路,但你想要的答案是onmousedown、onmousemove、onmouseup。你必须处理这三件事

在onmousedown中,您可以在不同的浏览器中找到target event.target或类似内容,并设置draggedObject=event.target。您还将开始处理onmousemove事件

每当触发onmousemove事件时,您都会根据上次触发onmousemove事件后的位置差异移动拖动的元素

在onmouseup事件中,您需要清除draggedObject变量并停止处理onmousemove


它不是很交叉,但它是拖放所需操作的核心。

您能解释一下为什么不想使用库吗?这并不是一件小事,而且一个库的运行速度比自己快很多倍。fork消失了吗?我找不到它,链接明显断开了。。。我刚刚在谷歌群组里发布了一个问题