27 votes

Position de défilement actuelle lors de l'utilisation de -webkit-overflow-scrolling:touch - événement javascript iOS Safari (scrollTop / scrollLeft)

J'utilise -webkit-overflow-scrolling:touch pour faire défiler un div avec overflow:scroll ; de manière fluide grâce aux événements tactiles d'iOS.

Il fonctionne parfaitement, sauf qu'il ne semble pas mettre à jour element.scrollTop ou element.scrollLeft pendant le défilement. Il ne met à jour element.scrollTop / déclenche un événement de défilement que lorsque l'élan s'épuise et qu'il s'arrête.

Quelqu'un connaît-il un moyen de connaître sa position de défilement actuelle et s'il y a un événement que je peux écouter ? Je me demande si cela ne peut pas être trouvé par le biais d'une propriété CSS3, peut-être ? Merci

L'exemple ci-dessous montre deux tentatives :

<!DOCTYPE html>
<body>
    <div id="display_a">Scroll is: 0</div>
    <div id="display_b">Scroll is: 0</div>  
    <div id="element" style="width:800px;overflow-x:scroll;-webkit-overflow-scrolling:touch;">
        <div style="font-size:100px;width:1850px;">
            a b c d e f g h i j k l m n o p q r s t u v w x y z
        </div>
    </div>
    <script>
        var e = document.getElementById("element");
        var display_a = document.getElementById("display_a");
        var display_b = document.getElementById("display_b");
        e.addEventListener("scroll",function(event){display_a.innerHTML = "Scroll is: " + event.target.scrollLeft;});
        setInterval(function(){display_b.innerHTML = "Scroll is: " +  e.scrollLeft;},100);
    </script>   
</body>
</html>

\============ UPDATE ============

iOS 8 a corrigé ce comportement. Les événements de défilement sont désormais déclenchés pendant le défilement.

Notez que vous devrez maintenant gérer les valeurs de défilement négatives pendant le défilement de rebond.

0voto

flunder Points 186

Obtenir la position d'un scroller horizontal pendant le défilement ( via css overflow-y:scroll )

$('#myNode').bind('scroll', function(e){
  var myPos = e.target.scrollLeft;
  // do something with myPos but don't naughty
})

-1voto

Andrew Dinmore Points 374

Si cela peut vous aider, scrollTop et scrollLeft sont mis à jour en temps réel dans le gestionnaire d'événements touchmove :

$(function()
{
    var $div = $("#scroll")
    var $p   = $("#display");

    var update = function(e)
    {
        $p.text( e.type +": "+ $div.scrollLeft() +", "+ $div.scrollTop() );
    }

    $div.bind( "touchmove", update )
        .bind( "scroll",    update );
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X