Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
52 / 5 / 1
Регистрация: 11.09.2018
Сообщений: 324

Работает mousemove, а touchmove - Нет!

29.12.2021, 20:32. Показов 1544. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу игру на JS. Типа в сетке нужно найти слова и пометить их. На десктопах - мышой, на тачскринах - пальцем. Нашел методы touchstart, touchmove, и touchend. Обрадовался. Но оказалось, метод touchmove работает как-то "неправильно".

На десктопе все ОК (screen1). А на тачскринах выделяется только первый блок. Далее этот event вообще не вызывается. В консоли никаких ошибок нет!

Вот мой код

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
jQuery('.field').on('touchstart mousedown', function(){
    videl = true;
    arr_videl.length = 0;
    jumpCount = 0;
});
 
jQuery('.field').on('touchmove mousemove', function(){
    if(videl){
        field_id = this.id;
        field_id = field_id.slice(1);
        if(arr_videl.length > 0) var last_id = arr_videl[arr_videl.length - 1].slice(1);
        if(arr_videl.length > 1) var delta = arr_videl[1].slice(1) - arr_videl[0].slice(1);
        
 
        if(arr_videl.length == 0 || delta === undefined || (delta == 1 && field_id - last_id == 1) || (delta == horizontal_count && field_id - last_id == horizontal_count)){
            jQuery(this).css('color', 'blue');
            if(!arr_videl.includes(this.id))arr_videl.push(this.id);
        }
 
    }
    
});
Я использую jQuery, но пойдет решение и на чистом JavaScript.
Миниатюры
Работает mousemove, а touchmove - Нет!   Работает mousemove, а touchmove - Нет!  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.12.2021, 20:32
Ответы с готовыми решениями:

Не работает touchMove
Не корректно работает событие touchmove: На скаченных браузерах работает, но на стандартном андроид браузере работает первые событий 10,...

MouseMove не работает в виртуалке
Всем привет. У меня есть такой вопрос. Использую в примере самый простой код: Robot r=new Robot(); r.mousemove(x,y); Если запустить в...

SendInput (MouseMove) криво работает
Использую данный код: int SetInputPos(int x, int y) { int ScreenX = GetSystemMetrics( SM_CXSCREEN ); int ScreenY =...

6
Эксперт JS
 Аватар для DrType
6553 / 3624 / 1075
Регистрация: 07.09.2019
Сообщений: 5,877
Записей в блоге: 1
29.12.2021, 22:49
Не исключено, что источник проблемы не в коде, а в особенностях эмуляции touch-устройств вашим браузером.
0
52 / 5 / 1
Регистрация: 11.09.2018
Сообщений: 324
30.12.2021, 07:29  [ТС]
Не! Я выложил на хостинг. На смартфоне то же самое!
0
331 / 238 / 80
Регистрация: 15.11.2017
Сообщений: 453
Записей в блоге: 4
30.12.2021, 11:11
А я вот не увидел обработки тач событий.
Тач события куда сложней мышиных. Там много пальцев можно одновременно анализировать, есть объект event.touches со всеми касаниями.
Не забывайте, что браузеры при пальцетыкании просто эмулируют мышиные события для совместимости.
0
52 / 5 / 1
Регистрация: 11.09.2018
Сообщений: 324
30.12.2021, 12:37  [ТС]
Так что делать то? События touchstart и touchend далее у меня отлично срабатывают...
0
Эксперт JS
 Аватар для DrType
6553 / 3624 / 1075
Регистрация: 07.09.2019
Сообщений: 5,877
Записей в блоге: 1
30.12.2021, 12:46
А зачем вам нужно обрабатывать touchmove? Это событие возникает, когда в переделах элемента двигают пальцем. Но ячейки небольшие... Мне кажется, логику можно реализовать, обрабатывая другие события. Или нет?
0
52 / 5 / 1
Регистрация: 11.09.2018
Сообщений: 324
30.12.2021, 14:58  [ТС]
Ну я же в первом посте рассказал, мне нужно на тачскринах выделить слово. Каждая буква слова в отдельном блоке. На компьютерах уже работает, на телефонах - нет. Разумеется можно какие-то другие варианты, если touchmove совсем не годится...

Добавлено через 16 минут
Так, стоп! Если этот эвент работает только в пределах блока, то, может стоит навесить его на родительский блок? А ячейки выделять по координатам?

Добавлено через 1 час 49 минут
Ура, получилось!

Собрал в объект координаты каждой клетки

JavaScript
1
2
3
4
5
6
7
8
const FIELD_KOORD = {};
for(let i = 1; i <= field_count; i++){
    FIELD_KOORD['f' + i] = [];
    FIELD_KOORD['f' + i][0] = jQuery('#f' + i).offset().left;
    FIELD_KOORD['f' + i][1] = jQuery('#f' + i).offset().top;
    FIELD_KOORD['f' + i][2] = jQuery('#f' + i).offset().left + field_width;
    FIELD_KOORD['f' + i][3] = jQuery('#f' + i).offset().top  + field_width;
}
И далее вот такая обработка события на родительском блоке

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
jQuery('.game').on('touchmove', function(e){
    if(videl){
        let koordX = e.originalEvent.touches[0].pageX;
        let koordY = e.originalEvent.touches[0].pageY;
 
        for (let id in FIELD_KOORD) {
            if(FIELD_KOORD[id][0] < koordX && FIELD_KOORD[id][1] < koordY && FIELD_KOORD[id][2] > koordX && FIELD_KOORD[id][3] > koordY){
                field_id = id;
                break;
            }
        }
 
        jQuery('#' + field_id).css('color', 'blue');
        if(!arr_videl.includes(field_id))arr_videl.push(field_id);
    }
 
});
От mousemove, разумеется, убрал touchmove. События touchstart и touchend не менял.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.12.2021, 14:58
Помогаю со студенческими работами здесь

Почему не работает "touchmove"?
Здравствуйте, не знаю почему не работает touchmove (ст 53). Помогите пожалуйста. Ссылка https://codepen.io/AlexKor5/pen/xxRjPdv Если...

MouseMove для PictureBox не работает, если зажать кнопку вне компонента
Есть событие стабильно оно работает когда указатель мыши попадает на pictureBox1, а вот не работает когда нажата левая клавиша мыши и...

Touchmove
как определить, пользователь провел пальцем по экрану слева направо или наоборот? функцию подскажите, чтобы возвращала true, если...

touchmove event
Форумчане, подсобите, пжлста) наткнулся на touchmove. пробовал и так, и эдак. на телефоне не работает, да и на компьютере тоже. в общем...

CMA Rainford RWM 1044NDE. S/N:нет, нет выбора программы, бесконечно работает помпа
Модуль AR001870-HO серийника нет. Поломка заключается в следующем: при включении в розетку на дисплее отображаются ноли, дверка люка не...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru