检测URL更改是否已恢复

时间:2013-01-05 19:08:14

标签: javascript hash navigation back

我有一个在导航时使用一些微妙效果的网络应用。基本上,页面从右侧“滑动”。

应用程序中的所有内容都基于对哈希的更改以及所有正常运行的内容。

我正在寻找的是一种确定对URL的更改是否为“后退”操作的方法。我不会试图影响变化 - 我的应用程序已经完美地处理了这一点。我只是想扭转“效应”。换句话说,如果我知道他们点击“后退”,我想从左侧滑入,而不是从右侧滑入的通常动作。

请记住,我不需要动画本身的帮助或跟踪哈希中的应用状态 - 我只需要知道如何知道更改是否为“后退”动作。

此外,我真的不想在应用程序中保留一个哈希状态列表,因为用户单击以尝试确定它们是否“返回”。我可能会考虑,如果它真的是唯一的选择,但我希望找到一个只知道用户是否启动的解决方案(后退按钮,history.go(-1),右击“Go Back”等)。

这些信息是否在javascript中可用,而没有明确跟踪哈希值的变化?

1 个答案:

答案 0 :(得分:0)

使用上一页变量。我将假设当你“改变”页面时,你正在通过一个中心功能来完成它。

在您的转到页面功能

// Try to get the previous page if known (will be 'unidentified' if unknown)
var prevPage = window.previousPage;

// Set this page as the previous before moving.
window.previousPage = 'this page';

// Assume that gotoPage is where we are headed
if(gotoPage == prevPage)
{
    // We're going back!
}
else
{
    // We're going forward!
}

P.S。

我使用window.previousPage作为常规容器,并使用prevPage进行范围比较。这是设计用于限制您必须设置window.previousPage

的位置数

修改

没有想到多次回归,使用数组的相同想法(未经测试,但这是一般的想法)

var prevPage = '';

if( Object.prototype.toString.call( window.previousPage ) === '[object Array]' )
    prevPage = window.previousPage[ window.previousPage.length - 1 ];

if(prevPage == gotoPage)
{
    // Splice out the last entry
    window.previousPage.splice( window.previousPage.length - 1, 1);
    // Going back DO NOT add new window.previousPage
}
else
{
    // Going forward add the previousPage before changing
    window.previousPage[ window.previousPage.length ] = 'this page';

    // Move Page
}