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

JS解決position:sticky的兼容性問題的方法

 更新時間:2017年10月17日 16:50:36   作者:夜里的太陽  
本篇文章主要介紹了JS解決position:sticky的兼容性問題的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

在項目中有用到sticky的布局,可是由于兼容性問題,在安卓端沒有很好的兼容,所以為了徹底解決這個問題只能寫一個組件來解決這個麻煩的問題,這里為什么是組件而不是指令是因為,是有原因的,下面會講到。

position:sticky的兼容性以及作用

Caniuse上顯示sticky的兼容性如下:

Sticky的作用相當于relative和fixed的結(jié)合體,當修飾的目標節(jié)點再屏幕中時表現(xiàn)為relative,當要超出的時候是fixed的形式展現(xiàn),因為這個特性,我們就可以來實現(xiàn)一個sticky的模擬效果。

sticky組件實現(xiàn)

template部分

<template>
  <div class="sticky" :style="getPosition">
    <div class="sticky-warp">
      <slot></slot>
    </div>
  </div>
</template>

代碼解讀:這里我使用了組件來實現(xiàn),而不用指令來實現(xiàn)的原因是:指令雖然是無侵入性的,更方便使用,可是有一個弊端就是當修飾的節(jié)點fixed的時候會脫離文檔流,會改變滾動的條的高度,如果僅僅是配合原生滾動條來實現(xiàn)是沒問題的(當然這也會存在滾動過快的問題),可是由于是配合自定義滾動所以,采取這種折中的方式來實現(xiàn)。最外層是一個sticky層,判斷瀏覽器是否支持sticky,不支持就使用relative來代替,這樣也就不會改變?yōu)g覽器高度的情況了,然后動態(tài)改變stick-warp層的postion來實現(xiàn)效果。

css部分

<style scoped lang="less" rel="stylesheet/less">
  .sticky {
    width: 100%;
    .sticky-warp {
      width: 100%;
      background: inherit;
      will-change: change;
      height: inherit;
      top: inherit;
    }
  }
</style>

代碼解讀:這里的warp層的背景色設(shè)置和sticky一致,這樣過渡不會太生硬,高度和top都根據(jù)用戶對外層sticky的自定義來實現(xiàn),這樣這部分簡單用css就可以完成了。

JS部分

<script type="text/babel">
  export default {
    data () {
      return {}
    },
    computed: {
      getPosition(){
        var position = this.cssSupport('position', 'sticky') ? 'sticky' : 'relative';
        return 'position:' + position;
      }
    },
    props: {},
    beforeMount () {
    },
    mounted(){
      this.init();
    },
    deactivated(){
      if(this.cssSupport('position', 'sticky')) {
        return;
      }
      /*復位*/
      var elWarp = this.$el.querySelector('.sticky-warp');
      elWarp.position = 'absolute';
    },
    methods: {
      init(){
        if (this.cssSupport('position', 'sticky')) {
          return;
        }
        var el = this.$el, target = this.$el.parentNode,
            elWarp = this.$el.querySelector('.sticky-warp'),
            top = this.getNumberValue(document.defaultView.getComputedStyle(el).top);
        this.addScrollListen(target, (event)=> {
          if (el.getBoundingClientRect().top <= top) {
            elWarp.style.position = 'fixed';
          }
          if (el.getBoundingClientRect().top >= 0 && elWarp.style.position != 'absolute') {
            elWarp.style.position = 'absolute';
          }
        })
      },
      cssSupport: function (attr, value) {
        var element = document.createElement('div');
        if (attr in element.style) {
          element.style[attr] = value;
          return element.style[attr] === value;
        } else {
          return false;
        }
      },
      getNumberValue(pxValue){
        var value = String(pxValue).match(/^\-?\+?[0-9]+/g);
        return value ? Number(value) : undefined;
      },
      addScrollListen(target, cb){
        target.addEventListener('y-scroll', (event)=> {
          cb && cb(event);
        });
      }
    },
  }

 
</script>

代碼解讀:這里面主要先用cssSupport來判斷一下瀏覽器的支持情況,然后通過多自定義滾動y-scroll事件的監(jiān)聽,監(jiān)聽top值的改變來實現(xiàn)sticky-warp層的fixed和absolute的轉(zhuǎn)換。大概原理的思路及實現(xiàn)過程就是上面這樣,對于自定義的滾動的github地址:https://github.com/yejiaming/scroll,sticky組件以及原生滾動下的指令參考的實現(xiàn)的github地址如下:https://github.com/yejiaming/sticky

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

相關(guān)文章

  • arctext.js實現(xiàn)文字平滑彎曲弧形效果的插件

    arctext.js實現(xiàn)文字平滑彎曲弧形效果的插件

    這篇文章主要介紹了arctext.js實現(xiàn)文字平滑彎曲弧形效果的插件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • 淺談一種讓小程序支持JSX語法的新思路

    淺談一種讓小程序支持JSX語法的新思路

    這篇文章主要介紹了淺談一種讓小程序支持JSX語法的新思路,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • 通過實例解析json與jsonp原理及使用方法

    通過實例解析json與jsonp原理及使用方法

    這篇文章主要介紹了通過實例解析json與jsonp原理及使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • 使用JavaScript實現(xiàn)輪播圖效果完整實例

    使用JavaScript實現(xiàn)輪播圖效果完整實例

    我們在各種網(wǎng)頁中經(jīng)常見到輪播圖的效果,下面這篇文章主要給大家介紹了關(guān)于使用JavaScript實現(xiàn)輪播圖效果的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • Bootstrap表單Form全面解析

    Bootstrap表單Form全面解析

    在進行自己的后臺改版時,大體布局都使用了bootstrap,剩下的表單部分沒理由不去使用它,對于表單的美化和布局,bootstrap做的也是很不錯的。下文給大家介紹Bootstrap表單Form全面解析,感興趣的朋友一起看下吧
    2016-06-06
  • js仿支付寶多方框輸入支付密碼效果

    js仿支付寶多方框輸入支付密碼效果

    這篇文章主要為大家詳細介紹了js仿支付寶多方框輸入支付密碼效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • jQuery多項選項卡的實現(xiàn)思路附樣式及代碼

    jQuery多項選項卡的實現(xiàn)思路附樣式及代碼

    這篇文章主要介紹了jQuery多項選項卡的實現(xiàn)思路,需要的朋友可以參考下
    2014-06-06
  • 詳解webpack+express多頁站點開發(fā)

    詳解webpack+express多頁站點開發(fā)

    這篇文章主要介紹了詳解webpack+express多頁站點開發(fā)
    2017-12-12
  • JavaScript中的函數(shù)模式詳解

    JavaScript中的函數(shù)模式詳解

    這篇文章主要介紹了JavaScript中的函數(shù)模式詳解,本文講解了創(chuàng)建函數(shù)的語法、函數(shù)表達式、命名函數(shù)表達式、函數(shù)的聲明、函數(shù)聲明與表達式、函數(shù)的提升、即時函數(shù)模式等內(nèi)容,需要的朋友可以參考下
    2015-02-02
  • Bootstrap實現(xiàn)提示框和彈出框效果

    Bootstrap實現(xiàn)提示框和彈出框效果

    這篇文章主要為大家詳細介紹了Bootstrap實現(xiàn)彈出框和提示框效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01

最新評論

景宁| 丰镇市| 灵宝市| 泰兴市| 平塘县| 江孜县| 碌曲县| 兴海县| 大悟县| 禹州市| 禹州市| 江川县| 同德县| 平遥县| 景泰县| 论坛| 仪陇县| 迁安市| 濉溪县| 武夷山市| 甘德县| 阜城县| 来安县| 蒙自县| 台中市| 贵德县| 和硕县| 名山县| 双桥区| 上犹县| 株洲市| 屯昌县| 林芝县| 通州市| 江山市| 广灵县| 独山县| 涿鹿县| 裕民县| 三门峡市| 农安县|