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.

Zar
quelle

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

kostja
quelle
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

Jay-Z
quelle