选项 / 基础
better-scroll 支持很多参数配置,可以在初始化的时候传入第二个参数,比如:
let scroll = new BScroll('.wrapper',{
scrollY: true,
click: true
})
这样就实现了一个纵向可点击的滚动效果。better-scroll 支持的参数非常多,可以修改它们去实现更多的 feature。通常你可以不改这些参数(列出不建议修改的参数),better-scroll 已经为你实现了最佳效果,接下来我们来列举 better-scroll 支持的参数。
startX
- 类型:Number,
- 默认值:0
- 作用:横轴方向初始化位置。
startY
- 类型:Number,
- 默认值:0
- 作用:纵轴方向初始化位置,见 Demo 。
scrollX
- 类型:Boolean
- 默认值: false
- 作用:当设置为 true 的时候,可以开启横向滚动。
- 备注:当设置 eventPassthrough 为 'horizontal' 的时候,该配置无效。
scrollY
- 类型:Boolean
- 默认值:true
- 作用:当设置为 true 的时候,可以开启纵向滚动。
- 备注:当设置 eventPassthrough 为 'vertical' 的时候,该配置无效。
freeScroll
- 类型:Boolean
- 默认值:false
- 作用:有些场景我们需要支持横向和纵向同时滚动,而不仅限制在某个方向,这个时候我们只要设置
freeScroll
为 true 即可。 - 备注:当设置 eventPassthrough 不为空的时候,该配置无效。
directionLockThreshold
- 类型:Number
- 默认值:5(不建议修改)
- 作用:当我们需要锁定只滚动一个方向的时候,我们在初始滚动的时候根据横轴和纵轴滚动的绝对值做差,当差值大于
directionLockThreshold
的时候来决定滚动锁定的方向。 - 备注:当设置 eventPassthrough 的时候,
directionLockThreshold
设置无效,始终为 0。
eventPassthrough
- 类型: String
- 默认值:''
- 可选值:'vertical'、'horizontal'
- 作用:有时候我们使用 better-scroll 在某个方向模拟滚动的时候,希望在另一个方向保留原生的滚动(比如轮播图,我们希望横向模拟横向滚动,而纵向的滚动还是保留原生滚动,我们可以设置
eventPassthrough
为 vertical;相应的,如果我们希望保留横向的原生滚动,可以设置eventPassthrough
为 horizontal)。 - 备注:
eventPassthrough
的设置会导致其它一些选项配置无效,需要小心使用它。
click
- 类型:Boolean
- 默认值:false
- 作用:better-scroll 默认会阻止浏览器的原生 click 事件。当设置为 true,better-scroll 会派发一个 click 事件,我们会给派发的 event 参数加一个私有属性
_constructed
,值为 true。
dblclick(v1.12.0+)
- 类型:Boolean | Object
- 默认值:false
- 作用:派发双击点击事件。当配置成 true 的时候,默认 2 次点击的延时为 300 ms,如果配置成对象可以修改
delay
。dblclick: { delay: 300 }
tap
- 类型:Boolean | String
- 默认值:false
- 作用:因为 better-scroll 会阻止原生的 click 事件,我们可以设置 tap 为 true,它会在区域被点击的时候派发一个 tap 事件,你可以像监听原生事件那样去监听它,如
element.addEventListener('tap', doSomething, false);
。如果 tap 设置为字符串, 那么这个字符串就作为自定义事件名称。如tap: 'myCustomTapEvent'
。
bounce
- 类型:Boolean | Object
- 默认值:true
- 作用:当滚动超过边缘的时候会有一小段回弹动画。设置为 true 则开启动画。
自 1.10.0 版本以后,bounce: { top: true, bottom: true, left: true, right: true }
bounce
可以支持关闭某些边的回弹效果,可以设置对应边的key
为 false 即可。
bounceTime
- 类型:Number
- 默认值:800(单位ms,不建议修改)
- 作用:设置回弹动画的动画时长。
momentum
- 类型:Boolean
- 默认值:true
- 作用:当快速在屏幕上滑动一段距离的时候,会根据滑动的距离和时间计算出动量,并生成滚动动画。设置为 true 则开启动画。
momentumLimitTime
- 类型:Number
- 默认值:300(单位ms,不建议修改)
- 作用:只有在屏幕上快速滑动的时间小于
momentumLimitTime
,才能开启 momentum 动画。
momentumLimitDistance
- 类型:Number
- 默认值:15(单位px,不建议修改)
- 作用:只有在屏幕上快速滑动的距离大于
momentumLimitDistance
,才能开启 momentum 动画。
swipeTime
- 类型:Number
- 默认值:2500(单位ms,不建议修改)
- 作用:设置 momentum 动画的动画时长。
swipeBounceTime
- 类型:Number
- 默认值:500(单位ms,不建议修改)
- 作用:设置当运行 momentum 动画时,超过边缘后的回弹整个动画时间。
deceleration
- 类型:Number
- 默认值:0.0015(不建议修改)
- 作用:表示 momentum 动画的减速度。
flickLimitTime
- 类型:Number
- 默认值:200(单位ms,不建议修改)
- 作用:有的时候我们要捕获用户的轻拂动作(短时间滑动一个较短的距离)。只有用户在屏幕上滑动的时间小于
flickLimitTime
,才算一次轻拂。
flickLimitDistance
- 类型:Number
- 默认值:100(单位px,不建议修改)
- 作用:只有用户在屏幕上滑动的距离小于
flickLimitDistance
,才算一次轻拂。
resizePolling
- 类型:Number
- 默认值:60(单位ms,不建议修改)
- 作用:当窗口的尺寸改变的时候,需要对 better-scroll 做重新计算,为了优化性能,我们对重新计算做了延时。60ms 是一个比较合理的值。
probeType
- 类型:Number
- 默认值:0
- 可选值:1、2、3
- 作用:有时候我们需要知道滚动的位置。当 probeType 为 1 的时候,会非实时(屏幕滑动超过一定时间后)派发scroll 事件;当 probeType 为 2 的时候,会在屏幕滑动的过程中实时的派发 scroll 事件;当 probeType 为 3 的时候,不仅在屏幕滑动的过程中,而且在 momentum 滚动动画运行过程中实时派发 scroll 事件。如果没有设置该值,其默认值为 0,即不派发 scroll 事件。
preventDefault
- 类型:Boolean
- 默认值:true
- 作用:当事件派发后是否阻止浏览器默认行为。这个值应该设为 true,除非你真的知道你在做什么,通常你可能用到的是 preventDefaultException。
preventDefaultException
- 类型:Object
- 默认值:
{ tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT)$/}
- 作用:better-scroll 的实现会阻止原生的滚动,这样也同时阻止了一些原生组件的默认行为。这个时候我们不能对这些元素做 preventDefault,所以我们可以配置 preventDefaultException。默认值
{tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT)$/}
表示标签名为 input、textarea、button、select 这些元素的默认行为都不会被阻止。 - 备注:这是一个非常有用的配置,它的 key 是 DOM 元素的属性值,value 可以是一个正则表达式。比如我们想配一个 class 名称为 test 的元素,那么配置规则为
{className:/(^|\s)test(\s|$)/}
。
HWCompositing
- 类型:Boolean
- 默认值:true(不建议修改)
- 作用:是否开启硬件加速,开启它会在 scroller 上添加
translateZ(0)
来开启硬件加速从而提升动画性能,有很好的滚动效果。 - 备注:只有支持硬件加速的浏览器开启才有效果。
useTransition
- 类型:Boolean
- 默认值:true(不建议修改)
- 作用:是否使用 CSS3 transition 动画。如果设置为 false,则使用 requestAnimationFrame 做动画。
- 备注:只有支持 CSS3 的浏览器开启才有效果。
useTransform
- 类型:Boolean
- 默认值:true(不建议修改)
- 作用:是否使用 CSS3 transform 做位移。如果设置为 false, 则设置元素的
top/left
(这种情况需要 scroller 是绝对定位的)。 - 备注:只有支持 CSS3 的浏览器开启才有效果。
bindToWrapper
- 类型:Boolean
- 默认值:false
- 作用:move 事件通常会绑定到 document 上而不是滚动的容器上,当移动的过程中光标或手指离开滚动的容器滚动仍然会继续,这通常是期望的。当然你也可以把 move 事件绑定到滚动的容器上,
bindToWrapper
设置为 true 即可,这样一旦移动的过程中光标或手指离开滚动的容器,滚动会立刻停止。
disableMouse
- 类型:Boolean
- 默认值:根据当前浏览器环境计算而来(不建议修改)
- 作用:当在移动端环境(支持 touch 事件),disableMouse 会计算为 true,这样就不会监听鼠标相关的事件,而在 PC 环境,disableMouse 会计算为 false,就会监听鼠标相关事件,不建议修改该属性,除非你知道你在做什么。
disableTouch
- 类型:Boolean
- 默认值:根据当前浏览器环境计算而来(不建议修改)
- 作用:当在移动端环境(支持 touch 事件),disableTouch 会计算为 false,这样会监听 touch 相关的事件,而在 PC 环境,disableTouch 会计算为 true,就不会监听 touch 相关事件。不建议修改该属性,除非你知道你在做什么。
observeDOM(v1.5.3+)
- 类型:Boolean
- 默认值:true
- 作用:会检测 scroller 内部 DOM 变化,自动调用 refresh 方法重新计算来保证滚动的正确性。它会额外增加一些性能开销,如果你能明确地知道 scroller 内部 DOM 的变化时机并手动调用 refresh 重新计算,你可以把该选项设置为 false。
autoBlur(v1.7.0+)
- 类型:Boolean
- 默认值:true
- 作用:在滚动之前会让当前激活的元素(input、textarea)自动失去焦点。
stopPropagation(v1.9.0+)
- 类型:Boolean
- 默认值:false
- 作用:是否阻止事件冒泡。多用在嵌套 scroll 的场景。