Я пишу перетаскиваемый класс в 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>
element.
Однако, независимо от того, с каким дочерним узлом я взаимодействую, независимо от того, как далеко в 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>
... и каждый дочерний элемент также перемещается, когда он должен перемещать только родительский контейнер, к которому присоединен класс.