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組件的常規使用方法,或者能夠留下評論,咱們一塊兒討論;
四、接下來,咱們會在這個滾動組件的基礎上,實現下拉刷新、上拉加載,以及動畫,敬請期待;
複製代碼