【发布时间】:2017-10-02 06:50:17
【问题描述】:
我目前正在开发一款移动应用/游戏。我很难让库存系统在手机上正常工作。拖放在电脑上用鼠标可以很好地工作,但在手机上就不行了。
JavaScript 代码:
document.addEventListener("DOMContentLoaded", function(event) {
$(document).ready(function(){
var videoPath = "videos/lg/";
var draggedItem = null;
$('.segmentListItem').each(function(index){
$(this).on("dragstart", handleDragStart);
$(this).on("drop", handleDrop);
$(this).on("dragover", handleDragOver);
});
function handleDragStart(e){
//console.log('start');
draggedItem=this;
e.originalEvent.dataTransfer.effectAllowed = 'move';
//e.dataTransfer.dropEffect = 'move'; //MH - do we need both of these?
e.originalEvent.dataTransfer.setData('text/html', this.innerHTML);
}
function handleDragOver(e) {
if (e.preventDefault) {
e.preventDefault(); // Necessary. Allows us to drop.
}
e.originalEvent.dataTransfer.dropEffect = 'move'; // See the section on the DataTransfer object.
return false;
}
function handleDrop(e){
if (e.stopPropagation) {
e.stopPropagation(); // Stops some browsers from redirecting.
}
if (draggedItem != this) { //MH - swap if we're not dragging the item onto itself
var copy=$(this).clone(true,true);
var slot1 = $(this).attr("id");
var slot1Temp = slot1 + "temp";
var slot2 = $(draggedItem).attr("id");
$(this).replaceWith($(draggedItem).clone(true,true));
$(draggedItem).replaceWith($(copy).clone(true,true));
slotID = "slotID-" + slot1;
document.getElementById(slot1).id = slot1Temp;
document.getElementById(slot2).id = slot1;
document.getElementById(slot1Temp).id = slot2;
$.ajax({
type: "GET",
url: '/inventorySwap.php',
data: {'slot1': slot1,'slot2': slot2},
success: function(data) {
alert(data);
}
});
}
return false;
}
});
});
HTML/PHP 代码:
<div class='inventorySlot". $obj->slot_id ."'>
<img class='segmentListItem' draggable='true' id=slotID-". $obj->slot_id ." src='{$itemImage}' />
</div>
对不起,如果这个问题设置得有点奇怪,我通常会自己研究和学习。我不喜欢问问题,我完全被这个问题难住了。
我需要什么(与鼠标/电脑完美搭配) 将元素从 1 个 div 拖到另一个。在发布的代码中,它还更改了交换元素的 id 以匹配它们的 div 库存槽号。这是为了防止在更新数据库以在槽记录内交换时出错。
感谢您提供的所有帮助。
【问题讨论】:
-
在某些移动设备上似乎不会触发 drop 事件。
-
我知道拖动事件有效。如此处所示jsfiddle.net/ktxygdvq。
-
必须长按项目(我很好),我绝不擅长 javascript。并且玩过 jsfiddle 中发布的代码,但无法让它切换插槽。该脚本的原始版本来自 w3schools,只是在 jsfiddle 中更易于编辑和使用。
-
我会更多地研究这个答案,但到目前为止,我仍然无法在 div 之间交换图像。似乎有些人对那里的答案有疑问。在玩他们的演示并查看它的工作原理时,我不确定这是否能满足我的需要。最接近的事情是列表重新排序。我需要交换 2 div 中的所有内容,库存为 5x9,并希望它能够重新排列。感谢您的时间。我会继续玩他们所拥有的和我所拥有的,也许能够找到解决方案,我也会经常回来查看其他想法。
标签: javascript jquery mobile drag