我知道可以设置dropEffect
,以更改拖放区上方的光标外观,但几乎没有选项:复制
,移动
,链接
,以及无
——无自定义或类似选项。
我曾尝试用Javascript和CSS更改游标,比如设置cursor:grabbing
当
ondragstart
被触发时。但在拖放区域上拖动时,浏览器会显示默认的移动光标。
不幸的是,我不能在解决方案中使用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>
为了弄明白这一点,我经历了很多痛苦。公认的答案是web上的最佳答案,但现在的最佳实践是使用元素的。setPointerCapture
事件,该事件允许您监听元素上类似拖动的行为并对其进行操作,而无需被限制在拖动
API的狭窄行为中。一种方法是:
el.onpointerdown = ev => {
el.onpointermove = pointerMove
el.setPointerCapture(ev.pointerId)
}
pointerMove = ev => {
console.log('Dragged!')
}
el.onpointerup = ev => {
el.onpointermove = null
el.releasePointerCapture(ev.pointerId)
}
最明显的礼物是,这里没有发现偷袭后门的光标劫持行为。
这是一个已知的问题在这里报告
拖动时,光标会自动变为正常。
我的尝试给了我以下几点。在带有抓取游标的元素上给出一个活动的。当它处于活动状态时,光标将更改,但一旦您启动拖动,它将自动更改。
我试图设置
body
光标在dragstart上抓取,但没有结果。甚至它也不起作用。
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();
};
css prettyprint-override">.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;
}
.draggable:active{
cursor : -moz-grabbing;
cursor: -webkit-grabbing;
cursor: grabbing;
}
.being-dragged{
background-color: red;
cursor : -moz-grabbing;
cursor: -webkit-grabbing;
cursor: grabbing;
}
<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>
浏览器似乎不允许在拖动开始时更改光标
如果jQuery不是一个选项,一种可能的解决方法是实现一个拖动
var onDragStart = function (event) {
event.preventDefault();
var clone = event.target.cloneNode(true);
clone.classList.add("dragging");
event.target.parentNode.appendChild(clone);
var style = getComputedStyle(clone);
clone.drag = {
x: (event.pageX||(event.clientX+document.body.scrollLeft)) - clone.offsetLeft + parseInt(style.marginLeft),
y: (event.pageY||(event.clientY+document.body.scrollTop)) - clone.offsetTop + parseInt(style.marginTop),
source: event.target
};
};
var onDragMove = function (event) {
if (!event.target.drag) {return;}
event.target.style.left = ((event.pageX||(event.clientX+document.body.scrollLeft)) - event.target.drag.x) + "px";
event.target.style.top = ((event.pageY||(event.clientY+document.body.scrollTop)) - event.target.drag.y) + "px";
};
var onDragEnd = function (event) {
if (!event.target.drag) {return;}
// Define persist true to let the source persist and drop the target, otherwise persist the target.
var persist = true;
if (persist || event.out) {
event.target.parentNode.removeChild(event.target);
} else {
event.target.parentNode.removeChild(event.target.drag.source);
}
event.target.classList.remove("dragging");
event.target.drag = null;
};
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 {
position: absolute;
cursor: pointer; /* IE */
cursor: -webkit-grab;
cursor: grab;
}
.dragging {
cursor: -webkit-grabbing;
cursor: grabbing;
background-color: red;
}
<div class="dropzone" onmouseover="onDragOver(event);">
Grab and drag block around
<div class = "draggable block"
onmousedown = "onDragStart(event);"
onmousemove = "onDragMove(event);"
onmouseup = "onDragEnd(event);"
onmouseout = "event.out = true; onDragEnd(event);"
>
I'm draggable
</div>
</div>
在拖放过程中显示鼠标图标旁边节点的半透明“副本”的最佳方法是什么? 基本上,我有彩色背景和文本标签的HBox,我想给出的外观,他们“粘”到鼠标光标时,他们被拖动。 如果用户能够直观地验证他们正在拖动什么,而不是仅仅看到鼠标光标变成各种拖动图标,那就很好了。当你拖动一些组件(如RadioButton)时,Scene Builder倾向于这样做。
Java自定义拖放--对TransferHandler没有回调。 我想为JPanel子类实现自定义拖放功能。I遵循标准DnD教程的指导方针: 拖放和数据传输 从表面上看,事情似乎很进步,但当我实际尝试时,我没有得到任何迹象表明任何DnD行为正在发生。事实上,没有调用我的TransferHandler中的任何方法。 所以,让我们回顾一下我所做的... 我创建了自己的容器类,它声明自己来扩展JPane
我正在编写的Android应用程序中使用Google MapsV2。创建映射并将所有标记添加到其中之后,我通过对映射上的每个标记使用使所有标记可拖动。 如果我这样运行代码,标记确实是可拖动的。但是,我希望在拖动标记时更改标记的图标或颜色,因此我设置了OnMarkerDragListener,如下所示: 但是,在添加了该代码块之后,标记就不再是可拖动的了。颜色在onMarkerDragStart和o
jQuery draggeble/sortable演示只显示如何删除可拖动的克隆(可拖动和可排序项具有相同的结构)。我想删除一个不同的DOM结构。例如,当我拖动一个简单的div时,拖动的元素会被转换成更复杂的DOM结构。请参阅jsfidler示例,注意帮助器是如何变化的,我想删除帮助器,但原始项被删除。 使用简单的可拖动项目和可拖放容器工作,但我希望能够将项目放在可排序容器的任何部分,并能够重新排
问题内容: 我有一个JavaScript Webapp,用户需要抓住背景才能移动整个屏幕。因此,我希望光标悬停在背景上时进行更改。在和CSS光标是非常理想的。当然,它们仅在Firefox中工作…其他浏览器是否具有等效的游标?我是否需要做一些比标准CSS游标更多的自定义操作? 问题答案: 我认为这可能是您正在执行的操作中最接近的标准光标值: move 表示要移动的东西。
问题内容: 我有许多heroshot图像,单击它们时会弹出模式弹出窗口。我试图使光标在图像上移动时变成放大镜。即使我的位置正确,以下CSS也似乎无法正常工作。 有没有人做过类似的事情?我不介意一个JavaScript解决方案(如果存在)。 编辑 :它可以在Safari中,但不能在Firefox中使用。 问题答案: 您的问题可能是光标URL在Mac的Firefox中不起作用。 通过使用关键字,可以在