一渐行、路由介紹
?? ??https://www.baidu.com/嗡靡,訪問這個的地址焚刺,你會進入一個頁面匪蝙,
? ? https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&word=ds主籍,訪問這個地址,你會進入另一個頁面逛球。
? ? 用現(xiàn)象來解釋的話千元,這就是路由
二、cocoscreator發(fā)布 h5颤绕,路由現(xiàn)狀
? ? 假設(shè)你的h5的項目發(fā)布到域名 https://xxxx.com幸海,而且你未對路由進行過任何處理,你在域名后面面加后綴如https://xxxx.com/?scene=GameScene,永遠只會跳轉(zhuǎn)到第一個場景奥务。
? ? 我們接下來根據(jù)百度的效果物独,來實現(xiàn)路由的功能
三、路由功能實現(xiàn)
????1氯葬、根據(jù)所處場景不同挡篓,或者用戶執(zhí)行回退時,動態(tài)改變?yōu)g覽器地址欄
? ? 假設(shè)百度是由cocoscreator實現(xiàn)的,有三個場景 guojiScene.fire(國際)官研,guoneiScene.fire(國內(nèi))秽澳,junshiScene.fire(軍事)。
? ? 當前處于guojiScene戏羽,地址欄https://news.baidu.com/guoji担神,現(xiàn)在點擊跳轉(zhuǎn)到guoneiScene,地址欄更改為https://news.baidu.com/guonei
????而此時如果點擊瀏覽器回退蛛壳,則又跳回到https://news.baidu.com/guoji
????以上功能 由下面實現(xiàn)
// 監(jiān)聽場景加載完成
cc.director.on(cc.Director.EVENT_AFTER_SCENE_LAUNCH, function () {
// 獲取當前場景名
? ? let loadedScene = cc.director.getScene().name;
? ? // 并且添加進歷史杏瞻,使得瀏覽器的回退功能生肖
? ? history.pushState(
????????tLocation.state,
????????null,
? ? ? ? // 將場景名寫入到地址欄
? ? ? ? "/?scene=" + loadedScene
????);
}, this);
????2、點擊回退后衙荐,實現(xiàn)跳轉(zhuǎn)
????1的代碼只能夠保證執(zhí)行回退按鈕的時候捞挥,更改地址欄,但是要能夠跳轉(zhuǎn)到我們需要的頁面忧吟,需要這么做砌函。
if ("onpopstate" in window) {
????// 操作回退后要執(zhí)行跳轉(zhuǎn)
????window.addEventListener("popstate", function (e) {
????????// 獲得當前地址欄的場景參數(shù)
????????var tRoute =queryToObj(window.location.href).scene;
? ? ? ? cc.director.loadScene(tRoute);
? ? }, false);
}
這樣可以監(jiān)控到回退后地址欄的變化,并且拉取scene參數(shù)執(zhí)行跳轉(zhuǎn)
3溜族、根據(jù)輸入scene參數(shù)讹俊,實現(xiàn)跳轉(zhuǎn)對應(yīng)場景
當然上述方式,是在跳轉(zhuǎn)場景發(fā)生后煌抒,去改變地址欄仍劈。但是如果反過來呢,用戶主動地址欄輸入了scene寡壮,那么該如何跳轉(zhuǎn)呢贩疙。
????我們需要修改main.js
// data為域名后加入的參數(shù),query函數(shù)需要自己實現(xiàn)
var data = query(window.location.href);
if (data.scene =="LoginScene"){
????loadScene("LoginScene");
}else {
????loadScene("HallScene");
}
? ? 也就是在第一次加載場景的時候况既,我們就要去讀區(qū)地址欄了
四这溅、引發(fā)思考
????上面介紹的例子,只教大家如何獲取scene參數(shù)實現(xiàn)跳轉(zhuǎn)場景棒仍。如果你能比較快的舉一反三的話悲靴,會發(fā)現(xiàn)路由能夠?qū)崿F(xiàn)的東西有很多。
路由本質(zhì)上只是一個參數(shù)攜帶裝置莫其,至于這些參數(shù)定義成什么癞尚,能夠帶動那些邏輯功能,是由你決定的乱陡。
????你可以通過參數(shù)實現(xiàn)跳轉(zhuǎn)場景否纬,也可以通過參數(shù)實現(xiàn)控制 測試/正式 環(huán)境切換,或者實現(xiàn)測試帳號登錄?等等...?