今天和大家分享下better-scroll這款移動端用來解決各種滾動需求的插件(目前已經支持PC) 關於其中的API大家可以去官網看下 這裡就給大家介紹幾種常用的以及需要註意的點是什麼 首先說一下better-scroll的使用註意問題吧 1、移動端 我們通常採用三段式進行佈局的 例如 <div c ...
今天和大家分享下better-scroll這款移動端用來解決各種滾動需求的插件(目前已經支持PC)
關於其中的API大家可以去官網看下 這裡就給大家介紹幾種常用的以及需要註意的點是什麼
首先說一下better-scroll的使用註意問題吧
1、移動端 我們通常採用三段式進行佈局的 例如 <div class="container"> <header></header><main></main><fotter></fotter> </div> 假如我們利用彈性盒佈局的話 給container 開盒子後我們一般給頭部和尾部固定的高度 給main這個中間盒子一個flex:1;和overflow:auto ,讓其達到可以自由滾動效果 但是如果我們給main這層中間盒子載入了better-scroll這款插件後 我們需要把auto改成hidden 畢竟給上固定高度百分百(當然這裡可以省略)
可是有的人就會發現有時滾動效果沒有作用對吧 嘿、此時第一個註意問題就來了 載入better-scroll的元素只能有一個直屬子元素 也就是 <main><div class="content">剩餘佈局盒子寫在這裡</div></main>這種形式 並且content這層盒子不能給固定高度 當content的高度大於外層main這個盒子後better-scroll就會生效
2、然後第二點就是今天的重頭戲 吸頂效果了
相信用過這款插件的就會知道我們的滾輪在這裡是沒有作用的 這也意味著onscroll事件不能使用了 那吸頂效果該如何去做才好呢 在better-scroll中給我們提供了這樣一個方法 bs.on("scroll",function(e){}) 此時的e能夠列印出一個關於滾動產生的x y 對象 註意這個方法要想生效我們需要在 這個bs對象中添加probeType這個屬性 寫法如下
let bs=new BScroll("main",{ probeType:2 }) 然後到了這裡就有人會說那我們既然能夠得到y值那豈不是可以 利用以前的方法 我們給需要吸頂的元素添加一個關於固定定位的class類名就可以對吧 然後此時又引出了better-scroll的另一個巨坑了 fixed定位的元素,如果父級有transform樣式,值不為none,那麼fixed定位就會失效,scale(),rotate()都會使fixed定位失效。 所以說我們在使用better-scroll事件的盒子里會造成我們的絕對定位失效 從而導致我們的吸頂效果失敗 於是本人想出另外一個比較low的方法可以模擬吸頂效果 我們同樣可以在scroll這個方法中克隆一下這個需要吸頂的盒子然後 在通過e.y值在達到我們想要的高度時動態添加給除了main任何一個地方 註意這裡一定不要加給main 然後在通過絕對定位定在想要位置 不想要的位置再刪除 這裡刪除的時候需要判斷是否添加上 添加的時候註意不要多次添加!!! 3、點擊事件失效問題 在引用了這個插件後這個盒子內部的元素會出現點擊事件失效問題 此時我們需要在bs那個對象中放上這個屬性 click:true 4、 返回頂部操作問題 前面說過引入了這個插件後onscroll事件就不會被觸發了 那麼代表scrollTop也就沒有作用了 那麼返回頂部操作我們應該怎麼辦呢 此時better-scroll事件裡面有一個方法 bs.scrollTop(0,0,1000) 這個方法可以讓我們返回頂部 0,0是返回0,0點位置 第三個參數是返回所用的時間長短 5、上拉載入效果 和 下拉刷新 這裡給大家簡單介紹幾個API的使用1 let bs = new BScroll("main", { 2 pullUpLoad: true,//上拉 3 pullDownRefresh: true,//下拉 4 //也可以寫成對象模式 5 //註意上拉不支持 6 // pullDownRefresh:{ 7 // //下拉到一百的位置才會觸發 8 // threshold:100, 9 // //然後鬆手後返回50的位置 10 // stop:50, 11 // } 12 }) 13 14 bs.on("pullingDown", function () { 15 //"pullingUp 上拉" 16 console.log("下拉刷新"); 17 //這個事件開始告訴瀏覽器開始下拉刷新了 18 //然後進行一些數據的請求 19 20 //當數據請求過來後 21 //告訴瀏覽器下拉結束 22 bs.finishPullUp();//上拉結束 23 bs.finishPullDown(); 24 //DOM結構發生改變後可以刷新下 25 bs.refresh() 26 })
如果本文對你有所幫助的話 請動動您漂亮的手指點個贊嘍~~~