如何修复拖放JavaScript

如何修复拖放JavaScript,javascript,html,css,drag-and-drop,Javascript,Html,Css,Drag And Drop,我创建了这个页面和脚本来使用JavaScript、HTML和CSS拖放对象。我将聚光灯对象跟随鼠标悬停在页面项上并将其放置在容器上,但我的问题是拖放不起作用 代码如下: HTML: JavaScript: 小提琴: 你为什么不使用html5呢 <head> <script> function allowDrop(ev) { ev.preventDefault(); } function drag(ev) { ev.dataTransfer.setData

我创建了这个页面和脚本来使用JavaScript、HTML和CSS拖放对象。我将聚光灯对象跟随鼠标悬停在页面项上并将其放置在容器上,但我的问题是拖放不起作用

代码如下:

HTML: JavaScript: 小提琴:
你为什么不使用html5呢

<head>
<script>
function allowDrop(ev) {
    ev.preventDefault();
}

function drag(ev) {
    ev.dataTransfer.setData("Text", ev.target.id);
}

function drop(ev) {
    ev.preventDefault();
    var data = ev.dataTransfer.getData("Text");
    ev.target.appendChild(document.getElementById(data));
}
</script>
</head>
<body>

<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>

<img id="drag1" src="img_logo.gif" draggable="true"
ondragstart="drag(event)" width="336" height="69">

你为什么不使用html5呢

<head>
<script>
function allowDrop(ev) {
    ev.preventDefault();
}

function drag(ev) {
    ev.dataTransfer.setData("Text", ev.target.id);
}

function drop(ev) {
    ev.preventDefault();
    var data = ev.dataTransfer.getData("Text");
    ev.target.appendChild(document.getElementById(data));
}
</script>
</head>
<body>

<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>

<img id="drag1" src="img_logo.gif" draggable="true"
ondragstart="drag(event)" width="336" height="69">

我强烈建议您考虑使用jqueryui来实现这一点。查看和小部件。

我强烈建议您使用jQuery UI来实现这一点。查看和小部件。

好的,我发现了一些让JSFIDLE工作的方法

首先,元素不可拖动的原因与伪元素spotlight:after有关。它被定位为“绝对”,顶部、左侧、底部和右侧的值为-25px。我不认为他在做你想做的事。具有这些位置的元素将占据整个屏幕,因为它将从左边框左侧的25px延伸到右边框之后的25px,以此类推。临时解决方案是添加css属性

pointer-events: none;
第二,你有

<body onload="initPage()">
通常情况下,这很好,但在JSFIDLE中,javascript窗口的作用域位于page onload处理程序内部,因此函数的作用域是本地的。要使它们进入全局范围,您可以做几件事,但我暂时更改了要显式添加到窗口范围的函数:

window['initPage'] = function() { 
另外,因为我们已经在onload处理程序中确定了作用域,所以我删除了

window.onload = function() {
范围界定,包括端部支撑


这里是工作的方法

好的,我发现了一些让JSFIDLE工作的方法

首先,元素不可拖动的原因与伪元素spotlight:after有关。它被定位为“绝对”,顶部、左侧、底部和右侧的值为-25px。我不认为他在做你想做的事。具有这些位置的元素将占据整个屏幕,因为它将从左边框左侧的25px延伸到右边框之后的25px,以此类推。临时解决方案是添加css属性

pointer-events: none;
第二,你有

<body onload="initPage()">
通常情况下,这很好,但在JSFIDLE中,javascript窗口的作用域位于page onload处理程序内部,因此函数的作用域是本地的。要使它们进入全局范围,您可以做几件事,但我暂时更改了要显式添加到窗口范围的函数:

window['initPage'] = function() { 
另外,因为我们已经在onload处理程序中确定了作用域,所以我删除了

window.onload = function() {
范围界定,包括端部支撑


这里是工作的

感谢注释,但我们需要使用本机JavaScript,因为它是最快的感谢注释,但我们需要使用本机JavaScript,因为它是最快的love this pointer events:none;应用于文本div的解决方案。。。谢谢爱这个指针事件:无;应用于文本div的解决方案。。。谢谢