Search

1/22/2008

scrolltop & onscroll

IE的onscroll event listener必須在window上,FF則上window/document皆可,所以


YUE.on(window, 'scroll', hScroll);

scrollTop 如果是在 quirk mode 是取 document.body.scrollTop 的值,如果不是 quirk mode 則是取 document.documentElement.scrollTop 的值。
// code from YUI image loader
var scrollTop = (document.compatMode != 'CSS1Compat') ? document.body.scrollTop : document.documentElement.scrollTop;
var scrollLeft = (document.compatMode != 'CSS1Compat') ? document.body.scrollLeft : document.documentElement.scrollLeft;


// code from YUI Dom
/**
* Returns the top scroll value of the document
* @method getDocumentScrollTop
* @param {HTMLDocument} document (optional) The document to get the scroll value of
* @return {Int} The amount that the document is scrolled to the top
*/
getDocumentScrollTop: function(doc) {
doc = doc || document;
return Math.max(doc.documentElement.scrollTop, doc.body.scrollTop);
},

Youtube 右邊的 Related Videos 有一個效果是,使用者捲軸捲下去之後才會開始 loading,也就是他只會 load 看得到的部分,看不到的部分等到 scroll 才 load,藉此節省頻寬,上面是錯的, Youtube 的作法是 onscroll event 一 fire 就會把 Related Videos 裡面的圖片全部 load 進來,不管看不看得到。onscroll 這個 event 居然<PPK on JavaScript> <JavaScript: The Definitive Guide, Fifth Edition> 都沒有提到。同樣的技巧可以透過 Yahoo! UI Library: ImageLoader達成,原理就是 event 發生時動態給 img src。以下是個例子:
http://chunghe.googlecode.com/svn/trunk/experiment/image.lazy.loader.by.scroll/onscroll.event.image.lazyloader.htm

不過只有這樣是不夠的,因為動態生出來的 image 會導致 scroll bar 長度的改變而會有點遲滯,所以我們要先設定 img 的 height & width
http://chunghe.googlecode.com/svn/trunk/experiment/image.lazy.loader.by.scroll/onscroll.event.image.lazyloader.fixed.htm

沒有留言: