Firefox2のposition:fixedが重たいらしい話とAutoPagerize
AutoPagerize を少し高速化 - GANAwareはてな版の件。
これってFirefoxのposition:fixedが重いというのが問題で、AutoPagerizeのほうで対応することではない気がしました。(実際、Firefox3では改善されてるんじゃないかな?)
で、ここはやはりAutoIncrementer pluginの出番かなーと思って、AutoIncrementer pluginにこんな感じで実装。中身はid:ganawareさんのほぼそのままです。
注: var NOT_FIXED = window.AutoPagerizeNotFixed || false; としているのは、他のScriptで設定を変えられるようにするためです。
var NOT_FIXED = window.AutoPagerizeNotFixed || false; var ap = eval('ap',window.AutoPagerize.addFilter); var helpLayer = document.getElementById('autopagerize_help'); if (NOT_FIXED) { helpLayer.style.position = 'absolute'; ap.icon.style.position = 'absolute'; ap.fixIconPos = function(){ this.icon.style.top = (window.pageYOffset + 3) + 'px' }; var _onScroll = ap.onScroll; ap.onScroll = function(){ _onScroll.call(this); var self = this; if (this.iconTimer) { window.clearTimeout(this.iconTimer); this.iconTimer = null; } this.iconTimer = window.setTimeout(function(){ self.iconTimer = null; self.fixIconPos(); }, 1000); }; ap.viewHelp = function(){ this.helpLayer.style.top = (window.pageYOffset + 3) + 'px'; }; var _terminate = ap.terminate; ap.terminate = function(){ _terminate(); if (this.iconTimer) { window.clearTimeout(this.iconTimer); this.iconTimer = null; } }; var _error = ap.error; ap.error = function(){ _error(); if (this.iconTimer) { window.clearTimeout(this.iconTimer); this.iconTimer = null; } }; }
消えたり出たりする挙動が好きではないので、デフォルトOFFにしました。
window.scrollY じゃなくて window.pageYOffset なのは好みの問題( Opera が scrollY には対応してなくて、 pageYOffset なら使えるから)。