Страницы

Поиск по вопросам

Показаны сообщения с ярлыком мышь. Показать все сообщения
Показаны сообщения с ярлыком мышь. Показать все сообщения

воскресенье, 12 января 2020 г.

wheel event и сенсорная мышь

#javascript #мышь


Столкнулась с проблемой при отлавливания события wheel при использовании сенсорной мыши.
Дело в том что у мыши с колёсиком wheel срабатывает при переключении порога (или
как там называется шаг прокрутки), а у мышей сенсорных всё куда печальнее.
Во первых для сенсорной мыши не обязательно держать палец на тачпаде чтобы она продолжала
скроллить, то есть если Вы сильно прокрутили пальцем на тацпаде то событие wheel будет
срабатывать ещё некоторое время (а то и секунд 7). Всё это сделано как Я понимаю для
смягчения скролла для удобного (пафосного) использовании сенсорных мышей.

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

Суть вопроса в следующем. Как отловить или как отличить что событие сработало в момент
когда палец на тачпаде, и это не остаточные вызовы которые выкидывает мыши для смягчения
скролла.

Уже пробовала писать скрипт чтобы отловить все события промежуток которых составляет
50 миллисекунд, но тщетно так как если для одних мышей и настроек оно и будет игнорировать
лишние события то для других нет или же вообще проигнорит. Так что на время полагаться
тут не стоит.

Может есть какое-то свойство что хранит данные которые помогут различить нормальный
wheel от псевдо wheel
    


Ответы

Ответ 1



На событие wheel повесить счетчик += Установить маркер, игнорирующий новые события wheel, пока длится текущее. Через определенный интервал проверять, изменилось ли значение счетчика. Если изменилось - wheel еще происходит, если осталось прежним - событие wheel завершено, убираем интервал и убираем маркер. Важно! Интервал должен быть небольшим, иначе в счетчик может попасть wheel из нового пользовательского события, а нас интересует только текущее. https://jsfiddle.net/rafaylik/sLjyyfox/ []

пятница, 12 июля 2019 г.

Масштабирование страницы колёсиком мыши

Подскажите, как реализовать масштабирование страницы колёсиком мыши, без применения каких-либо клавиш дополнительно?


Ответ

Благодарю за помощь, сам разобрался.Вот кому интересно: //Реализация масштабирования при помощи скролинга колёсиком мыши
//Переменные var delta; // Направление колёсика мыши //Объявление переменной значения зума var isCall = false; if(!isCall){ var zoom = 1; isCall = true;//Чтобы начальное значение было присвоено 1 раз }
//Функция для добавления обработчика событий function addHandler(object, event, handler){ if(object.addEventListener){ object.addEventListener(event, handler, false); }else if(object.attachEvent){ object.attachEvent('on' + event, handler); }else alert("Обработчик не поддерживается"); }
// Добавляем обработчики для разных браузеров addHandler(window, 'DOMMouseScroll', wheel); addHandler(window, 'mousewheel', wheel); addHandler(document, 'mousewheel', wheel);
// Функция, обрабатывающая событие function wheel(event){ event = event || window.event; // Opera и IE работают со свойством wheelDelta if (event.wheelDelta){ // В Opera и IE delta = event.wheelDelta / 120; // В Опере значение wheelDelta такое же, но с противоположным знаком if (window.opera){ delta = -delta;// Дополнительно для Opera } }else if(event.detail){ // Для Gecko delta = -event.detail / 3; } // Запрещаем обработку события браузером по умолчанию if (event.preventDefault){ event.preventDefault(); }else{ event.returnValue = false;//Для ослика }
//Выполняем зум if(delta > 0){ zoom += 0.1;//Шаг document.body.style.MozTransform = zoom; // для FireFox document.body.style.OTransform = zoom; // для Opera document.body.style.zoom = zoom; }else{ zoom -= 0.1;//Шаг document.body.style.MozTransform = zoom; // для FireFox document.body.style.OTransform = zoom; // для Opera document.body.style.zoom = zoom; } }

суббота, 9 марта 2019 г.

wheel event и сенсорная мышь

Столкнулась с проблемой при отлавливания события wheel при использовании сенсорной мыши. Дело в том что у мыши с колёсиком wheel срабатывает при переключении порога (или как там называется шаг прокрутки), а у мышей сенсорных всё куда печальнее. Во первых для сенсорной мыши не обязательно держать палец на тачпаде чтобы она продолжала скроллить, то есть если Вы сильно прокрутили пальцем на тацпаде то событие wheel будет срабатывать ещё некоторое время (а то и секунд 7). Всё это сделано как Я понимаю для смягчения скролла для удобного (пафосного) использовании сенсорных мышей.
Сразу скажу что у меня мышь майкрософта и что продолжительность срабатывания самого события может варьироваться от самой мыши и от настроек компа (уже тестировали).
Суть вопроса в следующем. Как отловить или как отличить что событие сработало в момент когда палец на тачпаде, и это не остаточные вызовы которые выкидывает мыши для смягчения скролла.
Уже пробовала писать скрипт чтобы отловить все события промежуток которых составляет 50 миллисекунд, но тщетно так как если для одних мышей и настроек оно и будет игнорировать лишние события то для других нет или же вообще проигнорит. Так что на время полагаться тут не стоит.
Может есть какое-то свойство что хранит данные которые помогут различить нормальный wheel от псевдо wheel


Ответ

На событие wheel повесить счетчик += Установить маркер, игнорирующий новые события wheel, пока длится текущее. Через определенный интервал проверять, изменилось ли значение счетчика. Если изменилось - wheel еще происходит, если осталось прежним - событие wheel завершено, убираем интервал и убираем маркер.
Важно! Интервал должен быть небольшим, иначе в счетчик может попасть wheel из нового пользовательского события, а нас интересует только текущее.
https://jsfiddle.net/rafaylik/sLjyyfox/
[]