Конфлікт при одночасному використанні подій на клавіатурі для прокрутки та оснащення CSS прокрутки


11

Ви можете горизонтально прокручувати мою сторінку конфігурації, натиснувши клавішу Space Bar, Page Up / Page Downі Left Arrow / Right Arrowключі. Ви також можете оснастити прокрутку за допомогою миші або трекпада.

Але працює лише те чи інше.

Чи існує спосіб співіснування подій на клавіатурі та оснащення прокрутки CSS? Що я пропускаю? Будь-яка допомога буде дуже вдячна, оскільки я боровся з цією проблемою вже більше тижня.


Перевірте мою демонстрацію на CodePen

(Будь ласка, відмініть відповідний фрагмент коду CSS, щоб увімкнути ефект оснащення прокрутки, щоб побачити, що комбінації клавіш перестають працювати.)



Примітка: я використовую невеликий і елегантний модуль під назвою Animate Plus для досягнення анімації плавного прокрутки.


Оновлення: @ Рішення Kostja працює в Chrome, але не в Safari для Mac або iOS, і для мене важливо, що він працює в Safari.

Відповіді:


3

Я думаю, що немає, CSS замінює javascript. Але ви можете просто додати колесо eventlistener типу:

window.addEventListener("wheel", function() {
    if(event.deltaY > 0){
      animate({
        easing: "out-quintic",
        change: animateScroll(1)
      })      
    }
      if(event.deltaY < 0){
      animate({
        easing: "out-quintic",
        change: animateScroll(-1)
      })      
    }      
});

https://codepen.io/kostjaaa/pen/NWWVBKd


Чи можете ви надіслати посилання на вилку на CodePen, тому що я не можу отримати ваше рішення працювати? Дякую.
Цар

Вибачте, але це не працює. Ви пробували?
Цар

так, спробували це з версією Chrome 78.0.3904.108 (64Bit)
kostja

Що не працює на вашому боці? оснащення або прокрутка взагалі? перед тим, як використовувати клавіатуру btw, ви повинні натиснути на представлення даних. Клавіатура не поєднується з наведенням курсора, як і прокрутка.
костя

Я щойно тестував це в Chrome, і він працює! Але це не працює в Safari для Mac чи iOS, що для мене важливіше для цього проекту. Чи знаєте ви, що може бути причиною?
Цар

0
window.onload = () => {
  window.addEventListener("wheel", () => {
    const direction = event.deltaY > 0 ? 1 : event.deltaY < 0 ? -1 : false;

    if (direction) {
      animate({
        easing: "out-quintic",
        change: animateScroll(direction)
      });
    }
  });

  document.body.onkeydown = event => {
    switch (event.key) {
      case " ": // Space Bar
      case "PageDown":
      case "ArrowRight": {
        animate({
          easing: "out-quintic",
          change: animateScroll(1)
        });
        break;
      }
      case "PageUp":
      case "ArrowLeft": {
        animate({
          easing: "out-quintic",
          change: animateScroll(-1)
        });
        break;
      }
    }
  };
};    

Це має спрацювати.

https://codepen.io/JZ6/pen/XWWQqRK

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.