読者です 読者をやめる 読者になる 読者になる

Firefox2のposition:fixedが重たいらしい話とAutoPagerize

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 なら使えるから)。