scrollbar:自定义滚动条插件对比&实战

前端自定义滚动条主流库:simplebar、perfect‑scrollbar、OverlayScrollbars,还有框架封装版,用来统一多浏览器滚动条样式,替代原生丑陋滚动条。

主流库对比

特点

体积

框架适配

适用场景

simplebar

保留原生滚动行为,DOM 侵入小,API 简单,性能好

~14KB

simplebar‑vue / simplebar‑react

PC 后台、弹窗、列表容器,最常用

perfect‑scrollbar

老牌,配置丰富,不接管滚动逻辑,只渲染滚动条 DOM

~16KB

vue‑perfect‑scrollbar

复杂嵌套滚动、老项目兼容

OverlayScrollbars

TS 编写,零依赖,SSR 友好,支持 body 滚动,高度可定制

~18KB

官方 vue/react/svelte

现代项目、SSR/Next/Nuxt

BetterScroll

主打移动端,平滑滚动、回弹,PC 滚动条能力弱

Vue/React

H5 移动端列表

注意:浏览器 CSS 伪类::-webkit-scrollbar仅 Chrome 系生效,Firefox 不支持,生产要兼容多浏览器必须用 JS 插件。


1. SimpleBar(推荐,上手最简单)

原生 JS

npm install simplebar

import SimpleBar from 'simplebar';
import 'simplebar/dist/simplebar.css';

// html <div id="box" style="height:300px"></div>
const sb = new SimpleBar(document.querySelector('#box'), {
  autoHide: true, // hover才显示滚动条;false永久显示
});
// 内容动态变化手动更新:sb.recalculate()

简写:直接加属性 data‑simplebar

<div data-simplebar style="height:300px">长内容……</div>

Vue3 simplebar‑vue

npm install simplebar-vue
<template>
  <SimpleBar style="height:300px" :autoHide="false">
    <div v-for="i in 50" :key="i">{{i}}</div>
  </SimpleBar>
</template>
<script setup>
import SimpleBar from 'simplebar-vue';
import 'simplebar/dist/simplebar.min.css';
</script>

React simplebar‑react

npm install simplebar-react

import SimpleBar from 'simplebar-react';
import 'simplebar/dist/simplebar.min.css';

<SimpleBar style={{maxHeight:300}} autoHide={true}>
  content...
</SimpleBar>

自定义滚动条样式:覆盖 css 变量

.simplebar-scrollbar::before {
  background: #409eff;
  border-radius:6px;
}

2. perfect‑scrollbar

npm install perfect-scrollbar

原生 JS 示例:

import PerfectScrollbar from 'perfect-scrollbar';
import 'perfect-scrollbar/css/perfect-scrollbar.css';

const container = document.querySelector('#scroll');
const ps = new PerfectScrollbar(container, {
  suppressScrollX: true, //关闭横向滚动
  wheelSpeed: 1,
});
//销毁 ps.destroy()

3. OverlayScrollbars(现代 TS 库,SSR 友好)

npm install overlayscrollbars

import { OverlayScrollbars } from 'overlayscrollbars';
import 'overlayscrollbars/overlayscrollbars.css';

OverlayScrollbars(document.querySelector('#box'), {
  scrollbars:{ theme:"os-theme-light" }
});

有官方 vue/react 包,支持 Nuxt、Next,可直接对body做全局滚动条美化。

常见踩坑

1、容器必须设置固定高度 /max‑height,否则滚动条不出现;

2、动态加载数据后,需要调用实例方法recalculate()重新计算滚动条尺寸;

3、不要对 body 使用 simplebar,官方不建议;body 美化优先 OverlayScrollbars;

4、不要同时写overflow:auto和插件,插件内部会接管滚动。

选型建议

普通后台管理系统、弹窗列表:SimpleBar,平衡性能与开发效率;

Nuxt/Next SSR 项目,需要美化页面 body 滚动:OverlayScrollbars

老项目、复杂嵌套滚动:perfect‑scrollbar

H5 移动端:BetterScroll

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值