Smart scrolling

Prevent scrolling issues when page is resized by loading images

目前为 2016-06-12 提交的版本。查看 最新版本

// ==UserScript==
// @name        Smart scrolling
// @namespace   [email protected]
// @description Prevent scrolling issues when page is resized by loading images
// @include     *
// @version     1.2
// @grant       none
// @run-at      document-start
// ==/UserScript==

(function() {
	var update = function() {
		if(document.readyState != "complete") requestAnimationFrame(update);
		var images  = [].slice.call(document.getElementsByTagName('IMG')),
			scrollY = 0, data, rect, height, style;
		for(var i = 0; i < images.length; i++) {
			if(!images[i].zssData) images[i].zssData = {};
			data = images[i].zssData;
			if(document.readyState == "complete") delete images[i].zssData;
			if(data.complete) continue;
			rect   = images[i].getBoundingClientRect();
			height = Math.max(data.height || 0, Math.round(rect.bottom - rect.top));
			if(isNaN(data.height)) {
				if(images[i].complete || !images[i].offsetParent || getComputedStyle(images[i]).position == 'fixed') {
					data.complete = true;
				} else {
					data.parent = images[i];
					while(true) {
						data.parent = data.parent.parentNode;
						if(data.parent == document.body) break;
						style = getComputedStyle(data.parent);
						if(style.overflow == 'auto' || style.overflow == 'scroll') break;
					}
				}
			} else if(data.height != height) {
				if(rect.top >= 0) {
				} else if(data.parent == document.body) {
					scrollY += height - data.height;
				} else {
					data.parent.scrollTop += height - data.height;
				}
				data.complete = true;
			}
			data.height = height;
		}
		if(scrollY > 0) scrollBy(0, scrollY);
	};
	update();
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址