国产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
主站蜘蛛池模板: 亚洲人成网站999久久久综合 | 国产成人免费在线 | 黄色免费一级视频 | 亚洲色图国产精品 | 一区二区免费在线观看 | 色婷婷国产 | 欧美亚洲综合网 | 国产欧美综合在线观看第七页 | 久久综合爱 | 欧美综合另类 | 91区国产 | 国产精品视频免费一区二区三区 | 欧美精品午夜久久久伊人 | 伊人精品视频在线观看 | 国产日韩高清一区二区三区 | 国产一区二区三区免费 | 欧美日韩国产色 | 国产成人h福利小视频在线观看 | 毛片官网| 精品日韩欧美一区二区三区 | 中文字幕一区二区三区在线观看 | 国产在线视频在线 | 国产欧美在线观看视频 | 亚洲日韩在线视频 | 欧美日韩大尺码免费专区 | 九九九国产在线 | 麻豆porn| 欧美爱爱动态图 | 亚洲 欧美综合小说区图片区 | 国产综合亚洲欧美日韩一区二区 | 国产精品乱码一区二区三区 | 午夜视频免费观看 | 黄色在线观看视频网站 | 国产综合亚洲欧美日韩一区二区 | 一区二区视频在线 | 免费在线观看一区 | 久久精品99久久香蕉国产色戒 | 国产精品伦一区二区三级视频 | 日本我不卡 | 欧美 国产 日韩 第一页 | 精品一区二区三区在线成人 |