Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   onwheel событие (https://javascript.ru/forum/events/74900-onwheel-sobytie.html)

Nlk 15.08.2018 10:04

onwheel событие
 
Добрый день!

Скажите пожалуйста, делаю onwheel слайдер столкнулся с проблемой. Данная строчка постоянно выдает Undefined при отсутствии события скролла:

event.deltaY || event.detail || event.wheelDelta;


Можно ее как нибудь изолировать что ли? Ведь пользователь иногда скролит а иногда использует клавиши для прокрутки слайдера соответственно сролла в этот момент не происходит и браузер видит Undefined здесь: event.deltaY.
Спасибо

рони 15.08.2018 10:31

Nlk,
делайте макет, всё что вы написали выше, это для телепатов.

ksa 15.08.2018 11:10

Цитата:

Сообщение от Nlk
Данная строчка постоянно выдает Undefined при отсутствии события скролла:
event.deltaY || event.detail || event.wheelDelta;

Тут кагбэ нужно понимать как работает логическое "ИЛИ"... ;)
Цитата:

Логическое ИЛИ (||)
expr1 || expr2

Возвращает expr1, если оно может быть преобразовано к true; в ином случае возвращает expr2. Так что, при вызове с булевыми значениями, || вернет true только в том случае, когда хотя бы один операнд истинен, иначе вернет false.
https://javascript.ru/boolean-operators

Nlk 15.08.2018 12:44

Всю портянку наверно не к чему выкладывать ..
// Проверка произошедшего события - onScroll или keydown
function checkKeyOrScroll(event) {
    if (deltaKey) { // Если deltaKey не пусто значит был keydown
        deltaScroll = deltaKey;
        start(deltaScroll);
    } else {
        deltaScroll = event.deltaY || event.detail || event.wheelDelta;
        start(deltaScroll);
    }
}
// Запуск следующего слайда
function start(deltaScroll) {
    запуск след слайда..

рони 15.08.2018 13:05

Цитата:

Сообщение от Nlk
deltaKey

что это?

Nlk 15.08.2018 13:44

рони,
deltaKey - это число генерирующееся после keydown и сообщающее направление скрола

рони 15.08.2018 14:09

Nlk, мне сложно совместить onwheel onScroll keydown
deltaKey в одно целое по вашему коду.

ksa 15.08.2018 14:59

Nlk, типа пример... ;)

var o={};
var deltaScroll = o.deltaY || o.detail || o.wheelDelta;
alert(deltaScroll);

ksa 15.08.2018 15:00

Цитата:

Сообщение от Nlk
Всю портянку наверно не к чему выкладывать ..

Пробуй сделать небольшой тестовый пример. ;)

Nlk 15.08.2018 15:51

ksa,
Цитата:

Сообщение от ksa (Сообщение 492776)
Nlk, типа пример... ;)

var o={};
var deltaScroll = o.deltaY || o.detail || o.wheelDelta;
alert(deltaScroll);

Вот именно эта проблема, у меня на определенный период в отсутствии события onwhell - event.deltaY даёт Undefined, потому что она становиться не определена. Здесь ничего не придумать, типа запрятать от интерпретатора в подфункцию какую нибудь? Или просто нужно исправлять Undefined и все?

рони 15.08.2018 16:51

Nlk,
:-?

Nlk 16.08.2018 14:40

Скажите пожалуйста, событие мыши onwheel, вызывает одно событие при скролле? Или в зависимости от браузера такая же неразбериха как с onscroll?

рони 16.08.2018 14:50

Nlk,
:-? вы колёсико на один клик поворачиваите?
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <style type="text/css">
     body{
         height: 2000px;
     }
     .hot{
         position: fixed;
     }

  </style>

</head>

<body>

<script>
document.addEventListener('DOMContentLoaded', function() {
    document.addEventListener('wheel',
    function() {
    document.querySelector('.hot').innerHTML++ ;
    })
  });

</script>
<div class="hot">0</div>
</body>

</html>

Nlk 16.08.2018 16:03

рони,
Оо с примером, огромнейшее спасибо.

Nlk 16.08.2018 18:23

Удалось разрешить изначальную проблему.
let deltaOnwheel = event.deltaY || event.detail || event.wheelDelta;

Оказалось обращение к данной переменной все же оставалось и поэтому в отсутствии события оnwheel появлялась ошибка Undefined. А я думал что ошибка появлялась ошибка хотя переменная не использовалась. Вряд ли меня кто поймет, всем спасибо еще раз.

ksa 17.08.2018 10:31

Цитата:

Сообщение от Nlk
Здесь ничего не придумать, типа запрятать от интерпретатора в подфункцию какую нибудь? Или просто нужно исправлять Undefined и все?

Можно, например, просто проверить значение на undefined ...

var o={};
var deltaScroll = o.deltaY || o.detail || o.wheelDelta;
if (deltaScroll==undefined) {
	alert('Undefined.');
} else {
	alert('Ok.');
};


Часовой пояс GMT +3, время: 02:09.