Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 07.01.2020
Сообщений: 4

Перемещение нескольких элементов одного класса мышью

07.01.2020, 14:11. Показов 2028. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Пишу шашки на js. Размещаю шашки на поле в js, присваиваю им класс le. Затем пытаюсь их перемещать, но двигается только одна шашка - самая первая. Почему не задействуются все элементы класса le?
Помогите, пожалуйста!

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
var elem;
           function  blue(x){
               elem = document.querySelector ('#o' + x);
          var d = document.createElement('img');
          d.src = 'blue.png';
          d.className = 'le';
          d.width = '150';
          d.height = '150';
          d.style= 'center';
          
          elem.appendChild(d);
}
           function fiol(x){
               elem = document.querySelector ('#o' + x);
          var d = document.createElement('img');
          d.src = 'fiol.png';
          d.className = 'le';
          d.width = '150';
          d.height = '150';
          elem.appendChild(d);
}
    
    var arr1=[], arr2=[];
    function createArray(len){ 
  for(var i = 1; i <= len; i++) { 
  arr1.push({ch: 1, x: i*2-1, y: 1});   blue(arr1[i-1].x);
  arr2.push({ch: 1, x: i*2+19, y: 5});  fiol(arr2[i-1].x);
    
  }
}
createArray(3); // передаём кол-во созд-х объектов в массиве
 
 
var ball = document.querySelector(".le");
 
ball.onmousedown = function(e) {
 
  var coords = getCoords(ball);
  var shiftX = e.pageX - coords.left;
  var shiftY = e.pageY - coords.top;
 
  ball.style.position = 'absolute';
  document.body.appendChild(ball);
  moveAt(e);
 
  ball.style.zIndex = 1000; 
 
  function moveAt(e) {
    ball.style.left = e.pageX - shiftX + 'px';
    ball.style.top = e.pageY - shiftY + 'px';
  }
 
  document.onmousemove = function(e) {
    moveAt(e);
  };
 
  ball.onmouseup = function() {
    document.onmousemove = null;
    ball.onmouseup = null;
  };
 
}
 
ball.ondragstart = function() {
  return false;
};
 
function getCoords(elem) {  
  var box = elem.getBoundingClientRect();
  return {
    top: box.top + pageYOffset,
    left: box.left + pageXOffset
  };
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.01.2020, 14:11
Ответы с готовыми решениями:

Перемещение нескольких объектов мышью
Всем привет. Столкнулся с такой проблемой. Создаю несколько объектов и нужно, что бы каждый объект можно было перетаскивать. Пока сделал...

Перемещение данных из одного элемента класса в другой (!)
Собственно задание такое: Описать класс, реализующий стек и работу с ним. 1.) Класс должен содержать следующие сведения об...

Реализовать перетаскивание мышью элементов из одного списка в другой и обратно
На форме два списка (Listbox). Реализовать перетаскивание мышью элементов из одного списка в другой и обратно.

5
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
07.01.2020, 16:45
Poscner, потому что метод querySelector найдет только первый из указанных.
Можно просто делегировать события и ловить на элементах с классом .le. Либо можете пог..нокодить, и назначить обработчики для каждой шашки в цикле, пробегая по коллекции полученной с помощью querySelectorAll.
https://developer.mozilla.org/... 0%B8%D1%8F
https://developer.mozilla.org/... electorAll
0
0 / 0 / 0
Регистрация: 07.01.2020
Сообщений: 4
09.01.2020, 11:53  [ТС]
Не подскажите как сделать цикл с querySelectorAll для моей задачи? Стою на месте уже какой день
0
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
09.01.2020, 17:12
Poscner, это странно, ибо более чем очевидно - строчки с 36 по 66 в цикл, а перед ним получить коллекцию
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
var balls = document.querySelectorAll(".le");
for (let i = 0; i < balls.length; i++) {
  balls[i].onmousedown = function(e) {
 
    var coords = getCoords(ball);
    var shiftX = e.pageX - coords.left;
    var shiftY = e.pageY - coords.top;
 
    balls[i].style.position = 'absolute';
    document.body.appendChild(balls[i]);
    moveAt(e);
 
    balls[i].style.zIndex = 1000; 
 
    function moveAt(e) {
      balls[i].style.left = e.pageX - shiftX + 'px';
      balls[i].style.top = e.pageY - shiftY + 'px';
    };
 
    document.onmousemove = function(e) {
      moveAt(e);
    };
 
    balls[i].onmouseup = function() {
      document.onmousemove = null;
      balls[i].onmouseup = null;
    };
 
  };
 
  balls[i].ondragstart = function() {
    return false;
  };
};
Но опять же напоминаю, что данная конструкция имеет неприятный запах. Почитайте лучше о том, что такое делегирование событий. И перепишите - код станет чище, не засерена очередь событий(как это происходит в случае с коллекцией).
0
0 / 0 / 0
Регистрация: 07.01.2020
Сообщений: 4
09.01.2020, 18:27  [ТС]
Спасибо большое!
0
09.01.2020, 18:29

Не по теме:

Poscner, не за что :)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.01.2020, 18:29
Помогаю со студенческими работами здесь

Выделение и перемещение нескольких элементов
Здравствуйте! Два вопроса: 1) Как мышью выделить несколько drag &amp; drop элементов в группу? Во время выделения должна быть видна...

Обработка click одного из элементов одного класса
Доброго времени суток! Имеется список, элементы списка имеют один класс. При обработке события по клику одного элемента...

Сумма нескольких элементов одного поля
Помогите, пожалуйста, сделать цену за все комплектующие в одном поле, через Sum ругается..

Перемещение фигур мышью
помогите добавить фигуры(круг еще один прямоугольник треугольник) чтоб они перемещались мышкой зарание спасибо вот код для...

Перемещение скрола мышью
Доброго времени суток. Необходимо через WinApi нажать на скрол компонента и протянуть его постепенно сверху донизу. Теоретически все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru