第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

好用的route hashchange 類似history.js 思路

好用的route hashchange 類似history.js 思路

回首憶惘然 2019-04-13 08:45:38
要做類似https://github.com/jgallen23/routie的功能,單頁app就是需要處理前進后退和view的route[需要兼容ie6]http://millermedeiros.github.io/crossroads.js/https://github.com/asual/jquery-addresshttps://github.com/cowboy/jquery-bbq好久沒更新了https://github.com/browserstate/history.js好復雜的感覺記得幾年前自己做的一個項目是監(jiān)聽hash來實現(xiàn)的,現(xiàn)在再次遇到這個需求找了一下,發(fā)現(xiàn)還是之前的庫[crossroads,bbq],history.js居然2000多行還不支持Opera11,MercuryiOS想問大家推薦一些好用的route的思路,以及為啥一個前端url監(jiān)聽搞的這么復雜,這么多年過去了居然沒有相對清晰好用的方案難道非要逼我抄一個https://github.com/RubyLouvre/mmRouter/嗎[每次遇到這樣的解決方案問題,發(fā)現(xiàn)司徒大的東西還是很實用滴~~]
查看完整描述

2 回答

?
湖上湖

TA貢獻2003條經(jīng)驗 獲得超2個贊

還不快來試試我的?
Q.js是一個炒雞輕量的前端單頁路由框架。
輕量、快速、極簡
https://github.com/itorr/q.js
 為了更好的利用緩存以及更少的后端支援,Q.js放棄了HTML5State,通過#!格式的urlhach重現(xiàn)了url路由功能。
無JavaScript庫依托,可隨意搭配使用
源代碼不及百行壓縮后834byte
支持IE6+ChromeSafariFF
未做情況判定,使用Q.js必然會注冊window.Q
萬物之死始
我們先來一段簡單的HelloWorld
html
打開例子后,瀏覽器會從http://simple.com/跳轉(zhuǎn)到http://simple.com/#!home,并且在頁面顯示HalloWorld。
如此,您的第一個通過Q.js實現(xiàn)的URL路由就工作了~
接著我們再詳細說明下,如何讓Q.js工作的。
注冊URL
在Q.js中,提供關鍵字和正則表達式兩種注冊URL方式。
關鍵字注冊URL在Q.js中效率最高、但需要按照關鍵字模式規(guī)劃URL,在前者不能滿足需求情況下可以使用正則注冊法~
使用正則表達式注冊URL可能會不同程度的增加運行時間(極不明顯),在允許的情況下請優(yōu)先使用關鍵字注冊URL~
接下來我們通過規(guī)劃一個blog的URL,來學習如何使用Q.js注冊URL。
首頁
我們先從首頁開始~
在注冊之前我們分析一下注冊首頁URL都有哪些需求:
1.首先首頁有一個固定格式
2.在大部分情況下不需要在URL中體現(xiàn)參數(shù)傳遞
3.是打開域名時的默認展示頁
首先我們通過注冊一個固定頁面home,回調(diào)不期待傳值
javascriptQ.reg('home',function(){
console.log('打開了首頁');
/*JavaScript代碼*/
});
通過以上代碼訪問#!home時,就會觸發(fā)后面的回調(diào)。
在回調(diào)中我們修改頁面DOM實現(xiàn)頁面無刷新變換內(nèi)容。
(這部分不在本篇文檔所述范疇)
按照這樣的方法,同理我們也可以實現(xiàn)類似關于#!about、友情鏈接#!friend等等頁面的注冊。
實現(xiàn)了首頁的URL注冊之后,我們要在打開網(wǎng)頁時默認跳轉(zhuǎn)到home頁。
Q.js的啟動,由Q.init函數(shù)實現(xiàn)。=
javascriptQ.init({
index:'home'/*首頁地址如果訪問到不能訪問頁面也會跳回此頁*/
});
在init的啟動參數(shù)里面附帶index參數(shù),這樣我們訪問頁面時就會默認打開#!home
如果覺得#!home中的!不符合預期,這…也是可以改的~
javascriptQ.init({
key:'^_^',/*url里#和url名之間的分割符號默認為感嘆號*/
index:'home'/*首頁地址不可訪問路徑也會跳回此地址*/
});
可以通過任意符合URI規(guī)范的字符串分割,甚至也可以設置為空。
設置為空時,Google等現(xiàn)代搜索引擎可能無法按照路由地址實現(xiàn)索引。請謹慎設置
文章頁和翻頁
文章頁和首頁不太一樣、只有URL的一部分是相同的,需要通過URL中的不同部分區(qū)分不同文章頁,不是默認打開頁。
文章頁有一個固定的格式
需要在URL中體現(xiàn)文章唯一ID
Q.js關鍵字模式時,參數(shù)之間通過/分割,請根據(jù)順序進行URL規(guī)劃
javascriptQ.reg('article',function(aid){
if(!aid)
returnalert('傳入?yún)?shù)不正確,請確認您訪問的地址。');
console.log('打開了文章,文章唯一ID為:'+aid);
/*JavaScript代碼*/
});
注冊之后訪問頁面#!article/123即可觸發(fā)article頁面回調(diào),并傳入?yún)?shù)1"123"
Q.js不判斷傳入數(shù)據(jù)類型,請務必在回調(diào)中確認數(shù)據(jù)格式
翻頁可文章頁傳值方式基本一致,在這里不重述
分類頁
分類頁其實和文章頁很相似、只是參數(shù)一變成了分類名稱,內(nèi)容較多時需要傳遞下當前頁碼
分類頁有一個固定的格式
需要在URL中體現(xiàn)分類唯一名稱
可能會有頁碼信息
依據(jù)上面的要求,我們依舊使用關鍵字注冊模式,注冊一個名為category的url預設兩個參數(shù)分類唯一名稱cstr,頁碼page
javascriptQ.reg('category',function(cstr,page){
if(!cid)
returnalert('傳入?yún)?shù)不正確,請確認您訪問的地址。');
if(!page)/*如果*/
page=1;
console.log('打開了分類頁面,分類名稱是:'+cstr);
console.log('當前頁面:'+page);
/*下面這段偽代碼依托iTorr.js僅作參考*/
/*根據(jù)分類唯一名稱和頁碼發(fā)起AJAX請求*/
$.x('/api/category/'+cstr+'/page/'+page,function(d){
console.log(d);
/*在這里修改頁面DOM*/
});
});
訪問#!category/photo會傳入photo到category的回調(diào)函數(shù)
訪問#!category/photo/2會傳入photo和2到category的回調(diào)函數(shù)
參數(shù)二不存在時,需要在回調(diào)函數(shù)內(nèi)進行處理~
導航條
有了這些URL之后,我們還需要一個導航條來提供頁面之間的入口,
導航條需要在每次頁面變更時修改導航條樣式,指示當前打開的頁面。
我們的HTML一般是這樣的
html
CSS一般是這樣的
CSSnav{line-height:2em;}
nava{display:inline-block;vertical-align:top;padding:0.5em;}
nava.active{background:#369;color:#FFF;}
這時候我們需要在每次URL變更時,通過JavaScript動態(tài)修改nav中的activeclass的位置,以修改樣式。
javascript/*這段偽代碼依托iTorr.js僅作參考*/
varnavchange=function(L){/*每次有url變更時都會觸發(fā)pop回調(diào)*/
/*L為當前回調(diào)函數(shù)名稱(目前僅支持關鍵字回調(diào)情況)*/
vara;//臨時變量
if(a=$('nava.active'))//如果存在這個DOM
a.className='';//修改它的ClassName
if(a=$('nava[href="#!'+L+'"]'))//如果存在這個DOM
a.className='active';//修改它的ClassName
};
Q.js提供了Q.pop事件,可以通過注冊Q.pop實現(xiàn)在每次URL變更時發(fā)生回調(diào),Q.pop事件和其他URL事件不發(fā)生沖突,并在其他URL回調(diào)函數(shù)之前運行,請注意觸發(fā)時機。
注冊和修改Q.pop有多種途徑??梢苑旁趩雍瘮?shù)中注冊,比如:
javascriptQ.init({
/*...各種其他參數(shù)...*/
pop:navchange//注冊pop函數(shù)
});
也可以通過關鍵字注冊
javascriptQ.reg('pop',navchange);
甚至可以直接修改Q.pop
javascriptQ.pop=navchange
請注意,使用Q.js請避免使用Q.js保留關鍵字為URL地址
保留關鍵字包括:reg,pop,go,V
到這里,我們的簡單的博客差不多就能用啦~
還剩下一個正則注冊URL沒有說,正則注冊在關鍵字判定前進行判定,不論注冊前后,請注意判定順序。所以也因為這樣,我們關鍵字判定中的關鍵字部分可以用正則表達式注冊法替代。
但是如果我們依舊想用保留關鍵字,用正則注冊法是這樣實現(xiàn)的
javascriptQ.reg(/pop/,function(){
console.log('pop事件');
});
正則注冊法需要在正則里指定可能傳入的值
以上我們的博客URL規(guī)劃基本就已經(jīng)完成啦~
如何實現(xiàn)更加豐富的url格式
關鍵字注冊法雖然方便,但僅僅支持關鍵字/參數(shù)1/參數(shù)2/參數(shù)3這種格式,想要實現(xiàn)更多不科學的URL格式,可以通過正則注冊法~
比如視頻網(wǎng)站的鏈接,由v開頭后面跟數(shù)字ID的情況,預期必然會有參數(shù)一并且為數(shù)字
javascriptQ.reg(/v(\d+)/,function(vid){
console.log('pop事件參數(shù)一:'+vid);
});
這樣訪問http://simple.com/#!v1234567就會傳遞值1234567給回調(diào)函數(shù)。
我想在JavaScript里知道當前在哪個頁面如何實現(xiàn)?
訪問Q.lash變量即可返回當前頁面關鍵字
Q.lash目前僅可返回關鍵字注冊的URL,預計會在下次版本更新時增加正則支持。
如何通過JavaScript跳轉(zhuǎn)到特定鏈接
因為在Q.js中!關鍵字是可以被修改的,如果通過JavaScript實現(xiàn)URL跳轉(zhuǎn),可以調(diào)用q.go函數(shù)
JavaScriptQ.go('category/code');
當然,大部分情況我們推薦使用HTML原生的a標簽link通過訪客觸發(fā),進行跳轉(zhuǎn)
HTML代碼分類
以上。
                            
查看完整回答
反對 回復 2019-04-13
?
月關寶盒

TA貢獻1772條經(jīng)驗 獲得超5個贊

貌似實現(xiàn)不了追加拼接的URL。
比如:分類有多個的情況。
catgory1=acatgory2=bcatgory3=c
能變成這樣嗎?view?catgory1=a&catgory2=b&catgory3=c
                            
查看完整回答
反對 回復 2019-04-13
  • 2 回答
  • 0 關注
  • 457 瀏覽
慕課專欄
更多

添加回答

了解更多

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號