javascript - 检测滚动位置使用什么值 javascript

标签 javascript jquery iframe cross-browser

我正在摆弄jsfiddle我发现了一个潜在的问题。在 fiddle 中,我有一个记录器设置来跟踪滚动的位置,如果该网站嵌入在 iframe 中(它位于 jsfiddle 上)。但是,我需要能够使用 javascript 检测我使用的哪个值适合在所有浏览器中跟踪 iframe 内的滚动位置。我使用的值:

window.scrollTop

document.documentElement.scrollTop

document.body.scrollTop

fiddle 的js:

window.addEventListener("scroll",
  function() {
    console.log(
      "window:" + window.scrollTop + 
      "; documentElement:" + document.documentElement.scrollTop + 
      "; body:"+ document.body.scrollTop
    );
  }
);

fiddle 的 CSS:

html{ height : 300% }

使用 Chrome,我得到类似于以下内容的日志:

窗口:未定义; documentElement:0(始终为 0); body:[某个数字](变量数字-实际滚动)

注意:为了回应 charlieftl 的评论,我需要编写一个脚本来检测我列出的三个值中哪一个适合跟踪滚动位置。

此外,该脚本的目的是根据网站是否是 iframe(嵌入)来获取适当的滚动位置。当它不是适当的值时,它是window.scrollTop,但在iframe内它似乎是document.body.scrollTop。另外,我需要知道何时适合使用 document.documentElement.scrollTop。

注意: jQuery 解决方案受到赞赏,但首选原生 JavaScript。

最佳答案

因为我很好,所以我在几个浏览器上测试了这个 fiddle (除了 Opera - 由于某种原因我无法下载它)。

我发现您的脚本在 IE 和 Firefox 中记录 document.documentElement.scrollTop 的值。在 Chrome 中,它会记录 body.scrollTop 的值。 IE、Chrome 和 Firefox 都记录 undefinedwindow.scrollTop 值。

因此,window.scrollTop 对于 iframe 内容来说是没有用的。但为了防止 Opera 中情况并非如此,我编写了以下代码:

window.scrollTo(0,20);
document.documentElement.scrollTo(0,20);
document.body.scrollTo(0,20);

/* ^^these scroll values are only temporary */

if(isset(window.scrollTop) && window.scrollTop=20)
  alert("use window as object");

if(isset(document.documentElement.scrollTop) && document.documentElement.scrollTop=20)
  alert("use documentElement as object");

if(isset(document.body.scrollTop) && document.body.scrollTop=20)
  alert("use documentElement as object");

window.scrollTo(0,0);
document.documentElement.scrollTo(0,0);
document.body.scrollTo(0,0);

/* ^^default the scroll value back to normal state */

注意:但是,我会谨慎使用 window,因为它实际上可能引用父窗口而不是 iframe - 不要引用我的观点。我对 iframe 不太熟悉,我只是在玩弄你的 fiddle

关于javascript - 检测滚动位置使用什么值 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32999074/

相关文章:

javascript - html 和 javascript 问题(平滑滚动)

javascript - Sequelize Model.hasOne 错误 : Model is not associated to ModelTwo

javascript - Web App 卸载后不显示 "add to home screen"

javascript - 触发单击单选按钮作为文档准备就绪的一部分

javascript - $(item).load() 脚本中断(仅在 IE11 中),适用于开发人员工具

facebook - 如何将嵌入 iframe 的 HTML5 视频嵌入到 Facebook 新闻源中?

javascript - 链接在新页面加载,而不是 iframe

javascript - 按下按钮后如何调整 iframe?

javascript - 如何避免覆盖多个 if-else block ?

javascript - 跨度垂直对齐