2013-04-12 35 views
2

我希望以下代码每次访问只运行一次。如果我从主页导航到不同的页面并回到主页,我不应该再次看到效果。如果我刷新页面,我应该看到效果。下面是代码:每次访问只执行一次js函数并在刷新时再次执行

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

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

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

+0

尝试使用cookie JQuery的:http://stackoverflow.com/questions/1458724/how-to-set-unset-cookie-with-jquery – George

+0

如何删除刷新cookies? – user1761895

+0

是从AJAX加载的页面部件的不同页面,还是全新的页面加载? – vol7ron

回答

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 

您可能需要检查引荐因此如果他们离开您的网站并稍后再回来,它会再次运行。

1

在页面加载,检查document.referrer如果是从您的域名或空白的不同,然后做动画。在页面之间导航或刷新页面将使您的域名位于document.referrer,因此您将跳过该动画。

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

编辑: 看来我错过了什么,但我已经重新编辑的代码到你所有的指标分析相匹配。除了检查引荐者是否需要显示动画以外,还会检查引荐者是否等于当前位置。如果它们是这样的,那意味着它是来自此页面的此页面之后的刷新。

+0

我认为OP *确实希望效果在刷新时再次发生,在这种情况下,这不会实现。现在修复了 –

+0

。它检查referrer是否=当前位置。如果是这样,那么它必须刷新 – TheBrain

+0

'document.referrer'在刷新前后是一样的,所以这也不起作用。 –

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); 
+0

但如果您导航离开或关闭浏览器并返回一个月 ?那个价值将仍然存在,并且不会有动画。 – TheBrain

+1

@TheBrain'sessionStorage'不是很持久。只要浏览器处于打开状态,它只会持续。这比我认为的饼干甚至更好。 –

+0

@KingKongFrog,如果他们在访问此页面后来自另一页面,该怎么办? 'visit'将会是1,但是'document.location.href'将等于'lastPage',除非你在其他页面中添加'sessionStorage.setItem('lastPage',document.location.href);'。你应该在你的答案中指定它。 – plalx