Как избежать повторов?
Есть код:
v1.ondrop = drop_handler; v1.ondragover= dragover_handler; v2.ondrop = drop_handler; v2.ondragover= dragover_handler; v3.ondrop = drop_handler; v3.ondragover= dragover_handler; v4.ondrop = drop_handler; v4.ondragover= dragover_handler; k1.ondragstart=dragstart_handler; k1.ondragend = dragend_handler; k2.ondragstart=dragstart_handler; k2.ondragend = dragend_handler; k3.ondragstart=dragstart_handler; k3.ondragend = dragend_handler; k4.ondragstart=dragstart_handler; k4.ondragend = dragend_handler; k5.ondragstart=dragstart_handler; k5.ondragend = dragend_handler; k6.ondragstart=dragstart_handler; k6.ondragend = dragend_handler; k7.ondragstart=dragstart_handler; k7.ondragend = dragend_handler; k8.ondragstart=dragstart_handler; k8.ondragend = dragend_handler; Как избежать повторов? Тем более что до конца не ясно сколько будет v1..vn Спасибо |
miltorg,
сделать цикл или использовать родителя. |
Цитата:
А родителя это как? Намекните пожалуйста. Я даже не могу правильно сформулировать вопрос для Гугла Спасибо. |
Цитата:
Цитата:
На нем и будут показывать. |
Цитата:
<table class="vse"> <tr> <td> <div class="ramka"> <div class="zag_ramka"> 2021-08-21T05:00:00</div> <div class="otstup"> <div id="v1" data-myid="2523"> 2523 gggg </div> <br>----<br> <div id="v2" data-myid="2525"> 2525 sssssssss оллл </div> </div> </div> <div class="ramka"> <div class="zag_ramka"> 2021-07-09T05:00:00</div> <div class="otstup"> <div id="v3" data-myid="2585"> 2585 sssssss fffffff </div> <br>----<br> <div id="v4" data-myid="2586"> 2586 hhhhhh hhhhhhh <p>Нужен кран прораб 222322</p> </div> </div> </div> <td> <div class="kran"> <div id="k1" draggable="true">11111111</div> <div id="k2" draggable="true">22222222</div> <div id="k3" draggable="true">3333333</div> </div></table> <script> function dragstart_handler(ev) { console.log("dragStart"); } function dragover_handler(ev) { console.log("dragOver"); } function drop_handler(ev) { console.log("Drop"); } function dragend_handler(ev) { console.log("dragEnd"); } v1.ondrop = drop_handler; v1.ondragover= dragover_handler; v2.ondrop = drop_handler; v2.ondragover= dragover_handler; v3.ondrop = drop_handler; v3.ondragover= dragover_handler; v4.ondrop = drop_handler; v4.ondragover= dragover_handler; k1.ondragstart=dragstart_handler; k1.ondragend = dragend_handler; k2.ondragstart=dragstart_handler; k2.ondragend = dragend_handler; k3.ondragstart=dragstart_handler; k3.ondragend = dragend_handler; </script> |
Цитата:
|
class Drag { drop = drop_handler; dragover = dragover_handler; dragstart =dragstart_handler; dragend = dragend_handler; events = ['dragover', 'drop', 'dragstart', 'dragend']; constructor(targetSelector, elementSelector) { this.targetSelector = targetSelector; this.elementSelector = elementSelector; this.start(); } handleEvent(event) { let { type, target } = event; switch(type) { case 'dragover': case 'drop': target = target.closest(this.targetSelector); break; case 'dragstart': case 'dragend': target = target.closest(this.elementSelector) break; } if(target) this[type].call(target, event); } start() { this.events.forEach(type => document.addEventListener(type, this)); return this; } stop() { this.events.forEach(type => document.removeEventListener(type, this)); return this; } } const drag = new Drag('.drag-target', '.drag-element'); |
Цитата:
Пример конечно капец какой корявый... :( Что ты там гонощишь в итоге? |
Цитата:
|
drop_handler не срабатывает. А он нужен.
|
dragStart
dragOver вроде как срабатывают одновременно |
Или это так и должно быть. Стартанули и Тянем.
Над объектом и сбросили. |
Работает, нужен только маленький фикс:
this[type].call(target, event);-> if(target) this[type].call(target, event); :) https://jsfiddle.net/dwx6r2jo/ |
Абалдеть. Спасибо огромное.
|
for (let i=1; i < 5; i++) { window['v'+i].ondrop = drop_handler; window['v'+i].ondragover = dragover_handler; } for (let i=1; i < 4; i++) { window['k'+i].ondragstart = dragstart_handler; window['k'+i].ondragend = dragend_handler; } |
А как определить последний элемент vn ?
|
mv = document.querySelectorAll("[id^=v]"); mk = document.querySelectorAll("[id^=k]"); for (let i=0; i < mv.length; i++) { mv[i].ondrop = drop_handler; mv[i].ondragover = dragover_handler; } for (i=0; i < mk.length; i++) { mk[i].ondragstart = dragstart_handler; mk[i].ondragend = dragend_handler; } |
У меня покороче код?
Может не верно чего? Но вроде - работает. |
miltorg, так тоже можно. Только это не универсально и не поддерживаемо. Переиспользовать такой код нельзя.
|
Цитата:
Что значит - "не универсально"? - Для 3 строчек писать отдельный Класс? - "Не поддерживаемо"? - "Нельзя переиспользовать"? |
miltorg, дык суть в том что класс этот ты написал, вынес в свою библиотеку и потом переиспользуешь везде, где тебе понадобится что-то откуда-то куда-то перетягивать. Только классы подставляй.
Твоё же решение придётся копипастить и ручками править в каждом таком случае. Если ты уверен что этого больше нигда не понадобится - сойдёт, иначе лучше сразу закладывать универсальность. |
Цитата:
|
А этот код вообще ничего универсального не делает.
Он подключает неуниверсальные функции к неуниверсальным блокам. |
Часовой пояс GMT +3, время: 05:31. |