国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題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關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

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

來源:懂視網 責編:小采 時間:2020-11-27 22:27:43
文檔

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

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

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

position:sticky的兼容性以及作用

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

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

sticky組件實現

template部分

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

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

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層的背景色設置和sticky一致,這樣過渡不會太生硬,高度和top都根據用戶對外層sticky的自定義來實現,這樣這部分簡單用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事件的監聽,監聽top值的改變來實現sticky-warp層的fixed和absolute的轉換。大概原理的思路及實現過程就是上面這樣,對于自定義的滾動的github地址:https://github.com/yejiaming/scroll,sticky組件以及原生滾動下的指令參考的實現的github地址如下:https://github.com/yejiaming/sticky

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

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

JS解決position:sticky的兼容性問題的方法:在項目中有用到sticky的布局,可是由于兼容性問題,在安卓端沒有很好的兼容,所以為了徹底解決這個問題只能寫一個組件來解決這個麻煩的問題,這里為什么是組件而不是指令是因為,是有原因的,下面會講到。 position:sticky的兼容性以及作用 Caniuse
推薦度:
標簽: 方法 瀏覽器 解決
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 亚洲欧美日韩在线观看播放 | 日韩欧美系列 | 国产精品美女一区二区三区 | 国产网站视频 | 丝袜视频一区 | 欧美日韩 国产区 在线观看 | 国产一级久久久久久毛片 | 国产成人麻豆精品 | 亚洲午夜久久久精品影院 | 亚洲一区中文字幕在线 | 免费国产va在线观看视频 | 国产传媒一区二区三区四区五区 | 国产高清视频免费在线观看 | 亚洲高清毛片 | 国产全部视频 | 99久久精品免费国产一区二区三区 | 国产成人精品一区二三区在线观看 | 国内精品一区二区三区αv 国产最新进精品视频 | 日韩欧美在线视频 | 欧美日韩亚洲一区二区三区 | 成人美女黄网站色大色费 | 国产精品第二页 | 久久精品欧美日韩精品 | 成人免费一级片 | 四虎福利视频 | 欧美日韩国产精品综合 | 欧美精品亚洲精品日韩专区va | 91po国产在线精品免费观看 | 欧美高清a| 欧美日韩91 | 国产在线播放一区二区 | 欧美成人高清在线视频大全 | 九九精品免视看国产成人 | 日韩国产欧美一区二区三区在线 | 国产在线a| 欧美亚洲综合另类在线观看 | 福利一区二区 | 国产网站在线免费观看 | 视频一区久久 | 国产美女视频黄a视频免费全过程 | 欧美视频一区二区三区 |