- Ymox,
Bonjour à tous !
J'ai fait des heures sup' hier soir pour un problème qui m'échappe partiellement.
Histoire de changer un peu, on souhaitait faire une page dont les sections se suivraient sous forme de diaporama avec des transitions du type "la diapositive suivante masque celle d'avant en arrivant par le bas, la diapositive précédente est affichée par masquage de la courante vers le bas" (désolé, je ne vois pas trop comment expliquer). Et parce que sur chaque diapositive on a des animations particulières et qu'on n'a pas trouvé de script qui permette à la fois de gérer le scroll, les touches, les écrans tactiles et des clics sur les éléments précis, plus encore des fonctions de rappel différentes pour chaque diapositive, on tente de réinventer la roue.
Le souci est que sous Webkit, impossible de déterminer la direction du scroll, l'événement retourne true
au lieu d'un nombre. C'est comme si, du fait de la manière de gérer les slides avec le CSS, webkit considérait qu'il n'y avait pas de déplacement, et du coup, que je fasse défiler dans un sens ou dans l'autre, c'est toujours la même direction…
En CSS, toutes les diapositives n'ont aucune hauteur, sauf celle courante qui est définie à 100vh
(responsive oblige, dixit notre intégrateur) — et pour ne pas faire simple, la dernière doit avoir un défilement "normal" pour permettre de tout y faire tenir.
Je ne sais pas trop si j'attends les événements sur le mauvais élément (j'ai essayé d'écouter sur document
ainsi que sur 'body'
) ou si ces histoires de hauteur posent problème.
Voici la base de travail.
1 2 3 4 5 6 7 8 9 | <body> <div id="GeneralWrapper"> <div id="slide0"> </div> <div id="slide1" class="hide-me"> </div> <!-- … --> </div> </body> |
Les div[id^=slide]
sont en hauteur 100vh, et la classe hide-me
force la hauteur à 0.
1 2 3 4 5 6 7 8 9 10 11 12 13 | $(document).on('DOMMouseScroll mousewheel', function(e) { // cross-browser wheel delta var e = e.originalEvent; if (!scrolling) { scrolling = true; var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail))); if (delta > 0) { previousSlide(); } else { nextSlide(); } } }); |
Est-ce que quelqu'un a déjà eu un souci similaire ? Merci d'avance