切換tab頁,頁面區域性重新整理,位址列路徑修改
阿新 • • 發佈:2019-02-20
- 需求:
做一個類似百度這種,切換tab,頁面展示區域性重新整理的效果。
- 思路:
tab展示的切換,使用display控制。但是,如果頁面重新整理,則無法保留顯示在tab2的效果,因而在位址列加引數標記。但如果用a的href或者location.href 均會將整個頁面重新整理,體驗很差,故需只修改位址列路徑,但不重新整理頁面。
- 解決方案:
在切換tab時,
先處理隱藏顯示區域的內容,
再將位址列的內容改掉,如下:
window.history.replaceState(null,null,'./tabDemo.html?tab=tab_a');
demo 核心js:
$('.search_bar .search_tab').click(function(){ $('.search_bar .search_tab').removeClass('active'); $(this).addClass('active'); if(this.id == 'tabB'){ $('.contentA').hide(); $('.contentB').show(); window.history.replaceState(null,null,'./tabDemo.html?tab=tab_b'); }else{ $('.contentA').show(); $('.contentB').hide(); window.history.replaceState(null,null,'./tabDemo.html?tab=tab_a'); } });
補充關於pushState
的知識:
history物件的方法。
history.pushState():
history.pushState
方法接受三個引數,依次為:
state
:一個與指定網址相關的狀態物件,popstate事件觸發時,該物件會傳入回撥函式。如果不需要這個物件,此處可以填null。title
:新頁面的標題,但是所有瀏覽器目前都忽略這個值,因此這裡可以填null。url
:新的網址,必須與當前頁面處在同一個域。瀏覽器的位址列將顯示這個網址。
pushState方法不會觸發頁面重新整理,只是導致history物件發生變化,位址列會有反應。
history.replaceState():
history.replaceState
方法的引數與pushState
方法一模一樣,區別是它修改瀏覽歷史中當前紀錄。