要做自定义滚动条就要做到最好的scroll-div

前言

关于自定义滚动条的方案,我之前写过一篇文章,但是当时写那篇文章的侧重点是教大家怎么实现基础的能够自定义的滚动条,而没怎么注重介绍我封装的那个一个vue组件,也没什么效果图,介绍功能啥的。

而我自己也在项目中使用了,之前做的组件虽然已经满足了较多场景了,但是我在复杂的工程中使用了,体验了,发现还是有更多场景待开发,以及一些bug需要修复。经过了实际项目的应用后,已经把该组件完善得较好了。

加上最近身边有不少同事朋友都有需求,在找一款能兼容尽量多浏览器的自定义滚动条组件,刚好问到我了,我就介绍我封的这个组件给他们了。他们说我这个确实好用,但是就是推广做得少,几乎没人知道,叫我要不写个软文宣传一下,加之npm上的文档,没有示例,让人也不好有直接的感受。

出于此目的,本篇着重介绍一下该组件的使用效果,以及它有什么优点,你为什么要选择它!

安装组件

  • npm包 vue-scroll-div
  • 直接script引入线上资源地址: //unpkg.com/vue-scroll-div/lib/vue-scroll-div.umd.min.js

主要特点

  • 多平台浏览器兼容,不再单纯使用-webkit-scrollbar支持webkit内核的浏览器,连火狐、IE等非webkit内核浏览器也支持自定义滚动条。不再自欺欺人
  • 智能选择自定义滚动条方案。除了限定固定自定义滚动条模式外,还能开启智能优化选择模式,能够针对不同的浏览器特性,选择性能最好的自定义滚动条方案:
    • MacOS上的浏览器本身滚动条效果已经很好了,所以在MacOS上不做改变,应用原本的浏览器,最终组件只会渲染成普通的div
    • webkit内核的浏览器,由于支持-webkit-scrollbar等CSS样式直接修改滚动条样式,那么就会选择用CSS的方式来指定自定义滚动条
    • 其他浏览器,就会屏蔽掉原本的滚动条,利用HTML元素来模仿滚动条效果,显然这种方式的渲染成本会增大。
  • 弥补火狐和IE浏览器,对于padding-bottom设置"不起作用"的缺陷问题,行为跟chrome等浏览器保持一致性
  • 自定义滚动条是悬浮内容上方的,不会挤兑容器空间
  • 支持全局设计所有用到的滚动条各参数
  • 使用方便,用法跟使用一个div的理念是一样的,你就可以把该组件当成一个div来使用。
  • 其他更多特点详见说明文档

使用效果

还是先睹为快吧,没有直接的视觉感受,大家都不确定是否自己要找的东西

注意gif中滚动条有一些点点的颜色,是录gif工具截图生成造成的影响,并不是组件的问题

仿MacOS效果

仿macos.gif

上图仿MacOS的滚动条效果,只有在容器内发生滚动,就显示处滚动条,不操作后延迟一定时间消失。

也可以鼠标悬浮在滚动条所在区域(一般就是边边),也能显示处滚动条,可以进行拖动滚动,而且只要按住发生拖动,就算鼠标离开容器,也能触发滚动。

响应容器大小变化

响应容器改变.gif

上图表示该组件,能够响应容器的大小变化,如屏幕大小发生了变化,或者容器内展示的数据发生变化(如请求后获取数据等),滚动条能够自动响应这种变化,进而调整自身的显示长度和可移动距离。

自定义滚动条样式

改变滚动条样式.gif

示图只是改变了滚动条的颜色,但是你可以自定义滚动条的更多样式,如滚动条的宽度,圆角等各种情况。提供了十分便利自由的配置项

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好,UniApp 中可以使用 `scroll-view` 组件来实现自定义滚动条。以下是一个简单的示例: ```html <scroll-view class="scroll-view" scroll-y> <div class="content"> <!-- 列表内容 --> </div> <div class="scroll-bar"></div> </scroll-view> ``` 其中,`.scroll-view` 为 `scroll-view` 组件的样式类,`.content` 为列表内容的容器,`.scroll-bar` 为自定义滚动条的容器。 接着,在样式文件中可以添加以下代码: ```css .scroll-view { position: relative; /* 父容器需要设置 position: relative; */ height: 100vh; /* 设置高度,这里使用了 viewport height 单位 */ } .content { height: 2000rpx; /* 列表内容高度 */ } .scroll-bar { position: absolute; top: 0; right: 0; width: 6px; height: 50px; /* 滚动条高度 */ background-color: #ccc; border-radius: 3px; opacity: 0; /* 初始透明度为 0,只有在滚动时才显示 */ transition: opacity 0.3s; } .scroll-view::-webkit-scrollbar { width: 0; /* 隐藏原生滚动条 */ } .scroll-view::-webkit-scrollbar-thumb { width: 0; height: 0; background-color: transparent; } ``` 这里使用了 `position: absolute;` 和 `right: 0;` 将自定义滚动条定位到父容器的右侧,使用 `opacity` 和 `transition` 实现滚动条的渐隐渐现效果。同时,使用了 `-webkit-scrollbar` 相关样式将原生滚动条隐藏。 最后,在 `scroll-view` 组件的 `scroll` 事件中可以添加以下代码: ```js onScroll(e) { const { scrollTop, scrollHeight, clientHeight } = e.detail; const bar = this.$refs.bar; // 计算滚动条高度和位置 const barHeight = clientHeight / scrollHeight * clientHeight; const barTop = scrollTop / scrollHeight * clientHeight; // 设置滚动条位置和高度 bar.style.height = barHeight + 'px'; bar.style.top = barTop + 'px'; // 显示滚动条 bar.style.opacity = 1; // 3 秒后隐藏滚动条 clearTimeout(this.timer); this.timer = setTimeout(() => { bar.style.opacity = 0; }, 3000); } ``` 在 `scroll` 事件中,通过 `scrollTop`、`scrollHeight` 和 `clientHeight` 计算出滚动条的高度和位置,并设置到滚动条容器的样式中。同时,通过设置 `opacity` 实现滚动条的渐隐渐现效果。这里还设置了一个 3 秒的计时器,在滚动结束后 3 秒自动隐藏滚动条。 希望能对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值