在頁面上顯示某個DIV時是否可以觸發特定的JavaScript事件?例如,假設我有一個非常大的頁面,例如2500x2500,並且我有一個位置爲1980x1250的40x40 div。 div不一定是手動定位的,它可能會在那裏由於內容推送到那裏。現在,當用戶滾動到div可見的點時,是否可以運行一個函數?當DIV在視圖中時觸發Javascript事件
回答
不自動。您必須捕捉滾動事件,並通過將div矩形的座標與可見頁面矩形進行比較來檢查它是否在視圖中。
下面是一個簡單的例子。
- 使其趕上有
overflow
scroll
或auto
所有祖先onscroll
和調整前/左協ORDS其滾動位置 - 檢測
overflow
:<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>
您可以通過提高該
scroll
,auto
和hidden
cropping把div從屏幕上移除 - 使用
addEventListener
/attachEvent
允許多個VisibilityMonitors和其他東西使用調整大小/滾動事件 - 一些兼容性黑客以
getElementRect
,使共同ORDS在某些情況下更準確,有些事件解除綁定,以避免IE6-7內存泄漏,如果你真的需要。
您可以將getElementRect中的所有代碼替換爲內置的element.getBoundingClientRect()。 –
下面是使用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>
它只有一次在div進入從底部視圖通知。此示例不會通知div何時滾動到頂部。
再次,這是爲jQuery,而我全部爲jQuery,在我的情況下,我將無法使用它。 –
然後請注意,在這個問題上,所以發佈人會知道你的限制。似乎兩個人幾乎完全同時發佈,所以他們不可能知道。 – Cryophallion
- 1. 當div加載時觸發事件
- 2. 在多個視圖中觸發事件
- 3. 當HTML元素滾動到視圖中時是否會觸發Javascript事件?
- 4. 當div中的內部html發生變化時觸發事件
- 5. 切換視圖時觸發事件
- 6. 事件觸發時切換TabBarController視圖
- 7. 在JavaScript中觸發事件
- 8. Backbone.js子視圖中的觸發事件
- 9. 當發生子視圖觸摸事件時通知視圖控制器
- 10. Javascript - 事件在添加時觸發
- 11. 在瀏覽器視圖中觸發事件時jQuery
- 12. 觸發KeyUp事件在Javascript
- 13. 達到特定Div時觸發事件
- 14. DIV onload事件不觸發
- 15. 當YouTube視頻達到某個時間戳時觸發事件?
- 16. 觸摸內部視圖和外部按鈕時觸發事件
- 17. 試圖從JavaScript觸發ASP.NET中的button.click()事件。事件不會觸發
- 18. HTML視頻結束事件不在主幹視圖中觸發
- 19. 當calloutAccessoryControlTapped觸發時打開視圖
- 20. 視圖事件不會觸發
- 21. 網頁視圖事件不會觸發
- 22. 骨幹視圖觸發全球事件
- 23. 子視圖更改事件未觸發
- 24. 在Javascript中選擇框觸發事件
- 25. 在JavaScript中觸發鍵盤事件
- 26. 使用javascript在asp.net中觸發事件
- 27. 如何在JavaScript中觸發touchcancel事件?
- 28. 停止在javascript中觸發onfocus事件
- 29. 在JavaScript中未觸發的事件
- 30. 當TextBox爲空時觸發事件
https://github.com/imakewebthings/waypoints或https://github.com/stutrek/scrollMonitor也可以提供幫助 –