J'utilise jQuery dans mon site et je voudrais déclencher certaines actions lorsqu'un certain div est rendu visible.
Est-il possible d'attacher une sorte de gestionnaire d'événement "isvisible" à des div arbitraires et de faire exécuter un certain code quand le div est rendu visible?
Je voudrais quelque chose comme le pseudocode suivant:
$(function() {
$('#contentDiv').isvisible(function() {
alert("do something");
});
});
Le code d'alerte ("faire quelque chose") ne doit pas se déclencher tant que le contentDiv n'est pas réellement rendu visible.
Merci.
javascript
jquery
frankadelic
la source
la source
Réponses:
Vous pouvez toujours ajouter à la méthode .show () d'origine afin de ne pas avoir à déclencher d'événements à chaque fois que vous affichez quelque chose ou si vous en avez besoin pour travailler avec du code hérité:
Extension Jquery:
Exemple d'utilisation:
Cela vous permet effectivement de faire quelque chose avant et après le spectacle tout en exécutant toujours le comportement normal de la méthode .show () d'origine.
Vous pouvez également créer une autre méthode pour ne pas avoir à remplacer la méthode .show () d'origine.
la source
fadeTo
fonction ne fonctionne pas correctement après avoir implémenté cette fonctionLes observateurs des mutations DOM abordent le problème . Ils vous permettent de lier un observateur (une fonction) à des événements de changement de contenu, de texte ou d'attributs d'éléments dom.
Avec la sortie d'IE11, tous les principaux navigateurs prennent en charge cette fonctionnalité, consultez http://caniuse.com/mutationobserver
L'exemple de code est le suivant:
la source
Il n'y a pas d'événement natif auquel vous pouvez vous connecter, mais vous pouvez déclencher un événement à partir de votre script après avoir rendu la div visible à l'aide de. fonction de déclenchement
par exemple
la source
show()
est appelé à partir de plusieurs endroits autres que le bloc de code décrit ci-dessus?onIsVisible
car l'utilisation de "isVisible" est un peu ambiguë en ce moment.Vous pouvez utiliser le plugin Live Query de jQuery . Et écrivez le code comme suit:
Ensuite, chaque fois que le contentDiv est visible, "faire quelque chose" sera alerté!
la source
La solution de redsquare est la bonne réponse.
Mais en tant que solution IN-THEORY, vous pouvez écrire une fonction qui sélectionne les éléments classés par
.visibilityCheck
( pas tous les éléments visibles ) et vérifier leurvisibility
valeur de propriété; sitrue
alors faites quelque chose.Ensuite, la fonction doit être exécutée périodiquement à l'aide de la
setInterval()
fonction. Vous pouvez arrêter le chronomètre à l'aide de l'clearInterval()
appel réussi.Voici un exemple:
Vous pouvez également y apporter des améliorations de performances, cependant, la solution est fondamentalement absurde pour être utilisée en action. Alors...
la source
display:none
?Le code suivant (extrait de http://maximeparmentier.com/2012/11/06/bind-show-hide-events-with-jquery/ ) vous permettra de l'utiliser
$('#someDiv').on('show', someFunc);
.la source
el.apply(this, arguments)
pour résoudre ce problème.Si vous souhaitez déclencher l'événement sur tous les éléments (et les éléments enfants) qui sont réellement rendus visibles, par $ .show, toggle, toggleClass, addClass ou removeClass:
Et maintenant votre élément:
Vous pouvez ajouter des remplacements à des fonctions jQuery supplémentaires en les ajoutant au tableau en haut (comme "attr")
la source
un déclencheur d'événement de masquage / affichage basé sur l'idée de Glenn: suppression de la bascule car elle déclenche l'affichage / masquage et nous ne voulons pas de 2 feux pour un événement
la source
J'ai eu ce même problème et j'ai créé un plugin jQuery pour le résoudre pour notre site.
https://github.com/shaunbowe/jquery.visibilityChanged
Voici comment vous l'utiliseriez en fonction de votre exemple:
la source
Utilisez jQuery Waypoints:
Autres exemples sur le site de jQuery Waypoints .
la source
Ce qui m'a aidé ici est le polyfill de spécification ResizeObserver récent :
Notez qu'il est croisé et performant (pas d'interrogation).
la source
J'ai fait une simple fonction setinterval pour y parvenir. Si l'élément de classe div1 est visible, il définit div2 pour qu'il soit visible. Je ne connais pas une bonne méthode, mais une solution simple.
la source
Vous pouvez également essayer le plugin jQuery appear comme mentionné dans le thread parallèle https://stackoverflow.com/a/3535028/741782
la source
Cela prend en charge l'accélération et déclenche l'événement après l'animation! [testé sur jQuery 2.2.4]
Inspiré par http://viralpatel.net/blogs/jquery-trigger-custom-event-show-hide-element/
la source
Il suffit de lier un déclencheur avec le sélecteur et de mettre le code dans l'événement déclencheur:
la source
Un plugin jQuery est disponible pour observer les changements dans les attributs DOM,
https://github.com/darcyclarke/jQuery-Watch-Plugin
Le plugin enveloppe Tout ce dont vous avez besoin est de lier MutationObserver
Vous pouvez ensuite l'utiliser pour regarder la div en utilisant:
la source
J'espère que cela fera le travail de la manière la plus simple:
la source
J'ai changé le déclencheur d'événement masquer / afficher de Catalint basé sur l'idée de Glenns. Mon problème était que j'avais une application modulaire. Je change entre les modules montrant et cachant les parents divs. Ensuite, lorsque je cache un module et que j'en montre un autre, avec sa méthode, j'ai un délai visible lorsque je change de module. Je n'ai besoin que parfois d'allumer cet événement, et chez certains enfants spéciaux. J'ai donc décidé de ne notifier que les enfants avec la classe "displayObserver"
Puis quand un enfant veut écouter l'événement "show" ou "hide" je dois lui ajouter la classe "displayObserver", et quand il ne veut pas continuer à l'écouter, je lui retire la classe
Je souhaite de l'aide
la source
Une façon de le faire.
Fonctionne uniquement sur les modifications de visibilité apportées par le changement de classe css, mais peut également être étendu pour surveiller les modifications d'attribut.
la source
ma solution:
exemple d'utilisation:
la source
la source
Ce code de contrôle automatique ne nécessite pas de requête de contrôle visible ou invisible
la source