1、移动端 我们通常采用三段式进行布局的 例如 <div> <header></header><main></main><fotter></fotter> </div> 假如我们利用弹性盒布局的话 给container 开盒子后我们一般给头部和尾部固定的高度 给main这个中间盒子一个flex:1;和overflow:auto ,让其达到可以自由滚动效果 但是如果我们给main这层中间盒子加载了better-scroll这款插件后 我们需要把auto改成hidden 毕竟给上固定高度百分百(当然这里可以省略)
可是有的人就会发现有时滚动效果没有作用对吧 嘿、此时第一个注意问题就来了 加载better-scroll的元素只能有一个直属子元素 也就是 <main><div>剩余布局盒子写在这里</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的使用
let bs = new BScroll("main", {
pullUpLoad: true,//上拉
pullDownRefresh: true,//下拉
//也可以写成对象模式
//注意上拉不支持
// pullDownRefresh:{
// //下拉到一百的位置才会触发
// threshold:100,
// //然后松手后返回50的位置
// stop:50,
// }
})
bs.on("pullingDown", function () {
//"pullingUp 上拉"
console.log("下拉刷新");
//这个事件开始告诉浏览器开始下拉刷新了
//然后进行一些数据的请求
//当数据请求过来后
//告诉浏览器下拉结束
bs.finishPullUp();//上拉结束
bs.finishPullDown();
//DOM结构发生改变后可以刷新下
bs.refresh()
})