Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.08.2018, 23:17
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Как реализовать смену порядка перетаскиванием
Можете подсказать как реализовать смену порядка div-блоков перетаскиванием мышкой?
Я видел вроде в jQuery UA есть какая та реализация. Но это нужно две библиотеки добавлять.

А на нативном JS сложно реализовать такую задачу? Можете подкинуть идею или ссылку на то как такое организовать? Может какую простую библиотеку посоветуете или идею на реализацию.

У меня дивы примерно 200х250px горизонтально в ряд. При заполнении ряда могут становится вторым, третьим рядом. Что то у меня даже как начать JS нет идей.
Наверное нажатая кнопка мыши и следить за координатами курсора, при этом накинуть z-index на выбранный див... Но лучше спрошу, может кто даст какой совет.
Ответить с цитированием
  #2 (permalink)  
Старый 15.08.2018, 23:38
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Сообщение от MC-XOBAHCK
А на нативном JS сложно реализовать такую задачу?
нативный
Ответить с цитированием
  #3 (permalink)  
Старый 15.08.2018, 23:50
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Rise, спасибо! Примеры увидел, теорию по Drag'n'Drop в учебнике нашёл. Буду изучать и пробовать решить свою задачу.
Ответить с цитированием
  #4 (permalink)  
Старый 17.08.2018, 13:31
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Блин, что то я запутался и нахожусь в самом начале.
Если кто то сможет посмотреть и подсказать, то у меня такой макет HTML:
<style>.skates{display:flex;flex-wrap:wrap;justify-content:flex-start}.skat-size{display:flex;flex-direction:column;flex-basis:215px;margin:15px 3px 15px;padding:0 1px 1px;border:solid 1px #ccc;max-width:212px}.skat-size:hover .skat__btn{opacity:0.4}.skat-size .skat__btn:hover{opacity:1;cursor:all-scroll}.dragPanel{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='18' viewBox='0 0 10 18'%3E%3Cpath fill='%23010202' d='M4 5H0V1h4v4zm6-4H6v4h4V1zM4 7H0v4h4V7zm6 0H6v4h4V7zm-6 6H0v4h4v-4zm6 0H6v4h4v-4z'/%3E%3C/svg%3E");width:10px;height:18px;margin-left:5px}.skat__panel{height:21px}.skat__btn{display:inline-block;opacity:0;margin-top:3px}</style>

<div class="skates">
        
        <div class="skat-size">
            <div class="skat__panel">
                <div class="dragPanel skat__btn" title="Переместить"></div>
            </div>
            <div class="skat-params"><h4>Блок 1</h4></div>
        </div>

        <div class="skat-size">
            <div class="skat__panel">
                <div class="dragPanel skat__btn" title="Переместить"></div>
            </div>
            <div class="skat-params"><h4>Блок 2</h4></div>
        </div>

        <div class="skat-size">
            <div class="skat__panel">
                <div class="dragPanel skat__btn" title="Переместить"></div>
            </div>
            <div class="skat-params"><h4>Блок 3</h4></div>
        </div>
        
</div>

Три однотипных блока, при наведении на блок - появляется область-элемент для перетаскивания.
Эти блоки генерируются через class, поэтому события отслеживаю по event.target.
Если я правильно понял, первым делом при нажатой кнопке мыши добавляю для блока атрибут draggable="true". Получается такое начало JS:
// Перетаскивание [url]https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API[/url]
document.querySelector('.skates').addEventListener('mousedown', function(e) {
    let el = event.target;
    
    if (el.className == 'dragPanel skat__btn') {

        el.parentNode.parentNode.setAttribute('draggable', true);



        document.querySelector('.skates').addEventListener('mouseup', function (e) {
            console.log('Отпустил кнопку');
        })
    }
})

А что делать дальше? То ли собирать DataTransferItemList и создавать DataTransferItem??? - я потерялся. Может кто поможет.

Последний раз редактировалось MC-XOBAHCK, 17.08.2018 в 13:35.
Ответить с цитированием
  #5 (permalink)  
Старый 19.08.2018, 19:06
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

MC-XOBAHCK,
без mouse-событий, только drag&drop-события, не подходит?
Ответить с цитированием
  #6 (permalink)  
Старый 19.08.2018, 19:13
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Да никто нативным d&d кроме как для файлов и не пользуется, слишком мутно, криво и неудобно.)
__________________
29375, 35
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как реализовать динамичное добавление тегов modelfak23 jQuery 1 19.06.2015 14:27
Как правильно реализовать такой функционал? Julian Общие вопросы Javascript 3 16.01.2015 12:34
Как правильно реализовать наследование? Universe Общие вопросы Javascript 9 10.04.2014 16:05
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Как это реализовать на JS Bezlyj Общие вопросы Javascript 6 06.03.2012 09:20