Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 30.01.2020
Сообщений: 17

Задача на перемещение букв и слова курсором

02.04.2021, 23:14. Показов 2372. Ответов 3

Студворк — интернет-сервис помощи студентам
Есть собственно задача
1.На странице должны быть размещены 2 объекта: input для ввода текста и button для применения результата
2.Пользователь вводит в input любую строку
3.Нажимает на button и под формой отображается введенная строка
4.Пользователь кликает на любую букву в сроке и она перемещается за курсором в любое место
5.Пользователь нажимает еще раз и буква устаналивает последнюю позицию курсора
6.Пользователь может перемещать не только одну букву, а разбросать все слово по всему документу
7.Если отпустить перемещаемый символ на место другого символа, то второй символ становися на предыдущее место перемещаемого. Они не накладываются друг на друга.

Нельзя использовать никакие готовые решения, а также библиотеки для перемещения объектов. Только чистый JS и css при необходимости.C 1 по 4 пункт сделал, дальше не понятно.Подскажите в каком направлении двигаться а то ступор появился.Заранее спасибо

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Dev-3 task</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
 
  <form>
    <input id="textValue" type="text" placeholder="Enter the string">
    <button id="btn">Click</button>
  </form>
  
<script src="index.js"></script>
</body>
</html>
CSS
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
form{
  display: flex;
  justify-content: space-evenly;
  align-items: center;
  margin: 0 auto;
  min-width: 400px;
  max-width: 30%;
  min-height: 150px;
  border:1px solid lightgrey;
  border-radius: 10px; 
}
 
.desc{
  display: flex;
  justify-content: center;
  align-items: center;
  margin: 0 auto;
  min-width: 400px;
  max-width: 30%;
  min-height: 60px;
  border:1px solid lightgrey;
  border-radius: 3px; 
  margin-top: 10px;
  font-size: 30px;
  text-transform: uppercase;
  font-weight: 700;
  position: relative;
  z-index: 1;
}
 
.positionAbs {
  position: absolute;
  z-index: 3;
}
 
input[type="text"]{
  width: 50%;
  padding: 12px 25px;
  border:2px solid lightslategrey;
  border-radius: 3px;
  font-size: 19px;
  font-weight: 600;
}
 
button{
  padding: 12px 25px;
  text-transform: uppercase;
  background: #000;
  color: #ffffff;
  border:1px solid #000;
  transition: all ease .5s;
  font-weight: 900;
  cursor: pointer;
  border-radius: 3px;
}
 
button:hover{
  transition: all ease .5s;
  background: lightslategrey;
  border:1px solid lightgrey;
}
 
span{
  cursor: pointer;
}
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
const input = document.querySelector('#textValue'),
      btn = document.querySelector('#btn');
      
 
btn.addEventListener('click',(e) => {
  e.preventDefault();
  createElementAndAddInDom();
});
 
function createElementAndAddInDom(){
  const form = document.querySelector('form');
  const div = document.createElement('div');
  const inputText = input.value.split('');
  input.value = '';
 
  div.classList.add('desc');
  form.insertAdjacentElement('afterend', div);
  createSpanAndText(div,inputText)
 
  let bodyChildren = document.body.children;
  deleteNextSiblingElement([...bodyChildren])
}
 
function deleteNextSiblingElement(elements){
  elements.forEach(element => {
   
    const nextDivDesc = element.nextElementSibling;
    if(element.nodeName === 'DIV' && element.className === 'desc' && nextDivDesc !== null){     
      nextDivDesc.remove();
    }
  })
}
 
function createSpanAndText(element,textArr){
  const fragment = document.createDocumentFragment();
    textArr.forEach(word => {
      const span = document.createElement('span');
      span.textContent = word;
      fragment.appendChild(span);
 
      grabWord(element,span)
    })
 
  element.appendChild(fragment)  
}
 
 
function grabWord(descContainer,wordElement){
  
  wordElement.addEventListener('click', e => {
  
    const word = e.target;
    word.classList.add('positionAbs');
    const container = document.querySelector('.desc');
   
    
    let listener = (e) =>{
      word.style.top = `${e.layerY}px`;
      word.style.left = `${e.layerX}px`;
    }
    container.addEventListener('mousemove', listener,false);
  
    descContainer.addEventListener('click', (e) => {
      if(e.target.nodeName === 'DIV'){
          container.removeEventListener('mousemove', listener,false)
      } 
    });
  })
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.04.2021, 23:14
Ответы с готовыми решениями:

1. Построить три множества: одно из букв данного слова H и второе из букв данного слова L, третье из букв слова K. Вывести на экран те буквы, которые
1. Построить три множества: одно из букв данного слова H и второе из букв данного слова L, третье из букв слова K. Вывести на экран те...

перемещение фигуры за курсором
Подскажите пожалуйста как можно сделать что бы во время нахождения мыши в canvas'е например тот же круг перемещался за курсором?

Перемещение Image за курсором
Всех с праздником)) Все кому я показываю свою курсовую игру, говорят что неплохо, но надо сделать так чтобы рука с пистолетом...

3
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
03.04.2021, 12:14
Цитата Сообщение от alexjunior Посмотреть сообщение
6.Пользователь может перемещать не только одну букву, а разбросать все слово по всему документу
"разбрасывание" побуквенное или какой-то иной механизм, который вами не описан?
0
0 / 0 / 0
Регистрация: 30.01.2020
Сообщений: 17
03.04.2021, 12:44  [ТС]
все как указано в тз, начиная с 5 пункта мне не совсем понятно
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
03.04.2021, 13:06
Цитата Сообщение от alexjunior Посмотреть сообщение
все как указано в тз
хреновенькое тз, я б за такое не взялся
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.04.2021, 13:06
Помогаю со студенческими работами здесь

Перемещение объекта за курсором
Всем привет. Короче сделал скрипт, всё класс: карта движется за курсором, но есть одно НО. Карту перемещает на огромные значения по оси Z и...

Перемещение панельке за курсором
Добрый день/вечер! У меня появилась проблема, заключается она в том, что я не могу написать скрипт, который отвечает за перемещение UI...

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

Перемещение изображения за курсором
Необходимо организовать передвижение изображения в след за курсором вслед за курсором. Определяем координаты, отображаем их, но...

Перемещение UI элемента за курсором
Добрый день/вечер! У меня появилась проблема, заключается она в том, что я не могу написать скрипт, который отвечает за перемещение UI...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru