我有一个dragenter
和dragleave
事件的工作示例,它们突出显示了应该删除文件的区域。
现在,如果我只是在我的dragenter区域内添加一个<span>
,highlighting does not work correctly了(当你将图像悬停在文本顶部时-突出显示消失)。正如你所看到的,dragleave
被多次调用。
我所做的更改是将Drop files here
替换为<span>Drop files here</span>
也有淘汰赛的代码在那里,但我相信这与错误无关。我知道问题是与事件冒泡,但
e.stopPropagation();
e.preventDefault();
return false;
字符串
没有帮助。任何想法如何使它与dom元素内部工作?
**P.S.**这只是一个简化的例子,看起来我无法正确地制作它(我在想,唯一的方法是通过JS解决它,而且似乎我描述的方式也可以用css解决它).抱歉,这个混乱.示例看起来更像this.不仅文本是在可删除的元素内,但是当你删除一些东西时,元素。这些元素是可单击的。
Malk解决方案的问题是:after
元素位于这些可单击元素的顶部,因此使它们不可单击。
3条答案
按热度按时间mkshixfv1#
看起来你可以将处理程序附加到一个位于span之后和之上的覆盖div上:
字符串
CSS
型
http://jsfiddle.net/rWWK5/
编辑
实际上,你根本不需要添加另一个元素。你可以用CSS
:after
创建一个伪元素,它应该可以覆盖内容。型
http://jsfiddle.net/ewng9/的
编辑2
你可以使用这种技术来覆盖拖动时的内容。你只需要将
.css({})
调用改为toggleClass()
,并将:after
放在新类上。http://jsfiddle.net/dKsmw/的
这也可以让你创建一个覆盖,着色的背景元素:
型
ufj5ltwl2#
我认为Malk's answer是有效的。当你拖放时,使用覆盖或掩码来放置放置区域和子区域。这可以防止你在
span
上遇到的问题我已经用你的最新例子创建了一个可以工作的Fiddle。
vxqlmq5t3#
我遇到了这个问题。而且,和大多数问题一样,它们可以用JavaScript解决。
和OP一样,我也不想让一个元素覆盖整个放置区,并使可点击的元素变成惰性。
本质上,只要确保鼠标位置在容器的边界框内即可。
在
dragleave
事件处理程序中,使用getBoundingClientRect
获取currentTarget
的边界框。拖动事件将具有表示鼠标位置的
clientX
和clientY
属性。检查鼠标位置福尔斯是否落在放置区的
top
、right
、bottom
和left
边缘内。如果落在边界框内,则提前返回,不再处理dragleave
事件。