ScrollView

可滚动视图区域。使用竖向滚动时,需要给scroll-view一个固定高度,通过 WXSS 设置 height。组件属性的长度单位默认为 px

Tips: H5 中 ScrollView 组件是通过一个高度(或宽度)固定的容器内部滚动来实现的,因此务必正确的设置容器的高度。例如: 如果 ScrollView 的高度将 body 撑开,就会同时存在两个滚动条(body 下的滚动条,以及 ScrollView 的滚动条)。 微信小程序 中 ScrollView 组件如果设置 scrollX 横向滚动时,并且子元素为多个时(单个子元素时设置固定宽度则可以正常横向滚动),需要通过 WXSS 设置 white-space: nowrap 来保证元素不换行,并对 ScrollView 内部元素设置 display: inline-block 来使其能够横向滚动。

参考文档

类型

  1. ComponentType<ScrollViewProps>

示例代码

  • React
  • Vue
  1. export default class PageView extends Component {
  2. constructor() {
  3. super(...arguments)
  4. }
  5. onScrollToUpper() {}
  6. // or 使用箭头函数
  7. // onScrollToUpper = () => {}
  8. onScroll(e){
  9. console.log(e.detail)
  10. }
  11. render() {
  12. const scrollStyle = {
  13. height: '150px'
  14. }
  15. const scrollTop = 0
  16. const Threshold = 20
  17. const vStyleA = {
  18. height: '150px',
  19. 'background-color': 'rgb(26, 173, 25)'
  20. }
  21. const vStyleB = {
  22. height: '150px',
  23. 'background-color': 'rgb(39,130,215)'
  24. }
  25. const vStyleC = {
  26. height: '150px',
  27. 'background-color': 'rgb(241,241,241)',
  28. color: '#333'
  29. }
  30. return (
  31. <ScrollView
  32. className='scrollview'
  33. scrollY
  34. scrollWithAnimation
  35. scrollTop={scrollTop}
  36. style={scrollStyle}
  37. lowerThreshold={Threshold}
  38. upperThreshold={Threshold}
  39. onScrollToUpper={this.onScrollToUpper.bind(this)} // 使用箭头函数的时候 可以这样写 `onScrollToUpper={this.onScrollToUpper}`
  40. onScroll={this.onScroll}
  41. >
  42. <View style={vStyleA}>A</View>
  43. <View style={vStyleB}>B</View>
  44. <View style={vStyleC}>C</View>
  45. </ScrollView>
  46. )
  47. }
  48. }
  1. <template>
  2. <view class="container">
  3. <view class="page-body">
  4. <view class="page-section">
  5. <view class="page-section-title">
  6. <text>Vertical Scroll - 纵向滚动</text>
  7. </view>
  8. <view class="page-section-spacing">
  9. <scroll-view :scroll-y="true" style="height: 300rpx;" @scrolltoupper="upper" @scrolltolower="lower" @scroll="scroll" :scroll-into-view="toView" :scroll-top="scrollTop">
  10. <view id="demo1" class="scroll-view-item demo-text-1">1</view>
  11. <view id="demo2" class="scroll-view-item demo-text-2">2</view>
  12. <view id="demo3" class="scroll-view-item demo-text-3">3</view>
  13. </scroll-view>
  14. </view>
  15. </view>
  16. <view class="page-section">
  17. <view class="page-section-title">
  18. <text>Horizontal Scroll - 横向滚动</text>
  19. </view>
  20. <view class="page-section-spacing">
  21. <scroll-view class="scroll-view_H" :scroll-x="true" @scroll="scroll" style="width: 100%">
  22. <view id="demo21" class="scroll-view-item_H demo-text-1">a</view>
  23. <view id="demo22" class="scroll-view-item_H demo-text-2">b</view>
  24. <view id="demo23" class="scroll-view-item_H demo-text-3">c</view>
  25. </scroll-view>
  26. </view>
  27. </view>
  28. </view>
  29. </view>
  30. </template>
  31. <script>
  32. const order = ['demo1', 'demo2', 'demo3']
  33. export default {
  34. name: 'Index',
  35. data() {
  36. return {
  37. scrollTop: 0,
  38. toView: 'demo2'
  39. }
  40. },
  41. methods: {
  42. upper(e) {
  43. console.log('upper:', e)
  44. },
  45. lower(e) {
  46. console.log('lower:', e)
  47. },
  48. scroll(e) {
  49. console.log('scroll:', e)
  50. }
  51. }
  52. }
  53. </script>
  54. <style>
  55. .page-section-spacing{
  56. margin-top: 60rpx;
  57. }
  58. .scroll-view_H{
  59. white-space: nowrap;
  60. }
  61. .scroll-view-item{
  62. height: 300rpx;
  63. }
  64. .scroll-view-item_H{
  65. display: inline-block;
  66. width: 100%;
  67. height: 300rpx;
  68. }
  69. .demo-text-1 { background: #ccc; }
  70. .demo-text-2 { background: #999; }
  71. .demo-text-3 { background: #666; }
  72. </style>

ScrollViewProps

参数类型默认值必填说明
scrollXbooleanfasle允许横向滚动
scrollYbooleanfasle允许纵向滚动
upperThresholdnumber50距顶部/左边多远时(单位px),触发 scrolltoupper 事件
lowerThresholdnumber50距底部/右边多远时(单位px),触发 scrolltolower 事件
scrollTopnumber设置竖向滚动条位置
scrollLeftnumber设置横向滚动条位置
scrollIntoViewstring值应为某子元素id(id不能以数字开头)。设置哪个方向可滚动,则在哪个方向滚动到该元素
scrollWithAnimationbooleanfasle在设置滚动条位置时使用动画过渡
enableBackToTopbooleanfasleiOS 点击顶部状态栏、安卓双击标题栏时,滚动条返回顶部,只支持竖向
enableFlexbooleanfasle启用 flexbox 布局。开启后,当前节点声明了 display: flex 就会成为 flex container,并作用于其孩子节点。
scrollAnchoringbooleanfasle开启 scroll anchoring 特性,即控制滚动位置不随内容变化而抖动,仅在 iOS 下生效,安卓下可参考 CSS overflow-anchor 属性。
refresherEnabledbooleanfasle开启自定义下拉刷新
refresherThresholdnumber45设置自定义下拉刷新阈值
refresherDefaultStylestring‘black’设置自定义下拉刷新默认样式,支持设置 black | white | none, none 表示不使用默认样式
refresherBackgroundstring‘#FFF’设置自定义下拉刷新区域背景颜色
refresherTriggeredbooleanfasle设置当前下拉刷新状态,true 表示下拉刷新已经被触发,false 表示下拉刷新未被触发
onScrollToUpper(event: BaseEventOrigFunction<any>) => any滚动到顶部/左边,会触发 scrolltoupper 事件
onScrollToLower(event: BaseEventOrigFunction<any>) => any滚动到底部/右边,会触发 scrolltolower 事件
onScroll(event: BaseEventOrigFunction<onScrollDetail>) => any滚动时触发
event.detail = { scrollLeft, scrollTop, scrollHeight, scrollWidth, deltaX, deltaY}
onRefresherPulling(event: BaseEventOrigFunction<any>) => any自定义下拉刷新控件被下拉
onRefresherRefresh(event: BaseEventOrigFunction<any>) => any自定义下拉刷新被触发
onRefresherRestore(event: BaseEventOrigFunction<any>) => any自定义下拉刷新被复位
onRefresherAbort(event: BaseEventOrigFunction<any>) => any自定义下拉刷新被中止

API 支持度

API微信小程序百度小程序支付宝小程序字节跳动小程序H5React Native
ScrollViewProps.scrollX✔️✔️✔️✔️✔️✔️(二选一)
ScrollViewProps.scrollY✔️✔️✔️✔️✔️✔️(二选一)
ScrollViewProps.upperThreshold✔️✔️✔️✔️✔️✔️
ScrollViewProps.lowerThreshold✔️✔️✔️✔️✔️✔️
ScrollViewProps.scrollTop✔️✔️✔️✔️✔️✔️
ScrollViewProps.scrollLeft✔️✔️✔️✔️✔️✔️
ScrollViewProps.scrollIntoView✔️✔️✔️✔️✔️
ScrollViewProps.scrollWithAnimation✔️✔️✔️✔️✔️✔️
ScrollViewProps.enableBackToTop✔️✔️✔️
ScrollViewProps.enableFlex✔️
ScrollViewProps.scrollAnchoring✔️
ScrollViewProps.refresherEnabled✔️
ScrollViewProps.refresherThreshold✔️
ScrollViewProps.refresherDefaultStyle✔️
ScrollViewProps.refresherBackground✔️
ScrollViewProps.refresherTriggered✔️
ScrollViewProps.onScrollToUpper✔️✔️✔️✔️✔️✔️
ScrollViewProps.onScrollToLower✔️✔️✔️✔️✔️✔️
ScrollViewProps.onScroll✔️✔️✔️✔️✔️✔️
ScrollViewProps.onRefresherPulling✔️
ScrollViewProps.onRefresherRefresh✔️
ScrollViewProps.onRefresherRestore✔️
ScrollViewProps.onRefresherAbort✔️

onScrollDetail

参数类型说明
scrollLeftnumber横向滚动条位置
scrollTopnumber竖向滚动条位置
scrollHeightnumber滚动条高度
scrollWidthnumber滚动条宽度
deltaXnumber
deltaYnumber