html 如何设置拖动元素的样式

kjthegm6  于 2022-11-20  发布在  其他
关注(0)|答案(5)|浏览(387)

我可以使用一些事件来处理拖放操作:
https://developer.mozilla.org/en/DragDrop/Drag_and_Drop
有一个drag事件,它在元素被拖动时触发。我可以控制源元素的样式或目标可拖放容器,但如何设置浏览器创建的“ghost”元素的样式呢?
我想在元素位于不可拖动区域时删除“disabled”图标,并将其替换为“cursor-move”图标
以下是我目前掌握的情况:
http://jsfiddle.net/YkaCM/

nsc4cvqm

nsc4cvqm1#

您无法直接对其设置样式,因为它是开始拖动时元素外观的位图/副本:
http://jsfiddle.net/2EvGP/

编辑:

实际上,您可以通过在拖动开始时简单地更改元素的样式来实现这一点:http://jsfiddle.net/LULbV/

$('#draggable').bind('dragstart', function (e){

  [Set style here]

  setTimeout(function(){
    [Reset style here]
  }, 1);

  ...

});

这在Chrome 19中工作得很完美,并根据你在Firefox 13中的拖动方式显示样式的变化。你需要在拖放时重置拖动元素的样式。
(Note我有一台相当快的电脑,所以我不确定这个黑客是否还能在慢机器上工作)

kuuvgm7e

kuuvgm7e2#

另一种方法是只使用CSS,将元素的:active伪类样式化为所需的拖动样式。拖动副本将基于此状态创建。
然而,原始元素将保留此样式,因为浏览器似乎将其保持:active直到删除。为了避免这种情况,我们可以在一个非常短的时间内运行的动画中指定此样式。足以让浏览器复制此样式,但不要太短。0.1s似乎足够用于Chrome、Safari和Firefox。
https://jsfiddle.net/mLsw5ajr/
第一个
我在Firefox中发现的一个问题是,如果没有其他元素触发的事件(如drop),该元素将保持:active。要解决这个问题,我们可以在该元素外触发一个单击。

rqqzpn5f

rqqzpn5f3#

不太清楚其他浏览器,但是dataTransfer对象包含一个名为mozCursor的属性。这允许您在拖动状态下更改光标,但这是Mozilla的属性。
https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/mozCursor
在以下位置可以找到使用此选项的示例,在dragstart(设置为使用默认的“箭头”光标)、dragover(设置为使用自动拖动光标(带副本的箭头))和dragleave(重置为使用默认的“箭头”光标)上更改设置:
http://jsfiddle.net/YkaCM/4/
请尝试以下问题的答案:
Javascript: How can I set the cursor during a drag & drop operation on a website?
使用以下内容更新了dragover:

$('#droppable').bind('dragover', function (e) {
  $(this).addClass('over'); // new

  ...

http://jsfiddle.net/YkaCM/1/

eeq64g8w

eeq64g8w4#

基本上,您希望将特定样式应用于新创建的元素,这些元素是#droppable的子元素。

#droppable div { here your code }
mfpqipee

mfpqipee5#

你可以给被拖动的元素添加一个类,这样你就可以随意设置它的样式。

element.addEventListener("dragstart", (event) => {
  event.currentTarget.classList.add("dragging");
});

checkout https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/setData

相关问题