google-chrome-devtools - 如何打破 scrollTop 变化?

标签 google-chrome-devtools breakpoints

我网站上的 js 之一导致不必要的滚动到页面顶部。 js更改scrollTop属性时如何在Chrome开发者工具中休息?

最佳答案

粘贴下面的代码,然后运行 ​​onVerticalScroll(function(){debugger}); .

请注意,这只会在通过 JavaScript 显式设置滚动位置时暂停。例如,如果一个大元素暂时从页面中消失并导致视口(viewport)向上跳跃,它不会触发。

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;
    }
}

关于google-chrome-devtools - 如何打破 scrollTop 变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36132300/

相关文章:

css - 如何推迟非关键样式?

google-chrome - 2014 年 1 月 17 日的最新 Google Chrome 更新触发页面无响应警报

breakpoints - Pycharm 无法识别非测试文件中的断点

gdb - 程序入口处的 Eclipse cdt/gdb 自动断点 - 如何禁用?

javascript - 在没有事件监听器面板的情况下,如何在 HTML 中找到 "onevent"处理程序的源代码?

google-chrome - 如何使用扩展程序以编程方式触发 Chrome 中的快捷键? (NPAPI 或 JavaScript 扩展)

android - 适用于 Android 的 Google Chrome 远程调试 - "localhost:9222"不可用

Eclipse - 由于缺少行号属性而无法安装断点

java - 为什么我不能在未初始化的局部变量上放置断点?

objective-c - CGKeyEvent 粘贴可与断点配合使用,但并非没有