1. gzyueqian
      13352868059

      arm嵌入式培訓(xùn)學(xué)校怎么樣?零基礎(chǔ)學(xué)習(xí)嵌入式開發(fā)需要具備什么?

      更新時間: 2018-10-03 12:00:00來源: 嵌入式開發(fā)瀏覽量:3424

          因為在項目中遇到錨點定位的問題,覺得有必要單獨成文,來介紹錨點定位的解決辦法。
          一 學(xué)習(xí)錨點定位之前的知識儲備:
          1.1 #號的作用
          #代表網(wǎng)頁中的一個位置。其右面的字符,就是該位置的標(biāo)識符。
          就代表網(wǎng)頁index.html的print位置。瀏覽器讀取這個URL后,會自動將print位置滾動至可視區(qū)域。

          為網(wǎng)頁位置指定標(biāo)識符,有兩個方法:


      一是使用錨點,比如<a name="print"></a>,
      二是使用id屬性,比如<div id="print">。


          HTTP請求不包括#.


      2.2 a元素與URL對象
      URL對象是瀏覽器的原生對象,可以用來構(gòu)造、解析和編碼 URL。一般情況下,通過window.URL可以拿到這個對象。
      <a>元素和<area>元素都部署了這個接口。這就是說,
      它們的 DOM 節(jié)點對象可以使用 URL 的實例屬性和方法。

          例如:我們利用a標(biāo)簽來獲取一些東西

      // <a href="#box1">我跳到box1</a>
      // 上面時html代碼
      var a = document.querySelector('a');
      
       console.log(a.href); //返回整個 URL
       console.log(a.hash); //返回片段識別符,以井號#開頭
       console.log(a.hostname); //返回域名
       console.log(a.search); //返回查詢字符串,以問號?開頭


          二 錨點定位的介紹:

          錨點其實就是可以讓頁面定位到某個位置上的點。在高度較高的頁面中經(jīng)常見到。


       // 錨點跳轉(zhuǎn)有兩種形式:
       
         *1. a標(biāo)簽 + name / href 屬性
         *2. 使用標(biāo)簽的id屬性

          2.1 種錨點定位的方法:

      <a href="#box1">我跳到box1</a>
       <a href="#" name="#box2">我跳到box2</a>
      
       <div id="box1"></div>
       <div id="box2"></div>

          下面是在頁面的效果表現(xiàn):


          上面這一種的缺點是,url會發(fā)生改變,會在url面加上片段識別符#box2,這樣就改變了URL的路徑,這是我們不想看到的.因為再次刷新的時候回出現(xiàn)問題.
          2.2 第二種錨點定位的方法:
          只需加上下面的JS代碼就可以了.

          jQuery的書寫方法


      <script>
       $('a').on('click',function(e){
      
       //阻止a標(biāo)簽的默認(rèn)行為跳轉(zhuǎn),這樣就不會把#判斷符帶入到url中
       e = e || window.event;
       e.preventDefault();
      
       // 獲取id號,得到是#box1
       var target = $(this).prop('hash');
      
       //將頁面滾動到對應(yīng)的位置
       $('html,body').scrollTop($(target).offset().top);
       });
      </script>

          原生的寫法:


      <script>
       var aList = document.querySelectorAll('a');
       //給每一個a標(biāo)簽注冊點擊事件
       for( var i=0;i < aList.length;i++){
       aList[i].addEventListener('click', function(e){
      
       //阻止a標(biāo)簽的默認(rèn)行為
       e = e || window.event;
       e.preventDefault();
      
       //獲取整個href路徑
       //var target = this.href;
       //獲取#片段識別符
       var target = this.hash;
      
       //獲取box參照于body定位的top值
       var offsetTop = document.querySelector(target).offsetTop;
       //將頁面跳轉(zhuǎn)到對應(yīng)的位置
       document.documentElement.scrollTop = offsetTop; 
       });
       }
      </script>

          注意點:


      **1. 這種方法url不會發(fā)生改變,因為我們阻止了a標(biāo)簽的默認(rèn)行為.所以a標(biāo)簽不會跳轉(zhuǎn).
      **2. document.querySelector(target).offsetTop;
      $(target).offset().top 都是去求出盒子參照body定位對應(yīng)的top值,這是因為offet家族的定義是:
      如果元素自身是非固定定位,并且所有的父元素都沒有定位,那么他的定位父級是body .
      **3. 上面代碼的target得到格式都是#box1,此時在原生中利用屬性選擇器來獲取元素要很多.
      
      document.querySelector(target) 等價于
      document.querySelector('#box1')
      

          2.3 第三種錨點定位的方法:
          用js的srollIntoView方法
          這是一個實驗中的功能
          此功能某些瀏覽器尚在開發(fā)中,請參考瀏覽器兼容性表格以得到在不同瀏覽器中適合
          使用的前綴。由于該功能對應(yīng)的標(biāo)準(zhǔn)文檔可能被重新修訂,所以在未來版本的瀏覽器

          中該功能的語法和行為可能隨之改變。


      //使用此功能得到上面的效果
         var element = document.getElementById('box1'); 
       element.scrollIntoView();

          這里做了一個點擊導(dǎo)航欄里的文字頁面滾動到指定的位置,同時頁面滾動到指定位置,對應(yīng)的導(dǎo)航欄部分高亮.
          模擬里錨點定位的問題:

          關(guān)于需求: 我點擊導(dǎo)航欄里面的li標(biāo)簽,頁面跳轉(zhuǎn)到對應(yīng)的位置;當(dāng)頁面滑動的時候,對應(yīng)的導(dǎo)航欄li標(biāo)簽高亮.


      function scrollHighLight () {
      
      
       // 點擊對應(yīng)的nav里的li標(biāo)簽,頁面就滾動到哪里
       $('.navbar-nav > li').click(function(event) {
      
      
       //li標(biāo)簽里面有a標(biāo)簽,可以阻止到a標(biāo)簽的默認(rèn)行為
       event.preventDefault();
       //這里找到的是target #后面的內(nèi)容
       var target = $(this).find('a').prop('hash');
       //將頁面動畫滾動到指定位置
       $('html, body').animate({
       scrollTop: $(target).offset().top
       }, 500);
       });
      
      
      //頁面滾動到哪,對應(yīng)的nav里的li就高亮
        $(window).on('scroll',function(){
      
      
        //獲取頁面滾動高度
        var pageScrollTop = $('html,body').scrollTop();
        
        //獲取遍歷a標(biāo)簽找到hash值
        $('.navbar-right > li > a').each(function(index,ele){
      
      
        // 頁面一個a不是高亮的內(nèi)容,所以直接跳出函數(shù)
        if(index == $('.navbar-right > li > a').length - 1) {
        return;
        }
        // 獲取hash值
        var target = $(this).prop('hash');
        // 判斷section距離頁面的高度與頁面滾動高度比較
       if($(target).offset().top - pageScrollTop  < 0) {
       // 給對應(yīng)的li高亮操作
       $(this).parent('li').siblings().removeClass('active');
       $(this).parent('li').addClass('active');
       };
        });
       });
      }


          想要了解更多的java應(yīng)用技術(shù)那就加入我們吧!

      免費預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲中文字幕在线资源站 | 在线观看A∨网站 | 日本喷奶水视频中文字幕97 | 亚洲精品无播放器在线观看 | 在线日本二v不卡 | 三级日本理论在线 |