【发布时间】:2016-03-11 15:22:48
【问题描述】:
每当用户重定向到我网站中的另一个页面时,我都会在每个页面中使用 id 将页面滚动到某个固定速率。
我的问题是,用户需要双击浏览器的后退按钮才能将页面重定向到上一页,因此我需要在用户单击浏览器后退按钮时设置双击浏览器的后退按钮..
谢谢
【问题讨论】:
标签: javascript
每当用户重定向到我网站中的另一个页面时,我都会在每个页面中使用 id 将页面滚动到某个固定速率。
我的问题是,用户需要双击浏览器的后退按钮才能将页面重定向到上一页,因此我需要在用户单击浏览器后退按钮时设置双击浏览器的后退按钮..
谢谢
【问题讨论】:
标签: javascript
简答:
document.onmouseover = function() {
//User's mouse is inside the page.
window.innerDocClick = true;
}
document.onmouseleave = function() {
//User's mouse has left the page.
window.innerDocClick = false;
}
window.onhashchange = function() {
if (!window.innerDocClick) {
//Browser back button was clicked
window.history.go(-2);
}
}
解释:
window.history 对象包含用户在浏览器中访问过的 URL。 window.history.go(x) 函数用于使浏览器跳转到历史中的相关页面(所以本例中为-2 则返回两页)。
为了检测浏览器中的后退按钮何时被按下,我快速搜索并找到了this question here关于“如何检测浏览器后退按钮事件 - 跨浏览器”的解决方案。接受的答案对此有一个非常完整和详细的方法,我用它来获得上面的 sn-p,你一定要阅读。
上面 sn-p 的作用的快速概述是,它使用 2 个事件来检测用户的鼠标是否在页面文档中。如果它不在页面文档中,那么这意味着用户不会点击任何页面内元素,例如超链接等,这也可能会更改 URL。 'onhashchange' 事件检测位置哈希何时发生变化,然后检查用户的鼠标是否在文档中,如果没有,则执行双后退按钮。
请注意:如果用户按下退格键(或任何其他热键),此方法不适用。接受的答案确实涵盖了使用 jQuery 执行此操作的方法,如果不需要 jQuery,它看起来好像可以修改为在 vanilla JavaScript 中工作。 此方法也可能不涵盖 iPad 或其他平板电脑和移动设备等设备,因为它们没有鼠标事件。此外,Mac 触控板上的滑动事件很可能不会被覆盖。没有这些设备,我无法测试它们。
【讨论】: