jQuery – vpage.js 快速切換網址與對應事件

- vpage 是一個 jQuery 的 plugin 掛件
- 透過簡單的寫法,設計出與網址對應的動態事件
- 能讓瀏覽器的上下頁切換 (window.onpopstate)、重新整理頁面後 (偽 history.state) 觸發指定的事件或動畫
- vpage 不包含 AJAX 處理
- 可應用在分享網址時,自動打開分享時的動畫階段,不必讓使用者重新操作
一般安裝
前往 GitHub,將壓縮檔下載後放到指定目錄
<script src="src/jquery.vpage.min.js"></script>
透過 Bower 安裝
- 在你的專案目錄底下建立 bower.json
{ "name": "你的專案名稱", "version": "你的版本編號", "dependencies": { "vpage.js" : "*" } }
- 接著打上 bower install 執行安裝
範例
$(selector).vpage({ name: 'my_button', // 該模型的唯一名稱 event: 'click', // 綁定的事件,參考 jQuery 的 .on() 方法 url_get_onload_key: 'call_vpage_name', // 提供網址一個觸發 vpage 的 GET 參數鍵如 ?call_vpage_name=my_button prepare: function (param){ // 事件觸發前的動作 }, do: function (param){ // 事件觸發 }, onload: function (){ // 畫面進入後要觸發的事件 // 例如偵測到網址 ?call_vpage_name=my_button 會觸發 }, onpop: function (){ // 上下頁切換觸發的事件 } })
詳細範例
方法
$.vpage.get_url_param(key)
取得網址的 GET 參數
參數 | 型態 | 說明 |
---|---|---|
key | string | GET的鍵 |
// http://domain.com?onload=hello_world&type=news $.vpage.get_url_param("onload"); // hello_world $.vpage.get_url_param("type"); // news
$.vpage.listen()
須要放置在所有的 vpage 最後。用來監聽 vpage 設定的頁面讀取事件(onload)與上下頁切換事件 (onpop)。
$.vpage.trigger(name, type);
提供手動觸發 vpage 的 onload() 與 onpop()
參數 | 型態 | 說明 |
---|---|---|
name | string | vpage 的名稱 |
type | string | onload | onpop |
$.vpage.trigger("my_button", "onload"); // 觸發 vpage = my_button 的 onload 方法
$.vpage.set(name, key, val)
設定參數
參數 | 型態 | 說明 |
---|---|---|
name | string | vpage 的名稱 |
key | string | 參數鍵 |
val | string | 參數值 |
$.vpage.set("my_button", "url", "?onload=my_button&type=news");
$.vpage.get(name, key)
取得參數
參數 | 型態 | 說明 |
---|---|---|
name | string | (選)vpage 的名稱,不指定返回全部 |
key | string | (選)參數的鍵,不指定返回全部 |
$(".item").vpage({ name: 'my_button', prepare: function (param){ $.vpage.set("my_button", "url", "?call_vpage_name=my_button^type=news"); }, do: function (){ var url = $.vpage.get("my_button", "url"); // ?call_vpage_name=my_button^type=news } ...... })
$.vpage.default()
當網址不存在任何已定義的 vpage 時,將會觸發該方法。例如多款 vpage 混合使用,我們會希望定義一個最原始的畫面。
$(".item").vpage({ ...... name: "frame", ...... }) $(".box").vpage({ ...... name: "box", url_get_onload_key: "vp", ...... }) // www.domain.com?onload=frame => 不會觸發 // www.domain.com?vp=box => 不會觸發 // www.domain.com?id=77 => 觸發 // www.domain.com => 觸發 $.vpage.default = function (){ // 初始畫面的樣式 }
$(selector).vpage(param);
針對元素綁定事件
參數 | 型態 | 說明 |
---|---|---|
param.name | string | 為該模型命名 |
param.event | string | 在元素綁定 on 的事件 |
param.do(param) | function | 觸發時的動作 |
param.onload | function | 畫面進入時所觸發的事件 |
param.onpop | function | 切換上下頁面所觸發的事件 |
param.parent | string | (選)on 的父元素, param.parent 與 param.child 同時使用,等於取代選擇器使用 |
param.child | string | (選)on 的子元素, param.parent 與 param.child 同時使用,等於取代選擇器使用 |
param.state | object | (選)history.pushState 物件 |
param.prepare(param) | function | (選)觸發事件前的準備動作 |
param.title | string | (選)變更的網頁標題 |
param.url_get_onload_key | string | (選)提供 onload 辨識的鍵,預設 onload |
使用 parent 與 child 的情況
如果使用 parent 與 child 參數,那麼選擇氣的位置保持空白即可
$().vpage({ //... parent: ".header", child: ".item", event: "click", //... });
事件上的綁定也就等同於
$(".header").on("click", ".item", function (){})
動態替換網址的建議方法
請不要直接使用 JavaScript 原生的 history.pushState() 切換網址,應該配合 $.vpage.set() 的方式指定才能有效操作。
$(".item").vpage({ ...... prepare: function (param){ $.vpage.set("my_button", "url", "?onload=my_button&type=news"); }, ...... })
也可以使用標籤的寫法
<a href="?onload=my_button&type=news" class="item news">最新消息</a>
更多範例