在ionic中正確使用better-scroll的姿式!!!

1、文章解決問題:
css

一、執行better-scroll初始化方法時候,dom還未掛載,沒法滾動;</br>
二、進行下拉刷新或者上拉加載(滾動列表中元素增長或者減小)滾動出錯;</br>
三、沒法統一管理項目中的滾動操做;
複製代碼

2、很少嗶嗶,直接開搞:
html

一、建立DesScroll組件目錄和文件,分別是DesScroll.component.html、DesScroll.component.scss、DesScroll.component.ts、DesScroll.module.ts;</br>
二、核心代碼編寫:
    //引入ionic相關,這裏不作過多說明
    import { Component,Input} from '@angular/core';
    //滾動組件
    import BScroll from 'better-scroll';
    //滾動類
    export class DesScrollComponent{
        //滾動組件id,由於這個組件會在多個地方使用,BScroll依賴於dom,因此每次使用滾動組件,咱們都須要傳入一個惟一id
        @Input() scrollId;
        
        //用於存儲BScroll對象
        betterObject=null;
        //構造函數
        constructor(){
        }
        //生命週期函數,不作過多贅述
        ngAfterViewInit(){
           setTimeout(()=>{
                //初始化滾動
                this.initScroll(); 
    	   },50)       
        }
        
        //滾動初始化函數
        initScroll(){
            //根據傳入組件的id獲取滾動dom對象
            let wrapper:any = document.querySelector(`#${this.scrollId}`);
            //實例化滾動
            this.betterObject = new BScroll(wrapper,{
                click:true,
                probeType:1,
                pullDownRefresh:this.needReload=='not'?false:{
                    threshold:50,
                    stop:50
                },
                pullUpLoad:this.needAddData=='not'?false:{
                    threshold:0
                },
                bounceTime:300
            });
            //定義dom更新定時器,實現節流
            var betterTimer=null;
            //爲了實現dom動態更新,咱們藉助DOMSubtreeModified事件,在滾動組件內部元素髮生改變時候,刷新滾動實例
            document.getElementById(`${this.scrollId}`).addEventListener("DOMSubtreeModified",(evt)=>{
                betterTimer=setTimeout(()=>{
                    if(this.betterObject){
                        this.betterObject.refresh();
                    }
                })
            }, false);
            
            //爲了兼容ios平臺微信webview增長的底部導航,咱們在窗口尺寸改變時候,也須要刷新滾動
            var _that=this;
            window.onresize=function(){
                if(_that.betterObject){
                    _that.betterObject.refresh();
                }
            }  
        }
    }
三、使用方法,直接參考ionic組件的常規使用方法,或者能夠留下評論,咱們一塊兒討論;
四、接下來,咱們會在這個滾動組件的基礎上,實現下拉刷新、上拉加載,以及動畫,敬請期待;
複製代碼
相關文章
相關標籤/搜索