Javascript 当有东西跟随光标时检测鼠标悬停
我一直在开发一个在线文件系统,我希望用户能够将文件拖放到新的位置。我真的不喜欢默认的拖放视觉效果,所以我没有使用传统的方法。这就是我目前所拥有的 此代码位于.php文件中,该文件通过jQuery加载到主页面Javascript 当有东西跟随光标时检测鼠标悬停,javascript,jquery,html,drag-and-drop,Javascript,Jquery,Html,Drag And Drop,我一直在开发一个在线文件系统,我希望用户能够将文件拖放到新的位置。我真的不喜欢默认的拖放视觉效果,所以我没有使用传统的方法。这就是我目前所拥有的 此代码位于.php文件中,该文件通过jQuery加载到主页面 <td draggable = "true" ondragstart="dragFolder(event, \''.$folderId.'\', \''.$folderName.'\')"> <div class = "single-folder" on
<td draggable = "true" ondragstart="dragFolder(event, \''.$folderId.'\', \''.$folderName.'\')">
<div class = "single-folder" onMouseUp = "folderDropUp(event, \''.$folderId.'\');">
<div class = "single-folder-name" id = "single-folder-name-'.$folderId.'">
<span id = "single-folder-rename-'.$folderId.'" class = "rename-folder-hover">
'.$folderName.'
</span>
</div>
</div>
</td>
基本上它是这样做的,当鼠标在一个文件夹div上移动时,它会显示一个假拖动文件夹,id为folder\u drag\u image,跟随鼠标直到鼠标向上移动
当我想在新文件夹的顶部释放文件夹时,问题就出现了。下面是用于此的函数
function folderDropUp(e, newFolderId) {
alert(newFolderId);
isDown = true;
}
我去掉了ajax,因为这不是问题的一部分。如果您回顾第一个代码段,就会发现一个onMouseUp侦听器触发folderDropUp事件
问题是,如果我将鼠标拖动到带有伪拖动图像的文件夹上,folderDropUp函数不会启动。如果我只是从其他任何地方拖动鼠标,当功能启动时,它没有假拖动图像
我确实尝试了jQuery mouseup函数,但得到了相同的输出。我不知道这会有多大帮助,但使用jQueryUI,您可以执行以下操作: HTML: JS: 例如: 我猜这远不是一个很好的解决方案,但希望它能有所帮助
function folderDropUp(e, newFolderId) {
alert(newFolderId);
isDown = true;
}
<html>
<head>
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/themes/base/jquery-ui.css"/>
<script src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js"></script>
</head>
<body>
<table>
<tr>
<td>
<div class="single-folder">
<div class="single-folder-name" id="single-folder-name-nhaca">
<div id="single-folder-rename-nhaca" class="rename-folder-hover">
<div>Folder 1</div><div class="folder-drag-image" id="nhaca-drag-image">Folder 1</div>
</div>
</div>
</div>
</td>
<td>
<div class="single-folder">
<div class="single-folder-name" id="single-folder-name-other">
<span id="single-folder-rename-other" class="rename-folder-hover">
<div>Folder 2</div><div class="folder-drag-image" id="other-drag-image">Folder 2</div>
</span>
</div>
</div>
</td>
</tr>
</table>
</body>
</html>
.single-folder{
border: 1px solid black;
cursor: pointer;
width: 60px;
}
.folder-drag-image{
position: absolute;
height: 20px;
width: 60px;
border: 1px solid black;
display: none;
}
.droppable-ready-to-receive{
background-color: yellow;
}
$( document ).ready(function() {
//displaying draggable element based on hovered element
$(".single-folder").on("mouseenter", function(e){
var drag_image = $(this).find(".folder-drag-image");
drag_image.css({"display": "block", "top": $(this).offset().top + 20, "left": $(this).offset().left});
});
//resetting draggable element when moving outside the "single-folder" div
$(".single-folder").on("mouseleave", function(e){
var drag_image = $(this).find(".folder-drag-image");
drag_image.css("display", "none");
});
//resetting draggable element when not being dragged any longer
$(".folder-drag-image").draggable({
stop: function(e) {
var parent = $(this).parents(".single-folder");
$(this).css({"display": "none", "top": parent.offset().top, "left": parent.offset().left});
}
});
//defining what elements can be dropped and what to do when dropped
$(".single-folder").droppable({
accept: '.folder-drag-image',
hoverClass: "droppable-ready-to-receive",
drop: function(e, ui) {
console.log("Dropped folder " + ui.draggable.text() + " into " + $(this).find(".folder-drag-image").text());
//handle folder drop however you need from here
}
});
});