<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
        主站蜘蛛池模板: 久久电影网午夜鲁丝片免费| 中文字幕免费在线看线人| 国产极品美女高潮抽搐免费网站| 亚洲av日韩av综合| av无码久久久久不卡免费网站| 亚洲成无码人在线观看| 国产a视频精品免费观看| 亚洲丰满熟女一区二区v| 免费无码AV电影在线观看| 亚洲乱理伦片在线观看中字| 日韩成全视频观看免费观看高清| 亚洲色大成网站www尤物| 永久免费观看的毛片的网站| 美女被免费网站在线视频免费| 亚洲日本va午夜中文字幕久久| 2022国内精品免费福利视频| 在线a亚洲老鸭窝天堂av高清| 日韩精品无码区免费专区 | 亚洲一区二区三区不卡在线播放 | 处破痛哭A√18成年片免费| 亚洲国产成人精品无码区花野真一| 日本免费中文字幕在线看| 九九免费观看全部免费视频| 亚洲国产精品乱码一区二区| 牛牛在线精品免费视频观看| 中文字幕亚洲综合久久菠萝蜜 | 国产97视频人人做人人爱免费| 亚洲国产精品无码成人片久久| 亚洲一区免费视频| 日韩成人精品日本亚洲| 亚洲精品无码成人片久久| 免费电视剧在线观看| 国产无限免费观看黄网站| 亚洲自偷自拍另类12p| 国产无遮挡吃胸膜奶免费看| 中文字幕av免费专区| 成人亚洲网站www在线观看| 看Aⅴ免费毛片手机播放| 亚洲国产精品无码久久一线| 丁香花免费完整高清观看| sss在线观看免费高清|