当前位置:首页 > React

react实现betterscroll

2026-01-26 13:08:47React

实现 BetterScroll 的基本步骤

安装 BetterScroll 核心库及 React 封装版本:

npm install better-scroll @better-scroll/core

基础滚动容器实现

创建可滚动区域需固定容器高度并设置 overflow: hidden

import BScroll from '@better-scroll/core'
import { useEffect, useRef } from 'react'

function ScrollView() {
  const wrapperRef = useRef(null)

  useEffect(() => {
    const bs = new BScroll(wrapperRef.current, {
      scrollY: true,
      click: true
    })
    return () => bs.destroy()
  }, [])

  return (
    <div style={{ height: '400px', overflow: 'hidden' }} ref={wrapperRef}>
      <div className="scroll-content">
        {/* 长列表内容 */}
      </div>
    </div>
  )
}

动态内容处理

数据异步加载时需手动刷新滚动实例:

useEffect(() => {
  const bs = new BScroll(wrapperRef.current)

  const refresh = () => bs.refresh()
  window.addEventListener('resize', refresh)

  return () => {
    bs.destroy()
    window.removeEventListener('resize', refresh)
  }
}, [dataList]) // 依赖数据变化

常用功能配置

通过配置对象启用高级功能:

new BScroll(wrapperRef.current, {
  scrollY: true,
  scrollX: false,
  freeScroll: false,
  bounce: {
    top: true,
    bottom: true
  },
  pullUpLoad: {
    threshold: 50
  },
  pullDownRefresh: {
    threshold: 50,
    stop: 40
  }
})

事件绑定示例

实现上拉加载和下拉刷新:

useEffect(() => {
  const bs = new BScroll(wrapperRef.current, {
    pullUpLoad: true,
    pullDownRefresh: true
  })

  bs.on('pullingUp', () => {
    fetchData().then(() => bs.finishPullUp())
  })

  bs.on('pullingDown', () => {
    refreshData().then(() => bs.finishPullDown())
  })
}, [])

性能优化建议

对于长列表建议使用动态渲染:

{
  dataList.slice(0, visibleCount).map(item => (
    <ListItem key={item.id} data={item} />
  ))
}

滚动位置记忆可通过以下方式实现:

react实现betterscroll

// 保存位置
const savePos = () => {
  const y = bs.y
  sessionStorage.setItem('scrollPos', y)
}

// 恢复位置
bs.scrollTo(0, Number(sessionStorage.getItem('scrollPos')))

分享给朋友:

相关文章

react如何清理

react如何清理

清理 React 项目的方法 清理未使用的依赖项 运行 npm prune 或 yarn install --production 可以移除 node_modules 中未在 package.json…

odyssey react 如何

odyssey react 如何

Odyssey React 是耐克推出的一款跑鞋系列,以其轻量化设计和React泡沫缓震技术著称。以下是关于该系列鞋款的主要特点和使用建议: 核心特点 React泡沫中底提供出色的能量回馈和缓震效果…

react如何减少setState

react如何减少setState

减少 React 中 setState 调用的方法 合并多次状态更新 使用函数式更新方式合并多次 setState 调用。React 会将多次状态更新批量处理,避免不必要的重新渲染。 // 非函…

react elementUI

react elementUI

React 和 Element UI 是两个不同的技术栈,但可以通过整合实现类似功能。以下是相关解决方案和替代方案: React 与 Element UI 的替代方案 Element UI 是为 V…

react如何编码参数

react如何编码参数

编码参数的方法 在React中,编码参数通常涉及URL查询参数或路由参数的编码和解码。以下是几种常见场景的处理方法: URL查询参数编码 使用encodeURIComponent对参数进行编码,避免…

react如何遍历树

react如何遍历树

遍历树结构的常用方法 在React中遍历树结构通常采用递归或迭代的方式。树结构可以是组件树、DOM树或自定义的数据结构。以下是几种常见的实现方法。 递归组件遍历 使用递归组件可以直观地渲染树形结构。…