【问题标题】:Draggable element in javascriptjavascript中的可拖动元素
【发布时间】:2016-05-29 15:33:39
【问题描述】:

如果我想让一个 div 可拖动,我必须指定一个引用父级吗?例如在 jquery 中,当一个元素可拖动时,它是否有一个引用父级?

【问题讨论】:

  • 你只需要给元素加上draggable属性,不知道父母有什么用...

标签: javascript html css drag-and-drop draggable


【解决方案1】:

要拖动元素,您只需添加draggable 属性并将其值设置为等于true

这不适用于 Internet Explorer 8 或更早版本等古老的浏览器,因为它们也不支持 draggable 属性。

您可能想到的是一个放置目标。默认情况下,元素不能放在其他元素中。

请务必注意,以下拖动事件需要event 参数。

  • ondrag:在拖动元素时触发事件

  • ondragstart - 拖动过程开始时触发事件

  • ondragend - 拖动过程完成时触发事件

  • ondragenter - 当拖动的元素进入放置目标时触发事件

  • ondragleave - 当拖动的元素离开放置目标时触发事件

  • ondragover - 当拖动的元素在放置目标上方时触发事件

要允许删除,我们必须通过event.preventDefault 更改浏览器的默认行为。

此示例由 W3Schools 提供。但是,它解释了拖放功能。不幸的是,没有用于拖放事件的pseudo classes,因此我们需要使用原生 JavaScript。

http://www.w3schools.com/jsref/event_ondragstart.asp

var demo = document.getElementById("demo");

// Use dataTransfer.setData() to set data type and value of dragged data
// When dragging starts, the paragraph will output text and opacity will decrease
document.addEventListener("dragstart", function(event) {
    event.dataTransfer.setData("Text", event.target.id);
    demo.innerHTML = "Started to drag the p element.";
    event.target.style.opacity = "0.4";
});

document.addEventListener("drag", function(event) {
    demo.style.color = "red";                    // Change color of output text
});

// Output some text when finished dragging the p element and reset the opacity
document.addEventListener("dragend", function(event) {
    demo.innerHTML = "Finished dragging the p element.";
    event.target.style.opacity = "1";
});


/* Events fired on the drop target */

// When the draggable p element enters the droptarget, change the DIVS's border style
document.addEventListener("dragenter", function(event) {
    if ( event.target.className == "droptarget" ) {
        event.target.style.border = "3px dotted red";
    }
});

// By default, data/elements cannot be dropped in other elements. To allow a drop, we must prevent the default handling of the element
document.addEventListener("dragover", function(event) {
    event.preventDefault();
});

// When the draggable p element leaves the droptarget, reset the DIVS's border style
document.addEventListener("dragleave", function(event) {
    if ( event.target.className == "droptarget" ) {
        event.target.style.border = "";
    }
});

/* On drop - Prevent the browser default handling of the data (default is open as link on drop)
   Reset the color of the output text and DIV's border color
   Get the dragged data with the dataTransfer.getData() method
   The dragged data is the id of the dragged element ("drag1")
   Append the dragged element into the drop element
*/
document.addEventListener("drop", function(event) {
    event.preventDefault();
    if ( event.target.className == "droptarget" ) {
        demo.style.color = "";
        event.target.style.border = "";
        var data = event.dataTransfer.getData("Text");
        event.target.appendChild(document.getElementById(data));
    }
});
.droptarget {
    float: left; 
    width: 100px; 
    height: 35px;
    margin: 15px;
    padding: 10px;
    border: 1px solid #aaaaaa;
}
<p>Drag the p element back and forth between the two rectangles:</p>

<div class="droptarget">
  <p draggable="true" id="dragtarget">Drag me!</p>
</div>

<div class="droptarget"></div>

<p style="clear:both;"><strong>Note:</strong> drag events are not supported in Internet Explorer 8 and earlier versions or Safari 5.1 and earlier versions.</p>

<p id="demo"></p>

【讨论】:

  • 我更新了帖子。此外,如果您使用的是旧版浏览器,它将无法正常工作。你用的是什么浏览器?
  • 非常感谢您的回答:):) 我想知道的是,可拖动元素是否需要参考父级来移动自己。如果我有一个 div 父亲和一个 div 儿子,我让儿子可拖动,是只能在他父亲内部拖动还是在整个窗口都可以拖动?
猜你喜欢
  • 2015-06-24
  • 2022-01-23
  • 1970-01-01
  • 2018-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多