2

我希望以下代码每次访问仅运行一次。如果我从主页导航到不同的页面并返回主页,我应该不会再看到效果。如果我刷新页面,我应该看到效果。这是代码:

function stack(){
       $('#image').animate({
            width: 200,
            height: 150,
            top: 0,

        },1500);
}
$(function(){
    stack();
});

这是我在做什么:http: //jsfiddle.net/kq5M4/

4

3 回答 3

2

设置一个 cookie 来标记效果已经发生,但还要在每个页面加载时设置一个 cookie,以跟踪最后一页。如果主页加载时,上次访问的页面也是主页,再次运行效果。

(使用https://github.com/carhartl/jquery-cookie。

在主页上:

var lastPage = $.cookie('last_page');
if (!lastPage || lastPage == document.location.pathname)
    stack();

在每个页面(包括主页)上:

$.cookie('last_page', document.location.pathname, {expires: 0}); // expires: 0 makes it a session-only cookie

您可能需要检查引荐来源网址,以便在他们离开您的网站并稍后返回时再次运行。

于 2013-04-12T19:36:23.817 回答
1

在页面加载时,检查document.referrer是否与您的域不同或空白,然后执行动画。在您的页面之间导航或刷新页面将包含您的域,document.referrer因此您将跳过动画。

$(function(){
    if (!document.referrer.match(/buybluesky.com/) || document.referrer == document.location.href) {
      stack();
    }
});

编辑:似乎我错过了一些东西,但我重新编辑了代码以匹配您的所有标准。除了检查referer来决定是否需要显示动画,它还检查referrer是否等于当前位置。如果是,则意味着自从您从该页面来到该页面以来,这是一次刷新。

于 2013-04-12T19:32:21.900 回答
1

使用 sessionStorage & 存储最后一页:

var visited = sessionStorage.getItem('visit');

if (visited == null || document.location.href == sessionStorage.getItem('lastPage')) {
    stack();
    sessionStorage.setItem('visit', 1);
}

sessionStorage.setItem('lastPage', document.location.href);
于 2013-04-12T19:38:51.357 回答