IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Page bloquée suite à événement on scroll sur une DIV


Sujet :

jQuery

  1. #1
    Membre à l'essai
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Septembre 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 11
    Points : 12
    Points
    12
    Par défaut Page bloquée suite à événement on scroll sur une DIV
    Bonjour,
    J'ai un div avec un scroll dedans. Quand on fait défiler le scroll, la page défile de manière à ce que le div remonte à l'écran. Le problème avec mon code c'est qu'ensuite on ne peut plus faire de scroll sur la page globale.

    J'ai fait un petit jsfiddle ici, pour illustrer le problème.
    https://jsfiddle.net/949bm7vq/

    Par contre, si on utilise "on( 'click',....)" à la place d'un scroll, la page n'est pas "bloquée"; on peut la faire défiler, cliquer dessus, y sélectionner du texte, etc...

    Merci pour votre aide.

  2. #2
    Membre éclairé
    Femme Profil pro
    Autre
    Inscrit en
    Janvier 2017
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2017
    Messages : 335
    Points : 715
    Points
    715
    Par défaut
    Bonjour,
    Si on fait quelques affichages, on voit qu'il y a vite de nombreux appels à la fonction et que l'arrêt de l'animation n'est pas rapide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var i=0,j=0;
    $("#scrollable_div").on( 'scroll', function(){
     
    		var distance=200;
    		if(distance>1){
    			console.log("début",++i);
    			$('html, body').animate({scrollTop: distance},'slow','swing',function(){console.log("fin",++j);});
     
    			}
     
    });
    L'ascenseur de la page peut être utilisé normalement une fois l'animation arrêtée.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Septembre 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Merci. Mais alors ....
    1/pourquoi un tel décalage dans le temps entre la fin de l'animation visuelle et la fin de son traitement informatique ?
    2/pourquoi ce décalage ne s'observe-t-il pas si on utilise click au lieu de scroll pour déclencher la fonction ?

  4. #4
    Membre éclairé
    Femme Profil pro
    Autre
    Inscrit en
    Janvier 2017
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2017
    Messages : 335
    Points : 715
    Points
    715
    Par défaut
    Bonsoir,
    A première vue, c'est parce que les différents appels s'empilent.
    Par exemple, s'il y a deux appels très rapprochés :
    La deuxième animation démarre seulement une fois la première animation terminée.
    Quand cette deuxième animation démarre, l'ascenseur est certes déjà bien positionné, mais il n'en est apparemment pas tenu compte et l'animation est exécutée pendant une certaine durée : pendant cette durée la position de l'ascenseur est constamment affecté sur 200, du coup il semble bloqué pour l'utilisateur.

    On peut voir l'empilement avec cet exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $("#scrollable_div").on( 'click', function(){
     
      var distance=200;
    		if(distance>1){
    			$('html, body').animate({scrollTop: distance},'slow');
    			$('html, body').animate({scrollTop: 0},'slow');
     
    			}
     
    });
    La première animation est jouée, puis seulement après la deuxième est lancée.

    Une solution pourrait être de rajouter une condition pour ne pas relancer d'animation tant que la première n'est pas finie, ou d'arrêter toute animation en cours avant d'en lancer une nouvelle.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Septembre 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Bon, je crois que j'ai trouvé la solution en fouinant sur le net, avec clearQueue(), mais j'ignore ce qu'en penseront les puristes....

    https://jsfiddle.net/6sempeav/

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 961
    Points : 44 133
    Points
    44 133
    Par défaut
    Bonjour,
    j'ai trouvé la solution en fouinant sur le net, avec clearQueue()
    même si je n'ai pas top saisi l'effet que tu voulais obtenir je dirais que clearQueue() est un peu fait pour cela quand même !

    Nota : Pense a mettre ta discussion en résolue !

Discussions similaires

  1. Force scrolling sur une site one page
    Par AroundStick dans le forum jQuery
    Réponses: 2
    Dernier message: 06/04/2017, 13h40
  2. Scroll horizontal sur une div en milieu de page
    Par eddynamique dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/10/2014, 08h17
  3. Envoyer une position de scroll sur une autre page
    Par TLOH45 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 24/11/2011, 14h43
  4. Réccupérer évènement CTRL+F sur une page.
    Par Rakken dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 23/03/2010, 11h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo