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 :

Appeler une fonction lorsqu'une animation de scroll se termine


Sujet :

jQuery

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 59
    Par défaut Appeler une fonction lorsqu'une animation de scroll se termine
    Bonjour,

    Je suis en train de bloquer sur une fonctionnalité en Jquery, voila j'ai une page web qui fait apparaitre des images à l'écran au fur et à mesure, et lorsque que l'écran est remplit j'aimerai que la page web scroll down tout en bas automatiquement pour que l'on puisse voir les nouvelles images apparaitre.

    Je voudrais utiliser .animate({scrollTop:value}, 'slow'}); pour faire une effet de défilement agréable. Mais j'aimerai aussi qu'à la fin, quand l’animation du scroll est terminé, que le programme appel une autre fonction qui va permettre de continuer l'affichage, voici le code :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function scroll_bottom(to_go, id, DIR_PICTURES, top, i, left)
    {
    	$('html, body').animate({scrollTop:to_go}, TIME, 
    		{complete: function()
    			{
    				display_the_picture(id, DIR_PICTURES, top, i, left);
    			}
    		});
    }

    display_the_picture étant la fonction que j'aimerai appeler que quand le défilement est terminé. Et TIME est une variable globale.

    Mais cela ne fonctionne pas, en cherchant sur internet j'ai trouvé plusieurs syntaxes possible pour faire défiler lentement ou encore pour appeler une fonction après une animation, mais rien à faire, je coince et je n'arrive pas à faire fonctionner les deux en même temps

    J'aurai voulu savoir si cette façon de faire est la bonne ?

    Merci beaucoup pour votre aide

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    La méthode "animate" à deux écritures possibles : http://api.jquery.com/animate/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    /*
    $( "html, body" ).animate(
    	{
    		"scrollTop" : $( "body" ).height()
    	},
    	{ 
    		"duration" : 5000,
    		"complete" : function(){
     
    			// votre code
     
    		}
    	}
    );
    */
     
    /*
     * Écriture alternative
     */
    $( "html, body" ).animate( { "scrollTop" : $( "body" ).height() }, 5000, function(){
     
    	// votre code
     
    });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 59
    Par défaut
    Bonjour merci beaucoup pour ta réponse,

    Mais j'ai encore un soucis, j'ai l'impression que mon programme se duplique en quelque sorte.

    Apres avoir fait plein de tests avec des alerts pour savoir exactement où passer mon code :

    Code Javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    function scroll_bottom(to_go, id, DIR_PICTURES, top, i, left)
    {
    	$( "html, body" ).animate(
    	{
    		"scrollTop" : to_go
    	},
    	{ 
    		"duration" : TIME,
    		"complete" : function()
    		{
     			display_the_picture(id, DIR_PICTURES, top, i, left);
    		}
    	});
    }

    Quand je passe une seule fois dans cette fonction, elle appelle deux fois de suite la fonction display_the_picture.

    Et là je ne sais pas du tout pourquoi

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 59
    Par défaut
    ahaa je viens de me débloquer, pour ceux qui auront le meme soucis, animate appelle le nombre de fois la fonction callback, le nombre d'objet qu'on passe.

    comme je mettais :
    La fonction était appelé deux fois.

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Bah oui, en même temps, c'est logique : ton sélecteur récupère deux éléments et comme tu appliques l'animation à la sélection récupérée, cela fait deux animations donc deux fois le callback.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 59
    Par défaut
    Oui maintenant ça me parait logique. Par contre l’animation du scroll ne marche pas toujours très bien.

    Je voudrais faire un défilement fluide, sauf que des fois, ca ne défile pas et l’ascenseur se "téléporte" immédiatement en bas.

    Je pensais qu'en faisant une fonction callback qui ne se déclenche que quand le défilement est terminé corrigerait le problème mais non (d'où la raison de mon post).

    du coup que je fasse avec un callback pour continuer ou bien tout simplement :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $('html, body').animate({scrollTop:to_go}, TIME);

    ca ne change rien, par moment le défilement ne marche plus et l'ascenseur se téléporte en bas

    ya til une astuce pour forcer le défilement coute que coute ?

  7. #7
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    La raison du $('html, body') c'est un problème de compatibilité avec tous les navigateurs.

    Je n'ai pas l'impression que vous avez testé mon code : $( "html, body" ).animate( { "scrollTop" : $( "body" ).height() }, 5000 );.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 59
    Par défaut
    Si si mais il ne semble pas fonctionner chez moi (je suis sous FF).

Discussions similaires

  1. Appel d'une fonction dans une fonction d'une même classe
    Par script73 dans le forum Général Python
    Réponses: 3
    Dernier message: 06/03/2015, 10h18
  2. getattr() ? Appel d'une fonction depuis une fonction
    Par frites.saucisse dans le forum Général Python
    Réponses: 8
    Dernier message: 10/10/2008, 14h21
  3. Réponses: 1
    Dernier message: 25/10/2007, 18h04
  4. Appeler une fonction dans une fonction
    Par bryanstaubin dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/06/2007, 09h39
  5. Réponses: 4
    Dernier message: 17/03/2004, 17h24

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