Eine der js auf meiner Website verursacht unnötige Scrollen zum Seitenanfang. Wie mache ich eine Pause in den Chrome Developers Tools, wenn js die scrollTop-Eigenschaft ändert?Wie brichst du beim Wechsel von scrollTop?
3
A
Antwort
2
Fügen Sie den folgenden Code ein und führen Sie dann onVerticalScroll(function(){debugger});
.
Beachten Sie, dass dies nur dann anhält, wenn die Bildlaufposition explizit über JavaScript festgelegt wird. Es wird beispielsweise nicht ausgelöst, wenn ein großes Element vorübergehend von der Seite verschwindet und das Ansichtsfenster nach oben springt.
function onVerticalScroll(fnOnScroll){
var originalScrollTop = getPropertyDescriptor(HTMLElement.prototype, "scrollTop");
Object.defineProperty(HTMLElement.prototype, "scrollTop", {
get: function(){
return originalScrollTop.get.apply(this, arguments);
},
set: function(){
fnOnScroll();
return originalScrollTop.set.apply(this, arguments);
}
});
var originalScrollTo = window.scrollTo;
window.scrollTo = function(){
fnOnScroll();
return originalScrollTo.apply(this, arguments);
}
var originalScrollBy = window.scrollBy;
window.scrollBy = function(){
fnOnScroll();
return originalScrollBy.apply(this, arguments);
}
function getPropertyDescriptor(object, propertyName){
var descriptor = Object.getOwnPropertyDescriptor(object, propertyName);
if (!object){
throw new Error("descriptor not found");
}
if (!descriptor) {
return getPropertyDescriptor(Object.getPrototypeOf(object), propertyName);
}
return descriptor;
}
}