# mouse-wheel

mouseWheel extends the capabilities of the BetterScroll mouse wheel.

# Install

npm install @better-scroll/mouse-wheel --save

// or

yarn add @better-scroll/mouse-wheel


Currently supports mouse wheel: core, slide, wheel, pullup, pulldown plugins.

# Basic Usage

In order to enable the mouseWheel plugin, you need to first import it, register the plugin through the static method BScroll.use(), and finally pass in the correct mouseWheel option

  import BScroll from '@better-scroll/core'
  import MouseWheel from '@better-scroll/mouse-wheel'

  new BScroll('.bs-wrapper', {
    mouseWheel: {
      speed: 20,
      invert: false,
      easeTime: 300
  • VerticalScroll Demo
  <div class="mouse-wheel-vertical-scroll">
    <div class="mouse-wheel-wrapper" ref="scroll">
      <div class="mouse-wheel-content">
        <div class="mouse-wheel-item" v-for="n in 100" :key="n">{{n}}</div>
  • HorizontalScroll Demo

# Advanced Usage

The mouseWheel plugin can also be used with other plugins to increase the operation of the mouse wheel.

  • mouseWheel & slide

    Operate slide with the mouse wheel.

    • HorizontalSlide Demo

    • VerticalSlide Demo

  • mouseWheel & pullup

    use mousewheel do pullup operation.

  • mouseWheel & pulldown

    use mousewheel do pulldown operation.

  • mouseWheel & wheel

    use mousewheel do wheel operation.

# mouseWheel options

# speed

  • Type: number
  • Default: 20

The speed at which the mouse wheel scrolls.

# invert

  • Type: boolean
  • Default: false

When the value is true, it means that the scrolling direction of the wheel is opposite to that of BetterScroll.

# easeTime

  • Type: number
  • Default: 300(ms)

The duration of the scroll animation.

# discreteTime

  • Type: number
  • Default: 400(ms)

Because the mouse wheel is a discrete movement, there is no event type of start, move, end, so as long as no scroll is detected within discreteTime, then one scroll wheel action ends.


When integrated with pulldown plugin, easeTime and discreteTime will be internally modified to reasonable fixed value to trigger the pullingDown hook

# throttleTime

  • Type: number
  • Default: 0(ms)

Since the scroll wheel is a high-frequency action, the trigger frequency can be limited by throttleTime. MouseWheel will cache the scrolling distance, and calculate the cached distance and scroll every throttleTime.

Modifying throttleTime may cause discontinuous scrolling animation, please adjust it according to the actual scene.

# dampingFactor

  • Type: number
  • Default: 0.1

Damping factor, the value range is [0, 1]. When BetterScroll rolls out of the boundary, resistance needs to be applied to prevent the rolling range from being too large. The smaller the value, the greater the resistance.


When mouseWheel is configured as true, the plugin uses the default plugin option.

const bs = new BScroll('.wrapper', {
  mouseWheel: true

// equals

const bs = new BScroll('.wrapper', {
  mouseWheel: {
    speed: 20,
    invert: false,
    easeTime: 300,
    discreteTime: 400,
    throttleTime: 0,
    dampingFactor: 0.1

# Events

# alterOptions

  • Arguments: MouseWheelConfig
      export interface MouseWheelConfig {
        speed: number
        invert: boolean
        easeTime: number
        discreteTime: number
        throttleTime: number,
        dampingFactor: number
  • Triggered Timing: The mousewheel begins to scroll, allowing to modify options to control certain behaviors during scrolling.

# mousewheelStart

  • Arguments: none
  • Triggered Timing: The mousewheel starts.

# mousewheelMove

  • Arguments: { x, y }
  • { number } x: The current x of BetterScroll
  • { number } y: The current y of BetterScroll
  • Type: { x: number, y: number }
  • Triggered Timing: Mousewheel is scrolling

# mousewheelEnd

  • Arguments:delta
  • Type: WheelDelta
  interface WheelDelta {
    x: number
    y: number
    directionX: Direction
    directionY: Direction
  • Triggered Timing: If the mousewheel hook has not been triggered after discreteTime, a mousewheel action will be settled.


Due to the particularity of the mousewheel hook, the dispatch of mousewheelEnd does not mean the end of the scroll animation.


In most scenarios, if you want to know the current scroll position of BetterScroll accurately, please listen to the scroll and scrollEnd hooks instead of the mouseXXX hooks.