Konflikt bei gleichzeitiger Verwendung von Tastaturereignissen zum Scrollen und CSS-Scroll-Snapping


11

Sie können horizontal meine Demo - Seite durch Drücken blättern Space Bar, Page Up / Page Downund Left Arrow / Right ArrowTasten. Sie können den Bildlauf auch mit einer Maus oder einem Trackpad ausführen.

Aber nur das eine oder andere funktioniert.

Gibt es eine Möglichkeit, wie Tastaturereignisse und CSS-Scroll-Snapping nebeneinander existieren können? Was vermisse ich? Jede Hilfe wäre sehr dankbar, da ich seit über einer Woche mit diesem Problem zu kämpfen habe.


Schauen Sie sich meine Demo auf CodePen an

(Bitte kommentieren Sie den entsprechenden CSS-Code aus, um den Scroll-Snapping-Effekt zu aktivieren und festzustellen, dass Tastaturkürzel nicht mehr funktionieren.)



Hinweis: Ich verwende ein kleines und elegantes Modul namens Animate Plus, um eine reibungslose Bildlaufanimation zu erzielen.


Update: Die Lösung von @ Kostja funktioniert in Chrome, aber nicht in Safari für Mac oder iOS. Für mich ist es entscheidend, dass sie in Safari funktioniert.

Antworten:


3

Ich denke, das gibt es nicht, das CSS überschreibt das Javascript. Sie können aber einfach Wheel Eventlistener hinzufügen wie:

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


Könnten Sie bitte einen Link zu einer Abzweigung auf CodePen posten, da ich Ihre Lösung nicht zum Laufen bringen kann? Vielen Dank.
Zar

Entschuldigung, aber es funktioniert nicht. Hast du es versucht?
Zar

ja habe es mit Chrome Version 78.0.3904.108 (64Bit) versucht
kostja

Was funktioniert auf Ihrer Seite nicht? der Schnappschuss oder die Schriftrolle überhaupt? Sie müssen in die Ansicht klicken, bevor Sie die Tastatur verwenden können. Die Tastatur wird nicht mit dem Schwebeflug kombiniert, ebenso wie der Bildlauf.
Kostja

Ich habe es gerade in Chrome getestet und es funktioniert! In Safari für Mac oder iOS funktioniert dies jedoch nicht, was für mich für dieses Projekt viel wichtiger ist. Wissen Sie, was der Grund sein könnte?
Zar

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;
      }
    }
  };
};    

Das sollte funktionieren.

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.