婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Html5頁面中的返回實現的方法

Html5頁面中的返回實現的方法

熱門標簽:當涂高德地圖標注 電銷機器人電話用什么卡 成都智能外呼系統平臺 黃島區地圖標注 四川點撥外呼系統 云南大理400電話申請官方 江蘇智能電銷機器人哪家好 鎮江智能外呼系統有效果嗎 南寧點撥外呼系統哪家公司做的好

看到這個題目你可能覺得這是什么鬼? 其實我想說的是這種,看下面的錄制:

這種交互在H5頁面中比比皆是,點擊城市->彈出城市選擇浮層->按返回按鈕關閉浮層。

這些操作都是不要點擊左上角/右上角的關閉按鈕就可以進行的,飛豬的H5是前進出現彈層,返回時彈層關閉,其他家都不行(去哪兒網H5飛機票,美團H5酒店)。

為什么要這么設計?

因為H5是在手機上操作的,手機上的手指可操作區域的覆蓋范圍很小,更別說左上角/右上角這些死角(取消/關閉)區域了。你肯定聽過這個操作:輕觸返回。這個在用戶操作的時候非常方便友好,選擇完城市后,不需要點擊取消,直接在大拇指可以操作的地方點擊返回就關閉了彈層。

如何實現

既然有這種非常好的需求,那作為開發肯定就會想法設法的實現這個功能了。 你甚至都不用google,你就應該會想到類似的history.back(),history.go()這些方法了。 然而想到這些依舊沒用,理論上 瀏覽器/webview 的返回/前進的是要重新加載頁面的,因為URL發生了變化。 如果你真的知道單頁面應用(SPA),或者使用React/Vue你就應該知道有個東西叫:路由。 這些通過改變hash且無法刷新的url變化是HTML5時加入的history功能

the-history-interface

interface History {
  readonly attribute unsigned long length;
  attribute ScrollRestoration scrollRestoration;
  readonly attribute any state;
  void go(optional long delta = 0);
  void back();
  void forward();
  void pushState(any data, DOMString title, optional DOMString? url = null);
  void replaceState(any data, DOMString title, optional DOMString? url = null);
};
  1. pushState
  2. replaceState

還有一個事件

  1. onpopstate

pushState,replaceState 用來改變histroy堆棧順序,onpopstate 在返回,前進的時候觸發

vue-router中的實現也是如此(第1694行)

具體實現

既然說了這么多,那我們來看下怎么實現這種功能。

來看下 pushState 和 replaceState 的兼容性

全綠,用起來放心多了。

思路:

  1. 點擊彈層時 pushState 添加 hash
  2. "輕觸返回"的時候觸發 onpopstate 事件時候隱藏彈層并修改 hash
<button onclick="city()">
        城市
    </button><br>
    <button onclick="calendar()">
        日歷
    </button><br>
    <button onclick="description()">
        說明
    </button>

    <div id="city" class="com" style="display: none;">
      模擬城市彈框層
    </div>
    <div id="calendar" class="com" style="display: none;">
      模擬日歷彈框層
    </div>
     <div id="description" class="com" style="display: none;">
      模擬說明彈框層
    </div>
      button {
          border: #0000;
          background-color: #f90;
      }
      .com {
        position: absolute ;
        top: 0;
        bottom: 0;
        left: 0;
        right: 0;
        background-color: #888589;
      }
var cityNode = document.getElementById('city');
    var calendarNode = document.getElementById('calendar');
    var descriptionNode = document.getElementById('description');
      function city() {
        cityNode.style.display = 'block';
        window.history.pushState({'id':'city'},'','#city')
      }
      function calendar() {
        calendarNode.style.display = 'block';
        window.history.pushState({'id':'calendar'},'','#calendar')
      }
      function description() {
        descriptionNode.style.display = 'block';
        window.history.pushState({'id':'description'},'','#description')
      }
      window.addEventListener('popstate', function(e){
        // alert('state:' + e.state + ', historyLength:' + history.length);
        if (e.state && e.state.id === 'city') {
            history.replaceState('','','#');
            cityNode.style.display = 'block';
        } else if (e.state && e.state.id === 'calendar') {
            history.replaceState('','','#');
            calendarNode.style.display = 'block';
        } else if (e.state && e.state.id === 'description') {
            history.replaceState('','','#');
            descriptionNode.style.display = 'block';
        } else {
            cityNode.style.display = 'none';
            calendarNode.style.display = 'none';
            descriptionNode.style.display = 'none';
        }
      })

主要看 JS 代碼,監聽頁面的前進和后退事件來控制history。

源碼在此

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:淮安 佳木斯 咸寧 廣西 南京 十堰 西寧 酒泉

巨人網絡通訊聲明:本文標題《Html5頁面中的返回實現的方法》,本文關鍵詞  Html5,頁面,中的,返回,實現,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Html5頁面中的返回實現的方法》相關的同類信息!
  • 本頁收集關于Html5頁面中的返回實現的方法的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 集安市| 孟津县| 庆阳市| 砀山县| 翁源县| 湖南省| 钦州市| 佛教| 清水县| 黄梅县| 云南省| 深圳市| 陆川县| 行唐县| 永兴县| 鹤庆县| 确山县| 囊谦县| 罗田县| 炉霍县| 商洛市| 柘荣县| 南丰县| 宜黄县| 革吉县| 义马市| 盐山县| 富裕县| 内丘县| 扶风县| 安远县| 常德市| 天津市| 宕昌县| 名山县| 中牟县| 阳东县| 郓城县| 喀喇沁旗| 新兴县| 梁山县|