Читаю Хабраленту в Google Reader, и давно заметил, что в ней с завидной регулярностью появляются блоки с прокруткой на пару пикселей, которые не дают скроллить дальше всю ленту. Приходится отводить мышу к скроллбару окна — не трудно, конечно, но раздражает, особенно когда читаешь «по диагонали». Поэтому был написан скрипт, который находит все такие элементы и временно блокирует скроллинг, когда элемент прокручен до конца, тем самым позволяя прокручивать страницу вниз.
Скачать Greasemonkey можно здесь
Имя файла скрипта обязательно должно заканчиваться на .user.js
Скрипт устанавливается драг-н-дропом в окно ФФ (при включенном Greasemonkey), после чего страницу нужно обновить
UPD: Сделал более наглядную и правильную проверку модификации документа
// ==UserScript==
// @name ScrollAll
// @version 0.4
// @namespace http://zij.habrahabr.ru
// @description Позволяет скроллить страницу, когда курсор находится над элементом с прокруткой
// @author ZIJ
// @include http://www.google.com/reader/*
// @include https://www.google.com/reader/*
// ==/UserScript==
// <параметры>
var maxScrolls = 4 // количество скроллов "в холостую", штук
var hideTime = 4000 // время без скроллбаров, ms
var checkInterval = 2000 // минимальный интервал проверки DOM, ms
// </параметры>
var DOMModified = false
var scrollCount = 0
var lastScrollTop = -1
var lastScrollTime = 0
document.addEventListener("DOMSubtreeModified", function() { DOMModified = true }, false)
var I = setInterval(scan, checkInterval)
function scan() { // поиск элементов с прокруткой
if (DOMModified) {
DOMModified = false
for each (element in document.getElementsByTagName("*")) {
if (IsScrollable(element)) {
element.addEventListener("DOMMouseScroll", handleScroll, false)
}
}
}
}
function IsScrollable(element) { // проверка на скроллибельность
if (element.scrollHeight > element.clientHeight) {
with (window.getComputedStyle(element, null)) {
return (overflow == "scroll") || (overflow == "auto")
}
} else return false
}
function handleScroll(event) { // определение скроллов "в холостую"
if (event.timeStamp != lastScrollTime) {
var newScrollTop = event.currentTarget.scrollTop
if (newScrollTop == lastScrollTop) {
scrollCount++
if (scrollCount >= maxScrolls) {
scrollCount = 0
hideScrollbars(event.currentTarget)
}
}else {
scrollCount = 0
lastScrollTop = newScrollTop
}
lastScrollTime = event.timeStamp
}
}
function hideScrollbars(element) { // блокировка скроллинга на время
var prev = window.getComputedStyle(element, null).overflow
element.style.overflow = "hidden"
setTimeout(function() { element.style.overflow = prev }, hideTime)
}
* This source code was highlighted with Source Code Highlighter.
Скачать Greasemonkey можно здесь
Имя файла скрипта обязательно должно заканчиваться на .user.js
Скрипт устанавливается драг-н-дропом в окно ФФ (при включенном Greasemonkey), после чего страницу нужно обновить
UPD: Сделал более наглядную и правильную проверку модификации документа