Я пишу перетаскиваемый класс в vanilla js с нуля (это НЕ связано с перетаскиванием jQuery), и он отлично работает, только мои слушатели запускаются для дочерних элементов выбранного узла. Я пробовал e.stopPropagation()
внутри слушателей, но, похоже, это не меняет результат.
Вот фрагмент кода из класса:
setListeners() {
const targets = document.getElementsByClassName("-jsDraggable");
[...targets].forEach(elem => {
elem.addEventListener("mousemove", e => this.handleMouseMove(e));
elem.addEventListener("mousedown", e => this.handleMouseDown(e));
elem.addEventListener("mouseup", e => this.handleMouseUp(e));
});
}
... и например:
<ul class="-jsDraggable">
<li>No drag</li>
<li>No drag</li>
<li class="-jsDraggable">Can drag this item</li>
<li>No drag</li>
</ul>
В этом сценарии я бы хотел, чтобы были затронуты как <ul class="-jsDraggable">...</ul>
, так и одиночный <li class="-jsDraggable">...</li>
внутри, где перетаскивание из одного из других элементов списка просто перетаскивало основной элемент <ul class="-jsDraggable">...</ul>
.
Однако независимо от того, с каким дочерним узлом я взаимодействую, независимо от того, насколько далеко он находится в DOM по сравнению с узлом с классом, он запускает обработчики.
Любая помощь будет принята с благодарностью!
РЕДАКТИРОВАТЬ: Еще один пример для уточнения:
<article class="-jsDraggable">
<header>
<h1>Heading</h1>
</header>
<main>
<p>...</p>
</main>
</article>
Независимо от того, куда я перетаскиваю этот элемент <article>
, он должен перетаскивать всю группу HTML как единое целое (поскольку родитель всего этого имеет класс). Однако в настоящее время он действует примерно так:
<article class="-jsDraggable">
<header class="-jsDraggable">
<h1 class="-jsDraggable">Heading</h1>
</header>
<main class="-jsDraggable">
<p class="-jsDraggable">...</p>
</main>
</article>
... и каждый дочерний элемент также перемещается, когда он должен перемещать только родительский контейнер, к которому прикреплен класс.
mousedown
запускалось только тогда, когдаe.target
является.-jsDraggable
, иначе обработчик также будет запускаться, когда щелкнутый дочерний элемент не является.-jsDraggable
. (не совсем уверен, что вы хотите делать с mousemove и mouseup, вы можете или не хотите проверять там) (живой фрагмент будет иметь большое значение для возможности отладки проблемы) - person CertainPerformance   schedule 07.02.2019-jsDraggable
, но в настоящее время каждый отдельный узел, вложенный в узел с классом, также можно перетаскивать. - person ReactionJackson   schedule 07.02.2019