将具有相同ID类和标记HTML的多个元素拖放到屏幕上的任何位置
Drag and drop anywhere on screen with multiple elements of the same ID Class and Tag HTML
大家好,这是我的第一个问题,所以我可能做错了。我试图实现的是让多个<aside>
元素都具有相同的ID类,当然Tag可以通过拖放特性在屏幕上的任何位置移动。我找到了一个JSFiddle,演示了我所基于的代码,它使用了一个可以移动到任何地方的元素,但在使用多个元素时将不起作用。控制移动的代码在这里:
function drag_start(event) {
var style = window.getComputedStyle(event.target, null);
event.dataTransfer.setData("text/plain",
(parseInt(style.getPropertyValue("left"),10) - event.clientX) + ',' +
(parseInt(style.getPropertyValue("top"),10) - event.clientY));
}
function drag_over(event) {
event.preventDefault();
return false;
}
function drop(event) {
var offset = event.dataTransfer.getData("text/plain").split(',');
var dm = document.getElementById('dragme');
dm.style.left = (event.clientX + parseInt(offset[0],10)) + 'px';
dm.style.top = (event.clientY + parseInt(offset[1],10)) + 'px';
event.preventDefault();
return false;
}
var dm = document.getElementById('dragme');
dm.addEventListener('dragstart',drag_start,false);
document.body.addEventListener('dragover',drag_over,false);
document.body.addEventListener('drop',drop,false);
我遇到问题的部分是拖放系统,它要求元素具有单独的 ID。我还需要让所有旁白元素必须具有相同的 id,并且我不想使用类。在过去的三天里,我尝试了思考并在网上搜索了搜索,但没有找到答案,因为所有链接都回到了相同的代码。我已经研究了获取单击最后一个元素的索引,但找不到获取具有相同ID的所有元素的方法。更新:已经破坏了dnd系统需要帮助:
var dragindex = 0;
$(document).ready(function(){
$("aside").click(function(){
dragindex = $(this).index();
});
});
function drag_start(event) {
var style = window.getComputedStyle(event.target, null);
event.dataTransfer.setData("text/plain",
(parseInt(style.getPropertyValue("left"),10) - event.clientX) + ',' + (parseInt(style.getPropertyValue("top"),10) - event.clientY));
}
function drag_over(event) {
event.preventDefault();
return false;
}
function drop(event) {
var offset = event.dataTransfer.getData("text/plain").split(',');
var dm = document.getElementById('#winborder');
dm.style.left = (event.clientX + parseInt(offset[0],10)) + 'px';
dm.style.top = (event.clientY + parseInt(offset[1],10)) + 'px';
event.preventDefault();
return false;
}
function makewindow(content, storevar) {
storevar = document.createElement('aside');
storevar.setAttribute("dragable", "true");
storevar.setAttribute("id", "winborder");
var content = document.createElement('div');
content.setAttribute("id", "wincontent");
storevar.appendChild(content);
document.body.appendChild(storevar);
storevar.addEventListener('dragstart',drag_start,false);
document.body.addEventListener('dragover',drag_over,false);
document.body.addEventListener('drop',drop,false);
}
在getelementbyid上尝试过使用和不使用"#">
以下代码将允许拖放;很抱歉它没有遵循您以前的编码风格。
下面是一个JSFiddle,显示了它的实际效果:https://jsfiddle.net/6gq7u8Lc/
document.getElementById("dragme").onmousedown = function(e) {
this.prevX = e.clientX;
this.prevY = e.clientY;
this.mouseDown = true;
}
document.getElementById("dragme").onmousemove = function(e) {
if(this.mouseDown) {
this.style.left = (Number(this.style.left.substring(0, this.style.left.length-2)) + (e.clientX - this.prevX)) + "px";
this.style.top = (Number(this.style.top.substring(0, this.style.top.length-2)) + (e.clientY - this.prevY)) + "px";
}
this.prevX = e.clientX;
this.prevY = e.clientY;
}
document.getElementById("dragme").onmouseup = function() {
this.mouseDown = false;
}
附带说明一下,您将无法为它们提供相同的ID。DOM 不支持这样的事情。如果你想添加多个相同类型的元素,我建议使用"容器"父div,将这些元素添加为div 的子元素,并遍历 .children 属性以访问每个元素。
不知道你是否要使用Jquery,但我知道它比原始的javascript解决方案简单得多。我一直在互联网和 Stack Overflow 上搜索网页解决方案上任何位置的简单拖放,但我找不到有效的。这个问题的其他答案对我来说很奇怪。它们有时有效,有时无效。但是,一位朋友建议使用Jquery版本,哇,它要简单得多。只需一行代码!
var dragme = document.getElementsByClassName("dragme");
for (var i = 0; i < dragme.length; i++) {
$(dragme[i]).draggable();
}
.dragme {
cursor: move;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<h1 class="dragme">Try dragging me anywhere on this sample!</h1>
<h2 class="dragme">Drag me, too!</h2>
重要说明:此代码不仅适用于 Jquery,它还需要 Jquery UI 文件。
如果上述示例对您不起作用,请在下面评论它显示的错误。请注意,这适用于无限数量的元素。这个特定示例适用于具有类"dragme"的元素,因此只需将其替换为您自己的类即可。对于一个元素,它是一行代码:$("#yourid").draggable();
。
这段代码在谷歌浏览器上对我有用。希望这对像我一样迟到此页面的人有所帮助!
- Jquery 拖放允许 2 个元素
- JavaScript拖放 - 防止元素拖放到另一个可拖放的元素中
- 区分不同的可拖放元素(jQuery 拖放)
- JavaScript/jQuery在两个iframe之间拖放元素
- 在单独的容器中拖放,并调整放置的元素的位置
- 拖放与拖动不同的元素
- 拖放具有触摸支持的元素
- 防止在使用JS拖放时将其放入子元素内
- EaselJS / canvas在拖放过程中更改元素焦点
- 是否可以使用 JavaScript 在 WebBrowser 中拖动 WPF 元素和句柄拖放
- 防止HTML5拖放功能多次放置同一元素
- 花式树拖放 - 获取当前元素
- 由javascript创建的HTML5拖放元素:
- 拖放 - 元素不会拖放
- 是否有最适合“拖放”Web应用程序的元素
- 在 JQuery UI 拖放后查找列表中元素的索引
- 使拖放的元素可放置,同时仍可拖动
- 使用HTML5拖放,有没有办法在保持拖动流的同时隐藏元素
- 如何使用HTML2canvas截取拖放元素的屏幕截图
- 从子元素拖放父元素