JavaScript 在 Windows 上检测 Firefox 和 IE Edge 哈希 URL 上浏览器端滚动重新定位的事件
JavaScript event to detect browser-side scrolling reposition on hash URLs in Firefox and IE Edge on Windows
在尝试调整一些滚动脚本以在某些页面上执行 "jump to" 链接时,我注意到如果您的页面在 URL 中包含哈希标记,则行为会有所不同,具体取决于在浏览器上,当您在地址栏上按 Enter 键时,页面加载后。
例如,如果您在 URL 中加载带有 has 的页面,然后滚动离开目标元素,我注意到在 Firefox 和 IE 上,如果您将光标放在地址栏上,然后按 enter 键,页面将移回与主题标签具有相同 id
属性的 HTML 元素,但不会重新加载 页面.
我还注意到在这种情况下既不会触发 popstate
也不会触发 hashchange
事件。 scroll
事件很可能会被触发,但我们怎么知道这不是用户滚动而是浏览器重置其位置?
有没有在浏览器中检测到此类事件的?鉴于这是在视口之外,我有点好奇。但是我有一个场景,我想根据页面向上或向下滚动来重新定位菜单。
尝试解释我在寻找什么:
- 包含主题标签
#test
和元素 <div id="test">
的页面
- 按 F5,页面位置本身就在
<div>
为 的位置
- 向上或向下滚动
- 转到地址栏并按回车键
- ----寻找一个事件来检测之前的动作---
- 页面位置本身
就在
<div>
所在的位置
JSBin 中的示例(在 Firefox 中打开):
http://jsbin.com/rifikereze/1/edit?html,js,output
输出:
http://output.jsbin.com/rifikereze/1#test2
- 在 Firefox 中打开控制台
- 确保在 Firefox 设置中启用 "persistent logs" 以在页面重新加载后保留日志
- 按 F5(您应该会看到一条控制台消息 "reloaded")
- 现在尝试移动页面,将光标放在地址栏中并按回车键
- 您会看到页面不会重新加载
我们如何检测这些事件(滚动事件除外)?
如果尝试重现,请确保在 Windows 上使用 Firefox。看起来其他操作系统有其他行为。
鉴于缺少答案,我推测的答案是 No
。
无法使用 URL 和地址栏中的片段标识符(又名 hash
)检测浏览器的重新定位。
除此之外,浏览器似乎有不一致的行为:
- Firefox 在 Linux 上的行为与在 Windows 上的行为不同(它会重新加载页面)。
- Chrome 似乎忽略了重新定位,除非在卸载前将页面位置设置回顶部。
- 关于正常行为是重新加载还是重新定位似乎没有跨浏览器的标准。
检测片段标识符重新定位的唯一安全方法是在加载页面时。
在尝试调整一些滚动脚本以在某些页面上执行 "jump to" 链接时,我注意到如果您的页面在 URL 中包含哈希标记,则行为会有所不同,具体取决于在浏览器上,当您在地址栏上按 Enter 键时,页面加载后。
例如,如果您在 URL 中加载带有 has 的页面,然后滚动离开目标元素,我注意到在 Firefox 和 IE 上,如果您将光标放在地址栏上,然后按 enter 键,页面将移回与主题标签具有相同 id
属性的 HTML 元素,但不会重新加载 页面.
我还注意到在这种情况下既不会触发 popstate
也不会触发 hashchange
事件。 scroll
事件很可能会被触发,但我们怎么知道这不是用户滚动而是浏览器重置其位置?
有没有在浏览器中检测到此类事件的?鉴于这是在视口之外,我有点好奇。但是我有一个场景,我想根据页面向上或向下滚动来重新定位菜单。
尝试解释我在寻找什么:
- 包含主题标签
#test
和元素<div id="test">
的页面 - 按 F5,页面位置本身就在
<div>
为 的位置
- 向上或向下滚动
- 转到地址栏并按回车键
- ----寻找一个事件来检测之前的动作---
- 页面位置本身
就在
<div>
所在的位置
JSBin 中的示例(在 Firefox 中打开):
http://jsbin.com/rifikereze/1/edit?html,js,output
输出:
http://output.jsbin.com/rifikereze/1#test2
- 在 Firefox 中打开控制台
- 确保在 Firefox 设置中启用 "persistent logs" 以在页面重新加载后保留日志
- 按 F5(您应该会看到一条控制台消息 "reloaded")
- 现在尝试移动页面,将光标放在地址栏中并按回车键
- 您会看到页面不会重新加载
我们如何检测这些事件(滚动事件除外)?
如果尝试重现,请确保在 Windows 上使用 Firefox。看起来其他操作系统有其他行为。
鉴于缺少答案,我推测的答案是 No
。
无法使用 URL 和地址栏中的片段标识符(又名 hash
)检测浏览器的重新定位。
除此之外,浏览器似乎有不一致的行为:
- Firefox 在 Linux 上的行为与在 Windows 上的行为不同(它会重新加载页面)。
- Chrome 似乎忽略了重新定位,除非在卸载前将页面位置设置回顶部。
- 关于正常行为是重新加载还是重新定位似乎没有跨浏览器的标准。
检测片段标识符重新定位的唯一安全方法是在加载页面时。