html跳转 effect,javascript – HTML5拖放effectAllowed和dropEffect

这两个属性之间的关系似乎是一些混乱的根源。基于阅读

the MDN site和

MSDN我以为我已经弄清楚了,但现在我不确定….

我想到当拖动一个元素时,可以指定允许发生的元素(即可以移动,复制,链接到一个effectAllowed常量)。这是effectAllowed属性。

不同的放置目标做不同的事情,所以当你拖动另一个元素时,它可以控制在“drop”上发生哪个“effect”,这是“dropEffect”属性。所以我建立了一个简单的例子来测试这个理论。

$("[draggable='true']").on("dragstart", function(e) {

var dt = e.originalEvent.dataTransfer;

dt.effectAllowed = "copyMove";

dt.setData("text/plain", "Foo");

});

$("#dropZoneCopy").on("dragover", function(e) {

var dt = e.originalEvent.dataTransfer;

dt.dropEffect = "copy";

e.preventDefault();

});

$("#dropZoneMove").on("dragover", function(e) {

var dt = e.originalEvent.dataTransfer;

dt.dropEffect = "move";

e.preventDefault();

});

我有一个用户可以拖动的框 – 允许的效果是“copyMove”。我有一个框将dropEffect设置为复制,一次将dropEffect设置为移动。我期望的是,当用户拖动“复制框”时,光标将改变以指示将发生副本,因为我拖动“移动框”,光标更改以指示移动…

只有Chrome的行为正如我所料。这是因为其他浏览器错误,还是因为我不明白规格。正确的

UPDATE

一些更多的信息从这个。

在Firefox和Chrome中,如果您有一个dragsource表示effectAllowed是“copy”,并且dropzone表示dropEffect为“move”,那么即使取消该事件,也不能放在放置区域。我认为dropEffect对于读取ondrop会有用,看看该怎么做,但Chrome不可用,dropEffect不会出现在drop handler上,例如试图读取dataTransfer.dropEffect会说dropEffect是“none”,即使你把它设置为dragover。如上所述设置dropEffect会影响光标的显示方式。

在Firefox上,dropEffect在拖放后设置在dropzone上,但不会影响鼠标光标的显示。在Firefox窗口中按ctrl键会影响鼠标的显示,但不影响dropEffect属性。

该规范表明,源可以监听dragend事件以查看发生了什么。它应该在此事件中查看dropEffect。 Chrome,Mozilla和Safari可以像您希望的那样工作,拖放效果会显示在dragend事件中。在IE中,如果允许的效果是简单的值,例如“copy”然后任何成功的drop将导致该值在dragend上显示为dropEffect。如果effectAllowed是复合值,如copyMove,并且您尝试通过设置dropEffect选择“移动”,那么您将无法运行,这将在dragend的源代码中以dropEffect =“none”的形式出现。你被卡住了一个光标&一个dropEffect,那就是如果该效果是一个简单的值,那么在拖动时设置的effectAllowed是有效的。有趣的是,当您至少从IE11拖入本机应用程序(并且我假设较早)时,dropEffect似乎是通过的。

其他笔记

在Safari上的mac-effectAllowed无法以编程方式设置,因此任何设置的dropEffect都是有效的。当您按下cmd键,effectAllowed变为“move”,当您按alt键时,“EffectAllowed”变为“copy”。此后,它可以像您所希望的那样工作,如果dropEffect不是这些effectAllow中的一个,浏览器不允许该拖放。

更多信息

我已经花了一些空闲时间在HTML5拖放库上编写了一些关于这个文档的其他问题,如果你有兴趣,请看看

the project

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值