我有一个HTML页面,其中有一些可拖动的元素。我们的规格说,悬停在这样的元素鼠标光标 * 必须 * 是grab
x1c 0d1x,并在拖动光标 * 必须 * 是grabbing
。
我知道可以设置dropEffect
来改变放置区上方的光标外观,但选项很少:copy
、move
、link
和none
--无 * 自定义 * 等。
我试过用Javascript和CSS来改变光标,比如当ondragstart
被触发时设置cursor: grabbing;
。但是在拖放区拖动时,浏览器默认的移动光标出现了。
所以问题是:在拖动过程中显示抓取光标(
)时缺少了什么?
不幸的是,我不能在解决方案中使用jQuery或其他帮助库。提前感谢!
var onDragStart = function(event) {
event.dataTransfer.setData("Text", event.target.id);
event.currentTarget.classList.add("being-dragged");
};
var onDragEnd = function(event) {
event.currentTarget.classList.remove("being-dragged");
};
var onDragOver = function(event) {
event.preventDefault();
};
.dropzone {
width: 500px;
height: 200px;
background-color: silver;
}
.block {
position: absolute;
background-color: pink;
margin: 10px;
border: 20px solid pink;
}
.draggable {
cursor: -webkit-grab;
cursor: grab;
}
.being-dragged {
cursor: -webkit-grabbing;
cursor: grabbing;
background-color: red;
}
<div class = "dropzone"
ondragover = "onDragOver(event);"
>
Grab and drag block around
<div class = "draggable block"
draggable = "true"
ondragstart = "onDragStart(event);"
ondragend = "onDragEnd(event);"
>
I'm draggable
</div>
</div>
7条答案
按热度按时间mbyulnm01#
似乎浏览器不允许在拖放操作开始时改变光标。我不知道为什么,但这是一个已知的问题,我相信他们会在未来。
如果jQuery不是一个选项,一个可能的方法是从头开始实现拖放,使用鼠标事件并克隆源元素:
zysjyyx42#
这是此处报告的已知问题
拖动时,光标将自动变为正常。
我的尝试给了我以下。给了一个
active
的元素与抓取光标。当它是活动的,光标会改变,但一旦你开始拖动,它会自动改变。我试图设置
body
光标在dragstart上抓取,但没有结果。甚至它也不起作用。vxf3dgd43#
我经历了很多痛苦试图弄清楚这一点。公认的答案 * 是 * 在web上最好的答案,但现在的最佳实践是使用元素的
.setPointerCapture
事件,它允许您侦听和操作元素上的拖动行为,而不会被限制在Drag
API的狭窄行为中。一种方法是这样的:明显的礼物是事实上,没有光标劫持被发现在后门偷偷在这里。
ubby3x7f4#
我对纯
JavaScript
的可拖动元素只知道一点点,很抱歉我不能解释下面的内容。问题是
onDragEnd
永远不会被触发,所以我搜索了一些东西,找到了这个带有可拖动元素的example。现在,如果你改变
onDragStart
事件的函数,它会工作,但我认为你必须以另一种方式改变光标,比如改变主体onDragStart
的类。一体机
daupos2t5#
我通过使用mouseover事件来定义光标,然后稍微移动移动坐标以保持鼠标指针在元素内来解决这个问题。
t2a7ltrp6#
试试这个!对我很有效!
jm2pwxwz7#
我花了一段时间来寻找解决方案,以这个技巧结束。我觉得这是最好的方式少的代码和apt工作。