Перемещение элемента из блока в блок

180
22 апреля 2018, 22:06

Добрый день!
Подскажите пожалуйста как можно реализовать перемещение выбранного элемента в нужное место по клику на него?
Вот живой пример https://www.fantasydraft.com/contest/831451/
В левом блоке выбираем элемент - кликаем на стрелочку - он отображается в правом блоке (точнее перемещается). Создаю сайт для себя и небольшой компании друзей. Решил писать на phph, но времени на изучение не хватает. Поэтому прошу помочь, стараюсь находить готовые примеры и реализовывать их по мере необходимости. Может найдется волонтер, который подскажет на примере как это делается?

Answer 1

Это делается средствами JavaScript, как и любая интерактивность на стороне клиента (а PHP - язык для серверных скриптов, на нем сделать такое не получится).

Реализовать можно использованием метода элемента appendChild() в слушателе события click.

// выбираем из DOM два родительских элемента, между которыми будем перемещать дочерние 
var setL = document.getElementById('left'), 
    setR = document.getElementById('right');  
// заполнение дочерними элементами, для простоты примера, они будут строчными (это не имеет значения: с блоками принцип тот же) 
for (let el, colorSt, i = 1; i <= 15; i++) { 
  setTimeout(() => { 
    colorSt = `hsl(${Math.floor(Math.random() * 360)}, 100%, 67%)`;  
    setL.insertAdjacentHTML('beforeend', `<span style="background-color: ${colorSt}"></span>`);  
  }, i * 33);  
} 
// добавляем обработчик клика родительским элементам 
setL.addEventListener('click', onSetElemClick); 
setR.addEventListener('click', onSetElemClick); 
 
// обработчик, логика которого крайне проста: если цель (дочерний элемент) не в родителе с которым сравниваем - перемещаем в него 
function onSetElemClick(e) { 
  switch (e.target.parentElement.id) { 
    case 'left' : setR.appendChild(e.target); break;  
    case 'right': setL.appendChild(e.target);  
  } 
}
#container { 
  display: flex;  
  justify-content: space-between;  
} 
 
.set { 
  flex: 0 0 calc(50% - 1.4em); min-height: calc(100vh - 30px);  
  display: inline-flex; flex-wrap: wrap;  
  align-content: flex-start;  
  padding: 0.3em;  
  box-shadow: inset 0 2px 5px 0 #0002;  
  background-color: #eee;  
} 
 
.set span { 
  width: 3em; height: 3em; margin: 0.3em;  
  box-shadow: 0 2px 5px -2px #0004;  
  transition: transform, 0.2s ease-out;  
} 
.set span:hover { transform: scale(1.1); }
<div id="container"> 
  <div id="left" class="set"></div> 
  <div id="right" class="set"></div> 
</div>

READ ALSO
подключение xampp+oracle

подключение xampp+oracle

xampp не видит oracle, instantclient и oracle 12c установил, затем указал путьВ чем может быть ошибка?

187
Глобальная установка composer

Глобальная установка composer

Когда composer установлен глобально в usr/local/bin то как осуществляется работа с большим количеством проектов на сервере? У каждого свой отдельный...

166
Перенос значений переменной из js в php

Перенос значений переменной из js в php

Почему ничего не выводится?

130
Проблема с Ajax на WordPress

Проблема с Ajax на WordPress

Пытаюсь внедрить ajax фильтр по цене в WordPress, но он упорно не хочет работать, возвращает пустой результат

141