成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

H5之title吸頂功能

darkerXi / 835人閱讀

摘要:吸頂功能吸頂是一種比較常見的交互效果,當(dāng)頁(yè)面滑出屏幕邊界,標(biāo)題會(huì)自動(dòng)吸附在屏幕邊緣,用于提示用戶。代表在有滾動(dòng)條時(shí),滾動(dòng)條向下滾動(dòng)的距離也就是元素頂部被遮住部分的高度。在沒(méi)有滾動(dòng)條時(shí)恒成立。單位,可讀可設(shè)置。

吸頂功能

吸頂是一種比較常見的交互效果,當(dāng)頁(yè)面滑出屏幕邊界,標(biāo)題會(huì)自動(dòng)吸附在屏幕邊緣,用于提示用戶。

基本原理

在H5中實(shí)現(xiàn)的基本原理就是判斷當(dāng)前頁(yè)面滑動(dòng)的距離scrollTop和標(biāo)題距離頁(yè)面頂部距離offsetTop的關(guān)系,進(jìn)而設(shè)置標(biāo)題的position = fixed。這里需要明白scrollTop和offsetTop屬性的含義。

scrollTop

代表在有滾動(dòng)條時(shí),滾動(dòng)條向下滾動(dòng)的距離也就是元素頂部被遮住部分的高度。在沒(méi)有滾動(dòng)條時(shí)scrollTop==0恒成立。單位px,可讀可設(shè)置。

offsetTop

當(dāng)前元素頂部距離最近父元素頂部的距離,和有沒(méi)有滾動(dòng)條沒(méi)有關(guān)系。單位px,只讀元素。

所以,當(dāng)scrollTop>offsetTop時(shí),title的position = fixed,top = 0,使之固定在屏幕上方;當(dāng)scrollTop < offsetTop,取消position = fixed,代碼如下:

          if (fixedDom[0].offsetTop - elementScrollTop < 0){
            fixedDom.addClass("road-tab-fixed")
          }else {
            fixedDom.removeClass("road-tab-fixed")
          }

效果如下:

優(yōu)化

有圖看出基本功能實(shí)現(xiàn)的差不多了,但是感覺哪里怪怪的。當(dāng)頁(yè)面向上滑時(shí)效果還是比較自然的,但是當(dāng)頁(yè)面下滑時(shí),只有當(dāng)頁(yè)面完全滑到頂部時(shí),標(biāo)題才會(huì)回到原位,導(dǎo)致過(guò)度不自然,所以對(duì)于titile的position的設(shè)定要分兩種情況:上滑和下滑。

判斷上下滑動(dòng)方向

判斷上下滑動(dòng)點(diǎn)擊此處

當(dāng)頁(yè)面上滑時(shí)

當(dāng)scrollTop>offsetTop時(shí),title的position = fixed,top = 0,使之固定在屏幕上方;

當(dāng)頁(yè)面下滑時(shí)

當(dāng)scrollTop代碼如下:

         if(beforeElementScrollTop - elementScrollTop <=0){//up
            console.log("up");
            if (beforeOffsetTop - elementScrollTop < 0){
              fixedDom.addClass("road-tab-fixed")
            }
          }else{
            console.log("down");
            // console.log("beforeOffsetTop-----------",beforeOffsetTop);
            // console.log("elementScrollTop--------------",elementScrollTop);
            if (beforeOffsetTop - elementScrollTop >= 0){
              fixedDom.removeClass("road-tab-fixed")
            }
          }

效果如下:

優(yōu)化之scroll節(jié)流

當(dāng)對(duì)頁(yè)面監(jiān)聽了scroll事件后,滑動(dòng)時(shí)scroll的回調(diào)會(huì)一直在執(zhí)行,影響到頁(yè)面性能,而節(jié)流只允許一個(gè)函數(shù)在 X 毫秒內(nèi)執(zhí)行一次,只有當(dāng)上一次函數(shù)執(zhí)行后過(guò)了你規(guī)定的時(shí)間間隔,才能進(jìn)行下一次該函數(shù)的調(diào)用。代碼如下

const fixedDom = $("#road-tab"),
          isIos = utils.getMobileType(),
          tabclass = "road-tab-fixed";
        let beforeElementScrollTop = 0;
        let beforeOffsetTop = fixedDom[0].offsetTop;
        //scroll節(jié)流
        const throttle = (func,wait,mustRun) => {
          var timeout,
            startTime = new Date();

          return function() {
            var context = this,
              args = arguments,
              curTime = new Date()
            clearTimeout(timeout)
            // 如果達(dá)到了規(guī)定的觸發(fā)時(shí)間間隔,觸發(fā) handler
            if(curTime - startTime >= mustRun){
              beforeElementScrollTop = document.body.scrollTop;
              console.log("beforelementScrollTop----------",document.body.scrollTop);
              func.apply(context,args);
              startTime = curTime
              // 沒(méi)達(dá)到觸發(fā)間隔,重新設(shè)定定時(shí)器
            }else{
              timeout = setTimeout(func, wait)
            }
          }
        }
        const winScroll = (e) => {
          const elementScrollTop=document.body.scrollTop;
          console.log("elementScrollTop--------------",elementScrollTop);
          if(beforeElementScrollTop - elementScrollTop <=0){//up
            console.log("up");
            if (beforeOffsetTop - elementScrollTop < 0){
              fixedDom.addClass("road-tab-fixed")
            }
          }else{
            if (beforeOffsetTop - elementScrollTop >= 0){console.log("UUUUUU");
              fixedDom.removeClass("road-tab-fixed")
            }
          }
        };
        $(window).off("scroll").on("scroll", throttle(winScroll,10,100));

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/107901.html

相關(guān)文章

  • 通訊錄式的吸頂效果

    摘要:在有滾動(dòng)條時(shí)討論才有意義,在沒(méi)有滾動(dòng)條時(shí)恒成立。單位,只讀元素代表在有滾動(dòng)條時(shí),滾動(dòng)條向下滾動(dòng)的距離也就是元素頂部被遮住部分的高度。當(dāng)前元素頂部距離最近父元素頂部的距離和有沒(méi)有滾動(dòng)條沒(méi)有關(guān)系。 通訊錄式的吸頂效果,當(dāng)前bar固定在頂部 showImg(https://segmentfault.com/img/bVbnGoq?w=392&h=696); 方法一: js 監(jiān)聽 onscro...

    Forelax 評(píng)論0 收藏0
  • 通訊錄式的吸頂效果

    摘要:在有滾動(dòng)條時(shí)討論才有意義,在沒(méi)有滾動(dòng)條時(shí)恒成立。單位,只讀元素代表在有滾動(dòng)條時(shí),滾動(dòng)條向下滾動(dòng)的距離也就是元素頂部被遮住部分的高度。當(dāng)前元素頂部距離最近父元素頂部的距離和有沒(méi)有滾動(dòng)條沒(méi)有關(guān)系。 通訊錄式的吸頂效果,當(dāng)前bar固定在頂部 showImg(https://segmentfault.com/img/bVbnGoq?w=392&h=696); 方法一: js 監(jiān)聽 onscro...

    AndroidTraveler 評(píng)論0 收藏0
  • 【前端詞典】5 種滾動(dòng)吸頂實(shí)現(xiàn)方式的比較[性能升級(jí)版]

    摘要:用于獲得當(dāng)前元素到定位父級(jí)頂部的距離偏移值。后來(lái)在項(xiàng)目中總會(huì)遇到滾動(dòng)吸頂?shù)男Ч枰獙?shí)現(xiàn),現(xiàn)在我將我知道的種滾動(dòng)吸頂實(shí)現(xiàn)方式做詳細(xì)介紹。有兼容性問(wèn)題,在微信瀏覽器某些版本中的值會(huì)為,于是乎也就有了第三種方案的兼容性寫法。修改版預(yù)覽 這篇文章是三天前寫就的,有大佬給我提了一些修改意見,我覺得這個(gè)意見確實(shí)中肯。所以就有了這個(gè)升級(jí)的修改版本。代碼同步更新到 GitHub 了。 修改內(nèi)容如下: 添加...

    happyfish 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<