我正在为WordPress开发一个媒体导入插件。我试图实现拖放功能,以重新排序用户导入的媒体元素(音频和/或图像)。我有一个<div>
标签(我们称之为媒体 div),可容纳多达三个其他<span>
、<img>
或<audio>
标签。因此,我将所有已导入的媒体资产显示在一行中,并希望能够拖放以重新排序media divs。我没有问题使用html5实现基本的拖放。我遇到的问题是,当我点击media divs内的媒体子元素(<audio>
或<img>
)时,子元素成为拖动事件的目标。是否有任何方法可以重置拖动事件的目标,使整个media div被拖动而不仅仅是媒体元素?我已经研究过e.stopPropogation()
并阅读了冒泡和捕获的相关知识,但是我尝试利用这些的每种方式都没有解决我的问题。我是否缺少了什么?如果可能的话,我更喜欢避免使用jQuery,绝不能使用任何库或框架。
简短总结:当单击子元素时,如何使父元素成为拖动事件的目标?
<div class="npr-import-media npr-import-audio npr-import-images" id="media-container">
<div class="npr-import-media-container" draggable="true">
<audio src="<?php echo $audio->format->mp4->{'$text'}; ?>" controls></audio>
<span class="npr-media-delete">X</span>
</div>
<div class="npr-import-image-container npr-import-media-container" draggable="true">
<img class="npr-import-image" src="<?php echo $image->src; ?>" >
<span class="npr-import-image-caption"><?php echo $image->caption->{'$text'} ?></span>
<span class="npr-media-delete">X</span>
</div>
<div class="npr-import-add-media npr-import-media-container">
Add Media+
</div>
</div>
这是我的代码的HTML部分。原本还有一些PHP功能来循环遍历原始源材料以显示从原始文章导入的所有媒体元素,但我认为没有必要包括它们。
draggable = true
。但是当我点击 media div 的子元素时,它也必须是可拖动的,因为它成为了被拖动的对象,而不是整个 _media div_。 - heavygl0wstopPropagation()
,都没有改变任何东西。我现在想要使用捕获,并在ondragstart
事件开始时检查ev.target.className
是否是我想要的。如果不是,我将退出函数并让捕获处理其余部分。 - heavygl0w