【发布时间】:2015-03-08 10:45:54
【问题描述】:
我试图找出悬停元素时哪个函数导致页面滚动,但到目前为止我什么也没得到。
元素没有附加特定的侦听器,据我所知,它是通过 mouseover 侦听器或类似侦听器触发的,元素包含许多附加到它们的侦听器。
这也不是浏览器功能,它是 javascript 特有的,因为当我将大部分代码设为 null 时,它不会发生。
我已经尝试nulling 我知道的滚动方法如下:
[
'scroll',
'scrollTo',
'scrollBy',
'scrollByLines',
'scrollByPages',
'scrollX',
'scrollY',
'scrollMaxX',
'scrollMaxY',
'scrollHeight',
'scrollIntoView',
'scrollTop',
'scrollTopMax'
].forEach(function(a) {
window[a] = null;
document.documentElement[a] = null;
})
希望当神秘函数尝试调用滚动方法时会抛出错误,但它仍然可以正常滚动而没有任何问题。
我也尝试监听滚动事件,但没有返回参数让我更接近负责的函数。
我尝试在缩小的源代码中查找它,但是常见的scroll 搜索返回 266 个结果,我什至不确定它是否使用了典型的滚动方法。
有什么方法可以找到使页面滚动的功能吗?
【问题讨论】:
-
找到mouseover事件的来源并检查这个函数。也尝试使用类似这样的东西来运行处理程序:
getEventListeners(document.querySelector('.link')); -
@dfsq 鼠标悬停处理许多其他功能,所有这些功能都被缩小了,我已经解释过这些元素有很多附加到它们的侦听器。
-
@vsync 这是滚动的页面,因为我可以清楚地看到页面在移动,并且如果我将侦听器附加到窗口,则会发生滚动事件。
-
即使有数百个监听器,您也可以使用 getEventListeners 将它们全部列出。
-
@dfsq 我能用这么多导致更多调用堆栈的侦听器做什么,其中大部分由
.call()和.apply()分发?它最终将与逐行调试整个代码相同。
标签: javascript html debugging