我想将div拖放到容器div中。使用鼠标仅在列表中上下移动。我该如何创建呢?
搜索互联网和stackoverflow并没有给我一个很好的答案,因为我希望使用香草Javascript编写它,而如今一切都在jQuery中。 :S
这是我所拥有的:
<div class="chapcontainer" data-chaporder="1000">
<div class="chapter">Big fire</div>
<div class="subchapter" data-chapid="1">Forest burning</div>
<div class="subchapter" data-chapid="2">Balu hoses</div>
<div class="subchapter" data-chapid="3">Forest animals die</div>
<div class="subchapter" data-chapid="4">Lovely fire</div>
</div>
</div>
章节div是容器。在此div中,我希望能够通过在subchapter-div列表中单击鼠标按钮来上下移动subchapter-div。
例如,我将subchapter-div和data-chapid 4移至顶部,然后应将其移至顶部,并将data-chapid更改为1。在香草javascript中是否可能发生这种情况?
我已经了解了AppendChild,但我不知道如何用鼠标触发它。
答案 0 :(得分:0)
您可以使用jQuery:
$(".subchapter[data-chapid='1']").on("click", function() {
$(this).css('margin-left', '20px') // add margin/padding/etc here
})
答案 1 :(得分:0)
进行拖放操作很复杂,但这是一些基本步骤。滚动自己的优势之一是,您可以执行比标准jQuery UI拖放操作更高级的事情,例如,平滑滚动容器,如果用户将鼠标悬停在其上则自动打开嵌套的树项目,或在移动项目时进行动画处理。 / p>
步骤:
array.splice
更新数据数组以移动拖动的项目。删除绝对定位的拖动元素,然后重新渲染列表以反映所做的更改。我假设您正在使用某种模板库来渲染您的东西,或者至少使用一个render函数来清除其中的内容并将其替换为当前状态。答案 2 :(得分:0)
我使用draggable =“ true”使div成为可拖动对象,并添加了一些功能(ondragstart,ondrop,ondragover)来启用拖放操作。
<div class="chapcontainer" data-chaporder="1000">
<div class="chapter">Big fire</div>
<div class="subchapter" data-chapid="1" draggable="true" ondragstart="dragstart_handler(event);" ondrop="drop_handler(event)" ondragover="dragover_handler(event);">Forest burning</div>
<div class="subchapter" data-chapid="2" draggable="true" ondragstart="dragstart_handler(event);" ondrop="drop_handler(event)" ondragover="dragover_handler(event);">Balu hoses</div>
<div class="subchapter" data-chapid="3" draggable="true" ondragstart="dragstart_handler(event);" ondrop="drop_handler(event)" ondragover="dragover_handler(event);">Forest animals die</div>
<div class="subchapter" data-chapid="4" draggable="true" ondragstart="dragstart_handler(event);" ondrop="drop_handler(event)" ondragover="dragover_handler(event);">Lovely fire</div>
</div>
</div>
我添加了以下javascript:
function dragstart_handler(ev) {
console.log("dragStart");
ev.dataTransfer.setData("text/plain", ev.target.id);
ev.dataTransfer.dropEffect = "move";
}
function dragover_handler(ev) {
ev.preventDefault();
ev.dataTransfer.dropEffect = "move";
}
function drop_handler(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text/plain");
console.log(data);
ev.target.appendChild(document.getElementsByClassName(data));
}
现在我又被卡住了。运行代码时,在控制台中出现以下错误:
未捕获的TypeError:无法在“节点”上执行“ appendChild”: 参数1的类型不是“节点”。在drop_handler(chapdrag.js:16)处 HTMLDivElement.ondrop(index.html:1)
我在做什么错了?