2014-12-08 35 views
0

我的網站上創建了一個新頁面,網站/網頁 我希望此頁面上的視頻在創建頁面的20秒內開始。JavaScript中的全局計時器

目前,我有一個setTimeout函數等待20秒,然後啓動視頻。這個問題是每個用戶連接20秒計時器開始。我的目標是讓網站在頁面創建後20秒後啓動視頻,對於大家都。以下是一個示例:

用戶A在創建頁面的3秒內輸入website.com/NewPage。 用戶B在創建頁面的15秒內輸入website.com/NewPage。

後5秒用戶B連接,用戶A的視頻開始。 用戶B處於5秒鐘,必須等待15秒才能開始播放視頻。

我的目標是讓視頻在同一時間開始給每個人,只要他們在20秒前加入(沒有人可以在20秒後加入)。

因此,即使用戶B加入較晚,它將在同一時間開始爲每個人。

+0

你是什麼意思的「頁面被創建」?您的超時如何影響多個用戶,而不是位於客戶端?如果不是,您的服務器如何觸發視頻啓動? – Bergi 2014-12-08 01:39:21

回答

0

它必須在服務器上進行協調。你用long-polling標記了這個,所以我想這就是你正在使用的服務器通信技術。當爲新頁面打開第一個長輪詢連接時,請在服務器上啓動一個定時器。

+0

你能發表一個代碼示例嗎? – 2014-12-08 02:01:10

+0

那麼,後端服務器棧是什麼? – Segfault 2014-12-08 13:46:17

0

由於您在不同的用戶間共享定時器,我認爲您需要在後端維護定時器。在前端JavaScript中,爲每個用戶維護一個單獨的計時器(在本地瀏覽器上)。

說,你的前端代碼可能:

var timer = null; 
document.onload = function() { 
    $.ajax({ 
     url: '/server/timer', 
     type: 'get', 
     data: {userName: 'user A'} 
    }).done(function (res) { 
     if (res.remaining && res.remaining >= 0) { 
      alert('Hi, please wait for ' + res.remaining + ' seconds to start playing video'); 
      timer = setTimeout(function() { 
       // play the video 
      }, res.remaining * 1000); 
     } else { 
      alert('Sorry, you cannot watch the video now'); 
     } 
    }); 
} 

在你的後端代碼,保持API /server/timer以確保倒計時是爲每個用戶相同。

+0

他們有沒有使用ajax的方法?我覺得他們應該是一個更簡單的方法。 – 2014-12-08 02:17:31

+0

@AjaxjQuery我認爲沒有其他辦法。圖片你有10個用戶,他們每2秒訪問一次你的網站。然後對他們每個人,你都需要有一些機制來告訴他:'嗨,你的視頻在9秒內就開始了。'你怎麼知道這個號碼是'9'?你需要以某種方式保持號碼。 – Joy 2014-12-08 02:23:26