2013-04-12 34 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