<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專(zhuān)題視頻專(zhuān)題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專(zhuān)題1關(guān)鍵字專(zhuān)題50關(guān)鍵字專(zhuān)題500關(guān)鍵字專(zhuān)題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專(zhuān)題關(guān)鍵字專(zhuān)題tag2tag3文章專(zhuān)題文章專(zhuān)題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專(zhuān)題3
        問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
        當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

        JS解決position:sticky的兼容性問(wèn)題的方法

        來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:27:43
        文檔

        JS解決position:sticky的兼容性問(wèn)題的方法

        JS解決position:sticky的兼容性問(wèn)題的方法:在項(xiàng)目中有用到sticky的布局,可是由于兼容性問(wèn)題,在安卓端沒(méi)有很好的兼容,所以為了徹底解決這個(gè)問(wèn)題只能寫(xiě)一個(gè)組件來(lái)解決這個(gè)麻煩的問(wèn)題,這里為什么是組件而不是指令是因?yàn)?,是有原因的,下面?huì)講到。 position:sticky的兼容性以及作用 Caniuse
        推薦度:
        導(dǎo)讀JS解決position:sticky的兼容性問(wèn)題的方法:在項(xiàng)目中有用到sticky的布局,可是由于兼容性問(wèn)題,在安卓端沒(méi)有很好的兼容,所以為了徹底解決這個(gè)問(wèn)題只能寫(xiě)一個(gè)組件來(lái)解決這個(gè)麻煩的問(wèn)題,這里為什么是組件而不是指令是因?yàn)椋怯性虻?,下面?huì)講到。 position:sticky的兼容性以及作用 Caniuse

        在項(xiàng)目中有用到sticky的布局,可是由于兼容性問(wèn)題,在安卓端沒(méi)有很好的兼容,所以為了徹底解決這個(gè)問(wèn)題只能寫(xiě)一個(gè)組件來(lái)解決這個(gè)麻煩的問(wèn)題,這里為什么是組件而不是指令是因?yàn)?,是有原因的,下面?huì)講到。

        position:sticky的兼容性以及作用

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

        Sticky的作用相當(dāng)于relative和fixed的結(jié)合體,當(dāng)修飾的目標(biāo)節(jié)點(diǎn)再屏幕中時(shí)表現(xiàn)為relative,當(dāng)要超出的時(shí)候是fixed的形式展現(xiàn),因?yàn)檫@個(gè)特性,我們就可以來(lái)實(shí)現(xiàn)一個(gè)sticky的模擬效果。

        sticky組件實(shí)現(xiàn)

        template部分

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

        代碼解讀:這里我使用了組件來(lái)實(shí)現(xiàn),而不用指令來(lái)實(shí)現(xiàn)的原因是:指令雖然是無(wú)侵入性的,更方便使用,可是有一個(gè)弊端就是當(dāng)修飾的節(jié)點(diǎn)fixed的時(shí)候會(huì)脫離文檔流,會(huì)改變滾動(dòng)的條的高度,如果僅僅是配合原生滾動(dòng)條來(lái)實(shí)現(xiàn)是沒(méi)問(wèn)題的(當(dāng)然這也會(huì)存在滾動(dòng)過(guò)快的問(wèn)題),可是由于是配合自定義滾動(dòng)所以,采取這種折中的方式來(lái)實(shí)現(xiàn)。最外層是一個(gè)sticky層,判斷瀏覽器是否支持sticky,不支持就使用relative來(lái)代替,這樣也就不會(huì)改變?yōu)g覽器高度的情況了,然后動(dòng)態(tài)改變stick-warp層的postion來(lái)實(shí)現(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一致,這樣過(guò)渡不會(huì)太生硬,高度和top都根據(jù)用戶(hù)對(duì)外層sticky的自定義來(lái)實(shí)現(xiàn),這樣這部分簡(jiǎ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;
         }
         /*復(fù)位*/
         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來(lái)判斷一下瀏覽器的支持情況,然后通過(guò)多自定義滾動(dòng)y-scroll事件的監(jiān)聽(tīng),監(jiān)聽(tīng)top值的改變來(lái)實(shí)現(xiàn)sticky-warp層的fixed和absolute的轉(zhuǎn)換。大概原理的思路及實(shí)現(xiàn)過(guò)程就是上面這樣,對(duì)于自定義的滾動(dòng)的github地址:https://github.com/yejiaming/scroll,sticky組件以及原生滾動(dòng)下的指令參考的實(shí)現(xiàn)的github地址如下:https://github.com/yejiaming/sticky

        聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        JS解決position:sticky的兼容性問(wèn)題的方法

        JS解決position:sticky的兼容性問(wèn)題的方法:在項(xiàng)目中有用到sticky的布局,可是由于兼容性問(wèn)題,在安卓端沒(méi)有很好的兼容,所以為了徹底解決這個(gè)問(wèn)題只能寫(xiě)一個(gè)組件來(lái)解決這個(gè)麻煩的問(wèn)題,這里為什么是組件而不是指令是因?yàn)?,是有原因的,下面?huì)講到。 position:sticky的兼容性以及作用 Caniuse
        推薦度:
        標(biāo)簽: 方法 瀏覽器 解決
        • 熱門(mén)焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門(mén)推薦

        專(zhuān)題
        Top
        主站蜘蛛池模板: 国产成人无码区免费A∨视频网站| 久久精品成人免费网站| 青青青免费国产在线视频小草| 亚洲高清日韩精品第一区| 99re热精品视频国产免费| 亚洲妇女水蜜桃av网网站| 永久看日本大片免费35分钟| 亚洲精品午夜久久久伊人| 国产一卡二卡四卡免费| 丁香婷婷亚洲六月综合色| 好吊妞788免费视频播放| 苍井空亚洲精品AA片在线播放| 国产嫩草影院精品免费网址| 无码毛片一区二区三区视频免费播放 | 日产亚洲一区二区三区| 亚洲一区免费在线观看| 亚洲性色精品一区二区在线| 国产乱弄免费视频| 久久精品无码专区免费| 亚洲精品免费观看| 成人免费毛片内射美女APP| 男女猛烈xx00免费视频试看| 亚洲尤码不卡AV麻豆| 最近最新高清免费中文字幕| 亚洲中文字幕无码中文| 国产成人麻豆亚洲综合无码精品| 四虎成人精品永久免费AV | 精品特级一级毛片免费观看| 精品久久久久久亚洲| 99re热免费精品视频观看| 免费人成再在线观看网站 | 99视频在线精品免费| 亚洲日韩看片无码电影| 国产AV无码专区亚洲AV漫画| 四虎最新永久免费视频| 国产偷国产偷亚洲高清人| 亚洲高清资源在线观看| 日韩精品亚洲专区在线观看| 91香焦国产线观看看免费| 青青久久精品国产免费看| 亚洲经典在线中文字幕|