Nicht automatisch. Sie müssten Bildlaufereignisse abfangen und jedes Mal prüfen, ob sie angezeigt werden, indem Sie die Koordinaten des div-Rechtecks mit dem sichtbaren Seitenrechteck vergleichen.
Hier ist ein minimales Beispiel.
<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>
Sie könnten verbessern dies durch:
- es
onscroll
auf allen Vorfahren fangen machen, die
- Erkennung
overflow
für ihre Scroll-Positionen overflow
scroll
oder auto
und Einstellung der oben/links Co-ords haben scroll
, auto
und hidden
Zuschneiden der div off-screen
- mit
addEventListener
/attachEvent
mehr VisibilityMonitors und andere Dinge, über die Größe verändern/Scroll-Ereignisse
- einige Kompatibilitäts Hacks
getElementRect
zu ermöglichen, die Co-ords genauer in einigen Fällen zu machen, und ein Ereignis unbinding IE6-7 Speicherlecks zu vermeiden, wenn du wirklich musst.
https://github.com/imakewebthings/waypoints oder https://github.com/stutrek/scrollMonitor könnte auch helfen –