2015-06-12 50 views
0

根據已回答的此問題:how-do-soundcloud-keep-music-playing-on-when-navigating使用新的HTML5 History API進行導航時,如何讓我的網站上播放音樂?

Soundcloud使用由HTML5 -HTML5 History API引入的新API。

所以我想知道,我的網站(音樂服務網站)如何實現這一點,所以我有導航時無縫播放音樂。我已經有一個網站播放音樂(vis1.php - 是音樂播放器),通過使用AJAX將內容加載到模塊包裝器中進行無縫導航時。 然而,這是不切實際的,特別是如果將有很多用戶,所以將php的內容加載到modulewrapper中並不是一個好主意。

所以看起來,HTML5的歷史API是最好的方法根據該articale, 所以我的問題是,我該如何去實現這個HTML5的歷史API,或者我能夠實現HTML5 H. API和我的Ajax模塊封裝一起嗎?

<?php include ("./inc/vis1.php"); ?> // this is my music player 
<?php 

     if (isset($_SESSION["user_login"])) 
     { 
     echo ' 
      <div id="menu"> 
       <a href="home">Home</a> 
       <a href="'.$use.'">Prof</a> 

       <a href="set.php">Set</a> 
       <a href="msmyg.php">Me</a> 

       <a href="frireq.php.php">Fr</a> 
       <a href="nudg.php">Nudg</a> 
       <a href="logout.php">Logout</a> 

      </div> 
      '; 
     } 
     else{ 

      echo'<div id="menu"> 
      <a href="index.php"/>S</a> 
      <a href="index.php">L </a> 
      </div> 
     '; 
     } 
     ?> 

    <div id="ihed"><div> 
     <script src="./js/jquery-2.1.4.min.js"></script> 
     <script src="./js/general.js"></script> 
</html>  
<footer> 
    <div id="c1">   
     <?php echo "Hedi Bej &copy; i-neo 2015"; ?> 
    </div> 
</footer> 

這是我的Javascript的Ajax general.js文件

(function() { 

$('#ihed').load('home.php'); 
var $moduleWrapper = $('#ihed'); 
var loadIntoModuleWrapper = function(e) { 
    e.preventDefault(); 
    var $anchor = $(this); 
    var page = $anchor.attr('href'); 
    $moduleWrapper.load(page); 
}; 

var sendFormAndLoadIntoModuleWrapper = function(e) { 
    e.preventDefault(); 
    var $form = $(this); 
    var method = $form.attr('method') || 'GET'; 
    $.ajax({ 
     type: $form.attr('method') || 'GET', 
     url: $form.attr('action'), 
     data: $form.serialize(), 
     success: function(data) { 
      $moduleWrapper.html(data); 
     } 
    }); 
}; 


// manage menu links to load content links onto module wrapper 
$('.menu').on('click', 'a', loadIntoModuleWrapper); 

// manage module-wrapper links to load onto module wrapper 
$moduleWrapper.on('click', '.open', loadIntoModuleWrapper); 

// manage submits form and load result onto module wrapper 
$moduleWrapper.on('submit', '.open-form', sendFormAndLoadIntoModuleWrapper); 
}()); 

謝謝,我該如何去這樣做呢?

+3

@JoseManuelAbarcaRodríguez 我認爲你誤解了播放音樂和音樂網站服務的網站之間的區別... – Hedi

+1

你誤解了與其他問題相關的文章。它不是Ajax或歷史API ......它們都是。 Ajax在不改變頁面的情況下導航。歷史記錄API來更改網址,以便用戶刷新時返回到類似配置的頁面。 – developerwjk

+0

@developerwjk哦,那對我來說真的是個好消息!所以我使用ajax,我只需要知道我需要做什麼來實現歷史api :)感謝您清理那些:)欣賞它! – Hedi

回答

1

聲音雲一直在播放音樂,因爲頁面沒有真正改變。他們提出了幾個Ajax請求來加載信息並根據請求顯示頁面信息。

然後,就像你說的,他們可能使用HTML5 History API來保存頁面狀態,以便用戶可以「返回」或「前進」。

如果刷新頁面,聲音將停止,因爲文檔請求將發送到服務器。

我不熟悉這種架構,但我認爲您可以使用angularJS輕鬆完成此操作。試試看:

https://www.codeschool.com/courses/shaping-up-with-angular-js

編輯

這裏是你如何改變你的鏈接:https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history

例子:

var stateObj = { foo: "bar" }; 
history.pushState(stateObj, "page 2", "bar.html"); 

這表明yourwebsite.com/瀏覽器網址上的bar.html。

stateObj是一個與push狀態關聯的對象,「page 2」是頁面標題,但是現在這個參數被瀏覽器忽略。

+0

謝謝你嘗試回答我的問題,Appreacite它,因爲我也使用ajax請求來加載我已經說過的信息。這使我更容易實現HTML5歷史api,問題是 - 我該如何去做呢? 我不明白與angular.js和html5歷史api的關係,請至少澄清一下這一點? – Hedi

+0

@Hedi angularjs已經做了很多你需要的路由,但是,我認爲它不適用於你的情況,除非你想完全重寫你的應用。 –

+0

我絕對想避免這種情況,我想我找到了我在尋找什麼,這就是你所說的「你正在使用的」模塊包裝器「可以繼續工作,你可以使用歷史API每次更改url一個新的內容被加載,並確保如果你直接去那個網址,你會得到相同的頁面。「 – Hedi

相關問題