最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript?history?對象詳解

 更新時間:2021年11月27日 15:29:35   作者:丶Serendipity丶  
這篇文章主要介紹了JavaScript?history?對象詳解,history?對象表示當前窗口首次使用以來用戶的導航歷史記錄。因為?history?是?window?的屬性,所以每個?window?都有自己的?history?對象,更多詳細內(nèi)容請參考下面文章內(nèi)容

前言:

  我們?yōu)g覽一個網(wǎng)頁時可能不太會注意網(wǎng)頁前進后退這些操作,但是在開發(fā)時你是否想過頁面之間的跳轉(zhuǎn)經(jīng)歷了什么,瀏覽器時怎么保存的頁面信息,重新返回上一個頁面的時候是否需要重新加載頁面呢,會有很對疑問,要想解決這些問題,首先需要知道瀏覽器中的window下的history對象,本文來詳細總結(jié)一下該對象的相關知識點。

  history 對象表示當前窗口首次使用以來用戶的導航歷史記錄。因為 history window 的屬性,所以每個 window 都有自己的 history 對象。出于安全考慮,這個對象不會暴露用戶訪問過的 URL,但可以通過它在不知道實際 URL 的情況下前進和后退。

1、路由導航

  history.go() 方法可以在用戶歷史記錄中沿任何方向?qū)Ш?,可以前進也可以后退。這個方法只接收一個參數(shù),這個參數(shù)可以是一個整數(shù),表示前進或后退多少步。

 history.go(-1);// 后退一頁

history.go(1);// 前進一頁

history.go(2);// 前進兩頁 //

go() 有兩個簡寫方法: back() 和 forward() 。

history.back();// 后退一頁

history.forward();//前進一頁

history 對象還有一個 length 屬性,history.length == 1表示這是用戶窗口中的第一個頁面

 histroy的go方法,back方法、forword方法以及用戶在瀏覽器手動的前進后退按鈕都會導致頁面刷新后跳轉(zhuǎn)。 

2、歷史狀態(tài)管理API

(1)hashchange 事件

  hashchange:history 對象的一個新特性是hashchange,會在頁面 URL 的散列變化時被觸發(fā),開發(fā)者可以在此時執(zhí)行某些操作。當URL的片段標識符更改時,將觸發(fā)hashchange事件 (跟在#符號后面的URL部分,包括#符號)。而狀態(tài)管理API 則可以讓開發(fā)者改變?yōu)g覽器 URL 而不會加載新頁面。

比如:pushState和replaceState方法,頁面并不會刷新,但是路由會發(fā)生改變。

(2)popstate 事件

  當活動歷史記錄條目更改時,將觸發(fā)popstate事件。如果被激活的歷史記錄條目是通過對history.pushState()的調(diào)用創(chuàng)建的,或者受到對history.replaceState()的調(diào)用的影響,popstate事件的state屬性包含歷史條目的狀態(tài)對象的副本。需要注意的是調(diào)用history.pushState()history.replaceState()不會觸發(fā)popstate事件。只有在做出瀏覽器動作時,才會觸發(fā)該事件,如用戶點擊瀏覽器的回退按鈕(或者在Javascript代碼中調(diào)用history.back()或者history.forward()方法)

(3)history.pushState() 方法

  pushState() 方法向當前瀏覽器會話的歷史堆棧中添加一個狀態(tài)(state)。這個方法接收 3 個參數(shù):一個 state 對象、一個新狀態(tài)的標題和一個(可選的)相對 URL。pushState() 方法執(zhí)行后,狀態(tài)信息就會被推到歷史記錄中,瀏覽器地址欄也會改變以反映新的相對 URL。URL欄顯示新地址, 但是不會加載 頁面,甚至不會檢查頁面是否存在,該方法會增加history.length

(4)history.replaceState()方法

  replaceState()方法修改當前歷史記錄實體。這個方法接收 3 個參數(shù):一個 state 對象、一個新狀態(tài)的標題和一個(可選的)相對 URL。replaceState() 方法執(zhí)行后,將會更新當前的state對象或者當前歷史實體的URL來響應用戶的的動作,URL欄顯示新地址, 但是不會加載 頁面,甚至不會檢查頁面是否存在。該方法不會增加history.length。

<body>
  <button onclick="handleNext()">點我到下一頁</button><br>
  <button onclick="handleLast()">點我到上一頁</button><br>
  <script>
    window.onload = function () {
      console.log(window.history);
    }
    window.addEventListener('hashchange', function () {
      console.log('The hash has changed!')
    }, false);
    window.addEventListener('popstate', (event) => {
      console.log("location: " + document.location + ", state: " + JSON.stringify(event.state));
    });
    function handleNext() {
      const state = { userId: "1234", page: "2" }
      const title = '二'
      const url = 'page2.html'
      window.history.pushState(state, title, url)
      console.log(window.history);
    }
    function handleLast() {
      const state = { userId: "1234", page: "21" }
      const title = '一'
      const url = 'page21.html'
      window.history.replaceState(state, title, url)
      console.log(window.history);
    }
  </script>
</body>

運行結(jié)果如下:

3、補充:URL的hash

  URL的hash也就是錨點(#), 本質(zhì)上是改變window.locationhref屬性,我們可以通過直接賦值location.hash來改變href, 但是頁面不發(fā)生刷新,

如下圖所示:

寫在最后:

到此這篇關于JavaScript history 對象詳解的文章就介紹到這了,更多相關history 對象內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 淺談JavaScript淺拷貝和深拷貝

    淺談JavaScript淺拷貝和深拷貝

    這篇文章主要介紹了淺談JavaScript淺拷貝和深拷貝,javascript中的對象是引用類型,在復制對象的時候就要考慮是用淺拷貝還是用深拷貝。接下來一起聊聊吧,感興趣的小伙伴也可以參考一下
    2021-11-11
  • Js原型鏈constructor prototype __proto__屬性實例詳解

    Js原型鏈constructor prototype __proto__屬性實例詳解

    這篇文章主要介紹了Js原型鏈constructor prototype __proto__屬性實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • 微信小程序圖片選擇、上傳到服務器、預覽(PHP)實現(xiàn)實例

    微信小程序圖片選擇、上傳到服務器、預覽(PHP)實現(xiàn)實例

    這篇文章主要介紹了微信小程序圖片選擇、上傳到服務器、預覽(PHP)實現(xiàn)實例的相關資料,需要的朋友可以參考下
    2017-05-05
  • Three.js相機Camera控件知識梳理

    Three.js相機Camera控件知識梳理

    這篇文章主要為大家介紹了Three.js相機Camera控件知識梳理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • JS屬性scrollTop?clientHeight?scrollHeight理解學習

    JS屬性scrollTop?clientHeight?scrollHeight理解學習

    這篇文章主要為大家介紹了JS屬性scrollTop?clientHeight?scrollHeight理解學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • JS作用域作用鏈及this使用原理詳解

    JS作用域作用鏈及this使用原理詳解

    這篇文章主要為大家介紹了JS作用域作用鏈及this使用原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • open 打開瀏覽器的過程原理示例解析

    open 打開瀏覽器的過程原理示例解析

    這篇文章主要為大家介紹了open 打開瀏覽器的過程原理示例解析,
    有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • JavaScript 中的文檔對象模型 DOM

    JavaScript 中的文檔對象模型 DOM

    DOM,即文檔對象模型,前端開發(fā)工程師必學的基礎知識,在本文將介紹如何在 HTML 文檔中選擇元素、如何創(chuàng)建元素、如何更改內(nèi)聯(lián) CSS 樣式以及如何監(jiān)聽事件,需要的朋友可以參考一下
    2021-10-10
  • 微信小程序 Video API實例詳解

    微信小程序 Video API實例詳解

    這篇文章主要介紹了 微信小程序 Video API實例詳解,需要的朋友可以參考下
    2016-10-10
  • JavaScript 反射學習技巧

    JavaScript 反射學習技巧

    這篇文章主要給大家分享的是JavaScript 的反射學習技巧,主要是區(qū)別在于所有的函數(shù)對象屬性過于復雜,而且額外增加可能會導致程序行為不合理,所以擴展 Reflect 函數(shù)來專門對函數(shù)對象處理調(diào)用方法,構(gòu)造對象,獲取或者設置屬性等相關操作。下面一起進入文章內(nèi)容吧
    2021-10-10

最新評論

万年县| 阜新| 罗平县| 天门市| 海南省| 胶南市| 北安市| 鸡西市| 崇文区| 彭阳县| 崇州市| 大田县| 石棉县| 云浮市| 南郑县| 赤城县| 山丹县| 霍邱县| 新干县| 鸡西市| 盐源县| 柯坪县| 高州市| 增城市| 手机| 开阳县| 左云县| 丹江口市| 兴义市| 横峰县| 丁青县| 樟树市| 陇南市| 河南省| 梁河县| 霍城县| 浦东新区| 新化县| 凌云县| 衡阳县| 六盘水市|