整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          HTML跳轉到頁面指定位置的幾種方法

          有時候,我們想閱讀頁面中某段精彩的內容,但由于頁面太長,用戶需要自己滾動頁面,查找起來非常麻煩 ,很容易讓人失去繼續往下閱讀的興趣。這樣體驗非常不好,所以我們可以想辦法 實現點擊某段文字或者圖片跳轉到頁面指定位置,方便用戶的閱讀。

          一、 純 html 實現

          1. 利用 id 為標記的錨點

          這里作為錨點的標簽可以是任意元素。

            <a href="#aa">跳轉到 id 為 aa 標記的錨點</a>
            <p>-------------分隔線-------------</p>
            <div id="aa">a</div>
          

          2. 利用 a 標簽的 name 屬性作為錨點

          這里作為錨點的標簽只能是 a 標簽。

            <a href="#bb" >跳轉到 name 為 bb 的 a 標簽錨點</a>
            <p>-------------分隔線-------------</p>
            <a name="bb">name 為 bb 的 a 標簽的錨點</a>
            <div id="abb">bbb</div>
          

          注意:當以 ' a 標簽 name 屬性作為錨點 ' 和 ' 利用 id 為標記的錨點 ' 同時出現(即以 name 為錨點和以 id 為錨點名字相同時),會將后者作為錨點。

          二、 js 實現

          1. 利用 scrollTo()

          window.scrollTo 滾動到文檔中的某個坐標。可提供滑動效果,想具體了解 scrollTo() 可以看看 MDN 中的介紹。

          話不多說,看下面代碼

          「html 部分」:

            <a id="linkc">平滑滾動到 c</a>
            <p>-------------分隔線-------------</p>
            <div id="cc">c</div>
          

          「js 部分」:

            var linkc = document.querySelector('#linkc')
            var cc = document.querySelector('#cc')
          
            function to(toEl) {
              // toEl 為指定跳轉到該位置的DOM節點
              let bridge = toEl;
              let body = document.body;
              let height = 0;
              
              // 計算該 DOM 節點到 body 頂部距離
              do {
                height += bridge.offsetTop;
                bridge = bridge.offsetParent;
              } while (bridge !== body)
              
              // 滾動到指定位置
              window.scrollTo({
                top: height,
                behavior: 'smooth'
              })
            }
          
            linkc.addEventListener('click', function () {
              to(cc)
            });
          

          2. 利用 scrollIntoView()

          Element.scrollIntoView() 方法讓當前的元素滾動到瀏覽器窗口的可視區域內。想具體了解 scrollIntoView() 可以看看 MDN 中的介紹。

          下面也直接上代碼

          「html 部分」:

            <a onclick="goTo()">利用 scrollIntoView 跳轉到 d</a>
            <p>-------------分隔線-------------</p>
            <div id="dd">ddd</div>
          

          「js 部分」:

            var dd = document.querySelector('#dd')
          
            function goTo(){
              dd.scrollIntoView()
            }
          

          注意:此功能某些瀏覽器尚在開發中,請參考瀏覽器兼容性表格以得到在不同瀏覽器中適合使用的前綴。由于該功能對應的標準文檔可能被重新修訂,所以在未來版本的瀏覽器中該功能的語法和行為可能隨之改變。

          下面為了方便看效果,把上面的代碼整理在一起。

          <!DOCTYPE html>
          <html lang="en">
          <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Document</title>
            <style>
              div {
                width: 600px;
                height: 300px;
                background-color: pink;
              }
            </style>
          </head>
          <body>
            <a href="#aa">跳轉到以 id 為 aa 標記的錨點 a</a>
            <p>-------------分隔線-------------</p>
            <a name="aa">hhh</a>
            <div id="aa">aa</div>
            <a href="#bb" >跳轉到 name 為 bb 的 a 標簽錨點</a>
            <p>-------------分隔線-------------</p>
            <a name="bb">name 為 bb 的 a 標簽的錨點</a>
            <p>-------------分隔線-------------</p>
            <div>bb</div>
            <a id="linkc">平滑滾動到 c</a>
            <p>-------------分隔線-------------</p>
            <div id="cc">cc</div>
            <a onclick="goTo()">利用 scrollIntoView 跳轉到 d</a>
            <p>-------------分隔線-------------</p>
            <div id="dd">dd</div>
            <p>-------------分隔線-------------</p>
            <div></div>
          </body>
          <script>
            var cc = document.querySelector('#cc')
            var linkc = document.querySelector('#linkc')
          
            function to(toEl) {
              //ele為指定跳轉到該位置的DOM節點
              let bridge = toEl;
              let body = document.body;
              let height = 0;
              do {
                height += bridge.offsetTop;
                bridge = bridge.offsetParent;
              } while (bridge !== body)
          
              console.log(height)
              window.scrollTo({
                top: height,
                behavior: 'smooth'
              })
            }
          
            linkc.addEventListener('click', function () {
              to(cc)
            });
          
          </script>
          <script>
            var dd = document.querySelector('#dd')
          
            function goTo(){
              dd.scrollIntoView()
            }
          </script>
          </html>
          

          效果圖:

          年做了大量的 HTML5 項目,遇到了很多坑。在這個過程中學到了一些之前不具備的知識,所以這篇文章就簡單分享一下這方面的話題。

          傳統的MPA

          首先,說一個比較古老的東西,叫做 MPA。

          MPA 的全稱是 Multi-page Application,意思是整個應用(站點)由多個完整的 html 構成。用戶在頁面 1 點擊跳轉,需要向服務端請求頁面 2,請求成功后渲染。而用戶返回時,相當于是點擊了瀏覽器的返回,頁面退回到之前的歷史記錄,并重新加載出來。

          在這樣的模式下,頁面間切換慢、不流暢的問題比較突出,尤其是在移動端。

          同時,它還產生了幾個小問題:

          • 跳轉動畫:頁面間的跳轉無法實現轉場動畫效果。
          • 如果前一個頁比較長,用戶滑動到頁面比較靠下方的位置后點擊,返回時,頁面無法默認停留在原位置。
          • iOS 右滑返回產生問題,從頁面 1 跳轉到頁面 2,再從頁面 2 跳轉到頁面 3,右滑返回,會直接回到頁面 1 前的頁。

          SPA

          隨著對移動端體驗需求的提高以及技術的進步,另一種模式 SPA(Single-page Application)逐漸成為主流。

          SPA 簡單來說,就是原來在 MPA 中的多個 html,現在被放在了一個 html 中,并被分成若干個片段。跳轉、返回的本質變成了分段的「隱藏」與「顯示」。跳轉不需要反復對服務端進行請求,從而使得頁面與頁面之間切換更加快速流暢。

          在這樣的機制下,跳轉與返回完全由代碼控制,所以可以通過代碼定義頁面轉場的效果、返回。

          在設計轉場動畫時,我們需要留意的是導航欄是 Native 的還是 HTML5 的。如果導航欄是 Native 的,那 HTML5 頁面不包括導航欄,它相當于是網頁外的元素,不在轉場效果的設計范圍內。

          WebView

          說 HTML5 的跳轉,就不得不說 WebView。簡單來說,WebView 是在 App 中用于顯示 web 內容的容器。上文提到的 MPA 和 SPA,都裝在了這個叫做 WebView 的容器中。

          用戶點擊頁面中的元素進行跳轉,除了前面的兩種方式外,還有第三種:新打開 WebView 的方式。在這樣的方式下,跳轉的本質是 HTML5「告訴」Native,由 Native 執行打開新 WebView,并在新 WebView 中加載頁面。

          因為 Native 的機制,打開新 WebView 的同時,之前的 WebView 會被自然、完整地保留。所以這時,之前的幾個問題就變為:

          • 跳轉動畫:頁面間的跳轉動畫由 WebView 之間的跳轉動畫來決定。
          • 返回后頁面停留在原位置:完美支持。
          • iOS 右滑返回:完美支持。

          不過需要注意的地方是,打開新 WebView 是一個資源消耗比較大的操作。如果我們在設計一個流程時,需要比較多的連續使用這種方式,需要和研發同學進行充分的溝通。

          比較特殊的Replace

          前述的三種跳轉,都會產生歷史記錄。MPA、SPA 的歷史記錄是在 HTML5 中產生,新開 WebView 中的記錄是在 Native 中產生。

          在 MPA 或 SPA 中,如果跳轉時使用 Replace 方法,它會用新頁面替換之前的頁面,歷史記錄中沒有之前頁面的記錄。

          這是一種特殊的跳轉方式,在設計一些不可逆的流程時可考慮使用。

          多頁面回退

          了解了上述的幾種機制后,我們來看一個小的應用場景──多頁面回退。

          我們在實際業務中,經常會有這樣的需求。假設我們有 1、2、3 三個頁組成的一個流程,在頁面 3 上有個「完成」按鈕點擊回到頁面 1。在不同的交互模式下,實現這樣的跳轉有著不同的機制。

          1. SPA模式下的正常跳轉

          這種模式是 3 個頁面都在一個 WebView 中。點擊頁面 3 中的「完成」按鈕,回退 -2 ,即回退 2 步歷史記錄,到頁面 1。

          2. 新打開WebView

          打開新 WebView 又分三種方式。

          如果我們把 3 個頁面,拆分到 2 個 WebView 中,如下圖,點擊完成按鈕,即關閉自身所在的 WebView。

          同樣是打開新的 WebView,如果我們按如下圖的方法拆分會稍微復雜。這時點擊完成按鈕,首先關閉自身所在的 WebView,當頁面 2「意識」到自己重新被展現時,自動退回 1 步到頁面 1。

          每次打開新的 WebView,這時點擊完成,回退的本質是 HTML5「告訴」Native 關閉多個 WebView。需要特別注意的是,HTML5 中實現這種方式不是天然具備的,它需要 Native 具有一次關閉多個 WebView 的能力。所以我們在設計方案時,需要了解清楚自家的 Native 是否有這樣的能力。

          總結

          以上,簡單說了幾種 HTML5 的跳轉方式。這些跳轉方式,沒有絕對的對與錯,我們在設計方案時,需要根據實際的業務需求與技術的限制,來整體考慮解決方案。

          根據個人經驗,也有幾點小帖士分享給大家:

          • 前后邏輯交織不復雜的單個頁面,可以考慮使用新 WebView 打開跳轉。
          • 如果是一個任務型的流程,可以考慮將一個任務流包在一個 WebView 中,在任務內使用 SPA 跳轉。不同的任務使用不同的 WebView。保持任務之間的關系清晰明了。
          • 設計上需要著重表現頁面間轉場動畫的效果,優先考慮使用 SPA 跳轉。
          • 為防止流程過于復雜,盡量不要自定義關閉、返回的行為。保持關閉為默認的關閉行為,保持返回為默認的返回行為。

          高興鐵鐵們能來看html網頁設計第二期~~~~撒花~~~~~

          哎呀呀~實在是抱歉備注標簽我記錯了QAQ

          <!--內容打這里-->這個才是備注標簽不是//

          首先我們先來學習上節課留下的劇透,分別是:

          1.標題標簽h1~h6

          有人就說了標題標簽上次劇透不就只有h1標簽嗎?

          嘿嘿,其實他還有兄弟姐妹啦~

          看圖,代碼是從上往下從左往右執行的請記住這個順序哦~

          還有,左邊是代碼右邊是網頁上面的效果哦~


          源代碼:

          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="UTF-8">

          <title>頁面標題</title>

          </head>

          <body>

          <!--標題標簽是h1~h6-->

          <h1>1</h1><!--最大-->

          <h2>2</h2>

          <h3>3</h3>

          <h4>4</h4>

          <h5>5</h5>

          <h6>6</h6><!--最小-->

          </body>

          </html>

          如圖所示,h1標簽是最大的,h6標簽是最小的

          是不是很簡單呀,現在已經學會了一個知識點了哦~


          2.段落標簽 p標簽

          源代碼:

          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="utf-8">

          <title></title>

          </head>

          <body>

          <!--千萬要記住內容是寫在標簽里面的哦~-->

          <!--段落標簽是獨占一條的哦-->

          <p>第一條p標簽</p>

          <p>第二條p標簽</p>

          <p>第三條p標簽</p>

          </body>

          </html>

          3.鏈接標簽 a標簽

          鏈接標簽是什么?顧名思義就是一個鏈接看代碼:

          <a href="https://www.baidu.com">百度</a>

          href是什么東西啊?是a標簽的屬性啦~里面用來輸入你需要跳轉到的網頁的鏈接

          屬性里面的東西是不會出現在網頁上面的出現的只有在a標簽里面的內容哦

          當我點擊百度這兩個字后就給我跳轉到了我們href屬性里面的https://www.baidu.com

          當然我們也可以跳轉到我們自己制作的網頁上面但要求是同一個項目下面的網頁

          是不是很有趣~

          看視頻:

          <script src="https://lf3-cdn-tos.bytescm.com/obj/cdn-static-resource/tt_player/tt.player.js?v=20160723"></script>

          視頻中我們點擊鏈接后就跳轉到了山這個網頁出現了一張山的圖片,是不是有點小意思~


          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="utf-8">

          <title></title>

          </head>

          <body>

          <a href="new_file3.html">跳轉到山的網頁</a><!--只有同一個項目下面的網頁才能相互跳轉-->

          </body>

          </html>


          4.圖像標簽 img標簽

          圖像標簽標簽如其意,就是用來上傳圖像的一個標簽~~

          我們這里介紹一下img的兩個屬性:

          <img src="img/OIP-C.jpg" alt="山"/>

          src就是用來放圖片的地址的,他會根據地址去找圖片然后把圖片放到網頁上面。

          alt有什么用啊就是當圖片顯示失敗的時候就會顯示alt里面的文字

          看視頻:

          <script src="https://lf3-cdn-tos.bytescm.com/obj/cdn-static-resource/tt_player/tt.player.js?v=20160723"></script>

          我們把圖片的地址破壞后,就會顯示一個圖片錯誤的圖標和alt里面的內容

          怎么拖圖片到img文件下,老師~~~我不知道

          看視頻

          <script src="https://lf3-cdn-tos.bytescm.com/obj/cdn-static-resource/tt_player/tt.player.js?v=20160723"></script>

          嘿嘿就直接把文件拖進來就ok了是不是很簡單~

          okk,好快啊怎么一下就學完了今天的知識點~~~

          嘻嘻今天可是有作業的~

          請根據下面的網頁仿寫一下:

          完成后作業發再評論區哦,有什么不懂的可以留言包回答的。

          加油呀,每天學一點爭取做出屬于自己的一個網頁~

          上一期


          主站蜘蛛池模板: 精品一区二区三区免费毛片爱 | 国产一区二区三区韩国女主播| 国产在线精品一区二区夜色| 在线精品动漫一区二区无广告| 久久久久人妻一区二区三区| 一区二区三区观看| 亚洲无线码在线一区观看| 国产在线视频一区二区三区| 免费无码一区二区三区蜜桃| 福利一区二区三区视频午夜观看| 国产精品视频一区二区噜噜| 一区二区手机视频| 午夜性色一区二区三区不卡视频 | 蜜桃视频一区二区| 精品日韩亚洲AV无码一区二区三区| 国产suv精品一区二区6| 国产Av一区二区精品久久| 91久久精品无码一区二区毛片| 91久久精一区二区三区大全| 国产三级一区二区三区| 免费高清av一区二区三区| 在线精品视频一区二区| 亚洲熟女www一区二区三区| 无码一区二区三区在线观看| 无码国产伦一区二区三区视频| 国产一区二区精品久久岳| 亲子乱AV视频一区二区| 亚洲高清成人一区二区三区| 波多野结衣在线观看一区| 亚洲AV成人一区二区三区AV| 国产成人综合精品一区| 亚洲一区二区三区在线播放| www.亚洲一区| 日韩精品一区二区三区四区| 色欲综合一区二区三区| 秋霞日韩一区二区三区在线观看 | 国产精品免费一区二区三区| 夜色福利一区二区三区| 无码国产精品一区二区免费| 国产成人一区二区三区高清| 国产在线精品一区二区三区直播 |