Skip to content

Instantly share code, notes, and snippets.

@hensm
Created June 28, 2015 03:07
Show Gist options
  • Save hensm/fdebcce683fefefa8894 to your computer and use it in GitHub Desktop.
Save hensm/fdebcce683fefefa8894 to your computer and use it in GitHub Desktop.
Userscript to fix scroll position to viewport center element when resizing
// ==UserScript==
// @name Retain Scroll Position
// @namespace http://cssu.in
// @description Fixes scroll position to viewport center element when resizing
// @include *
// @version 0.1
// @grant none
// @noframes
// ==/UserScript==
(function() {
"use strict";
function get_absolute_offset(element) {
var left = 0,
top = 0;
do {
left += element.offsetLeft;
top += element.offsetTop;
element = element.offsetParent;
} while(element);
return {
left: left,
top: top
};
}
function get_center_element() {
var center = [
window.innerWidth / 2,
window.innerHeight / 2
].map(Math.round);
return document.elementFromPoint(center[0], center[1]);
}
var page_anchor = get_center_element();
window.addEventListener("resize", function() {
var offset = get_absolute_offset(page_anchor);
window.scroll(
offset.left - ((window.innerWidth / 2) - (page_anchor.clientWidth / 2)),
offset.top - ((window.innerHeight / 2) - (page_anchor.clientHeight / 2)));
}, false);
window.addEventListener("scroll", function() {
page_anchor = get_center_element();
}, false);
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment