Est-il possible de déclencher un événement javascript spécifique quand un certain DIV apparaît sur la page? Par exemple, j'ai une très grande page, comme 2500x2500 et j'ai un div 40x40 qui se trouve à la position 1980x1250. Le div n'est pas nécessairement positionné manuellement, il pourrait être là en raison du contenu qui le pousse là. Maintenant, est-il possible d'exécuter une fonction lorsque l'utilisateur fait défiler jusqu'à un point où la div devient visible?Événement Javascript de feu quand un DIV est dans la vue
Répondre
Pas automatiquement. Vous devez attraper les événements de défilement et vérifier qu'ils sont visibles à chaque fois en comparant les coordonnées du rectangle div avec le rectangle de la page visible.
Voici un exemple minimal.
<div id="importantdiv">hello</div>
<script type="text/javascript">
function VisibilityMonitor(element, showfn, hidefn) {
var isshown= false;
function check() {
if (rectsIntersect(getPageRect(), getElementRect(element)) !== isshown) {
isshown= !isshown;
isshown? showfn() : hidefn();
}
};
window.onscroll=window.onresize= check;
check();
}
function getPageRect() {
var isquirks= document.compatMode!=='BackCompat';
var page= isquirks? document.documentElement : document.body;
var x= page.scrollLeft;
var y= page.scrollTop;
var w= 'innerWidth' in window? window.innerWidth : page.clientWidth;
var h= 'innerHeight' in window? window.innerHeight : page.clientHeight;
return [x, y, x+w, y+h];
}
function getElementRect(element) {
var x= 0, y= 0;
var w= element.offsetWidth, h= element.offsetHeight;
while (element.offsetParent!==null) {
x+= element.offsetLeft;
y+= element.offsetTop;
element= element.offsetParent;
}
return [x, y, x+w, y+h];
}
function rectsIntersect(a, b) {
return a[0]<b[2] && a[2]>b[0] && a[1]<b[3] && a[3]>b[1];
}
VisibilityMonitor(
document.getElementById('importantdiv'),
function() {
alert('div in view!');
},
function() {
alert('div gone away!');
}
);
</script>
Vous pouvez améliorer en:
- ce qui en fait attraper
onscroll
sur tous les ancêtres qui ontoverflow
scroll
ouauto
et en ajustant les co-ords haut/gauche pour leurs positions de défilement - détection
overflow
scroll
,auto
ethidden
recadrage mettant la div hors de l'écran - à l'aide
addEventListener
/attachEvent
pour permettre à plusieurs VisibilityMonitors et d'autres choses en utilisant les événements Resize/défilement - quelques hacks de compatibilité à
getElementRect
pour rendre les co-ords plus précis dans certains cas, et un événement sans engagement pour éviter les fuites de mémoire IE6-7, si tu en as vraiment besoin.
Vous pouvez remplacer tout le code dans getElementRect avec le intégré element.getBoundingClientRect(). –
Voici un exemple de démarrage en utilisant jQuery:
<html>
<head><title>In View</title></head>
<body>
<div style="text-align:center; font-size:larger" id="top"></div>
<fieldset style="text-align:center; font-size:larger" id="middle">
<legend id="msg"></legend>
<div> </div>
<div id="findme">Here I am!!!</div>
</fieldset>
<div style="text-align:center; font-size:larger" id="bottom"></div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
var $findme = $('#findme'),
$msg = $('#msg');
function Scrolled() {
var findmeOffset = $findme.offset(),
findmeTop = findmeOffset.top,
scrollTop = $(document).scrollTop(),
visibleBottom = window.innerHeight;
if (findmeTop < scrollTop + visibleBottom) {
$msg.text('findme is visible');
}
else {
$msg.text('findme is NOT visible');
}
}
function Setup() {
var $top = $('#top'),
$bottom = $('#bottom');
$top.height(500);
$bottom.height(500);
$(window).scroll(function() {
Scrolled();
});
}
$(document).ready(function() {
Setup();
});
</script>
</body>
</html>
Il avertit qu'une fois que la div est en vue du fond. Cet exemple n'indique pas quand le div défile du haut.
encore une fois c'est pour jQuery, et tandis que je suis tout pour jQuery, dans ma situation je ne serai pas capable de l'utiliser. –
Ensuite, veuillez noter que dans la question, les personnes qui postent connaîtront vos limites. Il semble aussi que les deux personnes soient postées presque exactement au même moment, donc ils ne pouvaient pas savoir. – Cryophallion
- 1. Affecter un événement à div quand il est entièrement chargé
- 2. jquery événement feu lorsque l'élément est montré
- 3. Feu clé en Javascript
- 4. événement de feu dans ActionScript sur la charge swf?
- 5. Événement JavaScript pour quand l'attribut 'src' de l'image est changé?
- 6. Javascript pour le feu événement quand une touche enfoncée sur la zone de liste déroulante Ajax Toolkit
- 7. ASP.NET TextBox OnTextChanged événement pas de feu
- 8. en utilisant javascript dans une vue de rails quand un lien est cliqué
- 9. Événement de feu sur Word-Wrap
- 10. Premier événement de bouton pour le feu
- 11. Détecter quand AJAX change HTML dans un DIV dans WebBrowser
- 12. Exécuter JavaScript quand un lien est cliqué
- 13. Événement de bouton de feu par programmation
- 14. Événement serveur de feu du client
- 15. événement onclick n'est pas le feu dans google chrome
- 16. Comment copier un div entier vers un autre div lorsque javascript est déclenché dans le div
- 17. Bouton Clic Événement Feu seulement Deuxième clic
- 18. JavaScript: Quand JavaScript évalue-t-il une fonction, un chargement ou quand la fonction est appelée?
- 19. Comment faire un feu ASP.NET TextBox c'est feu d'événement onTextChanged dans un UpdatePanel AJAX?
- 20. Magento: Événement de feu avant le processus de connexion
- 21. Quand déclencher un événement de contrôle personnalisé?
- 22. Puis-je placer un événement javascript dans un événement jQuery?
- 23. Réexécution de la vue partielle d'un événement JavaScript dans Ruby on Rails
- 24. Événement déclencheur de JavaScript
- 25. Comment savoir quand une vue a défilé dans la vue
- 26. javascript déplacer l'image dans un div
- 27. page ASP.NET double événement de mise à feu
- 28. Comment masquer/supprimer un DIV quand il est vide
- 29. mise à feu d'un événement de clavier au corps
- 30. Comment est-ce que je soulèverais un événement (jQuery ou vanilla Javascript) quand une fenêtre de popup est fermée?
https://github.com/imakewebthings/waypoints ou https://github.com/stutrek/scrollMonitor pourrait aider aussi –