微信小程序-scrollview

简介: 可滚动视图区域。使用竖向滚动时,需要给scroll-view一个固定高度,通过 WXSS 设置 height。组件属性的长度单位默认为px,2.4.0起支持传入单位(rpx/px)。

官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/component/scroll-view.html


scroll-view


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


我们首先来简单搭建一个布局利用 scroll-view,index.wxml 代码如下:

<scroll-view class="container">
    <block wx:for="{{colors}}" wx:key="*this">
        <view class="item" style="background: {{item}}">{{item}}</view>
    </block>
</scroll-view>


对应的样式代码如下 index.wxss:

.item{
    height: 100px;
    text-align: center;
}
.container{
    background: black;
}


!> 默认情况下 scroll-view 是无法滚动的,如果想让 scroll-view 进行滚动,那么必须告诉 scroll-view 在哪个方向上进行滚动,并且还需要设置这个方向的尺寸才可以进行滚动。


例如我这里想让 scroll-view 进行 y 轴滚动,给 scroll-view 设置一个属性叫做 scroll-y: 告诉 scroll-view 可以在垂直方向滚动。


听了我这么一番话之后去index.wxml设置一下scroll-y:

<scroll-view class="container" scroll-y>
       <block wx:for="{{colors}}" wx:key="*this">
              <view class="item" style="background: {{item}}">{{item}}</view>
       </block>
</scroll-view>


设置了之后发现还是不能进行滚动,上面的注意点我已经说了,还需要设置一个对应方向的尺寸才可以,又去wxss设置了下scroll-view的高度,我再次调试可以进行滚动了。

.container{
  background: black;
  height: 300px;
}


上面介绍的是 y 轴方向,在来看看 x,x 当中有一些注意点,所以我这里就才特意拿出来进行说明。


想进行 x 滚动,也是一样的,告诉scroll-view一个属性, 为 scroll-x 让scroll-view可以在水平方向上滚动。

<scroll-view class="container" scroll-x>
       <block wx:for="{{colors}}" wx:key="*this">
              <view class="item" style="background: {{item}}">{{item}}</view>
       </block>
</scroll-view>


然后我发现,我的元素排版有问题,我这里想用 display: flex 进行布局,发现微信开发者工具的控制台给出了警告,警告是内容是 [pages/index/index] 设置 enable-flex 属性以使 flexbox 布局生效。 说明一个问题,我们想使用 flex 布局就需要告诉 scroll-view 开启这个 flex 布局,我们就再加一下吧~。

<scroll-view class="container" enable-flex scroll-x>
       <block wx:for="{{colors}}" wx:key="*this">
              <view class="item" style="background: {{item}}">item</view>
       </block>
</scroll-view>


样式文件代码:

.item{
  height: 100px;
  width: 100px;
  flex-shrink: 0;
}
.container{
  height: 200px;
  background: #333;
  display: flex;
}


这样子就可以进行 x 滚动了,我这里补充一条注意点,防止有的人粗心大意。


!> 默认情况下,是无法将scroll-view变成flex布局的,如果想将scroll-view变成flex布局,那么必须通过enable-flex属性


如上的内容其实在官方文档当中都有写出来,我这里就是带大家上手看看,在来看几个属性这篇文章就可以结束了,后续的一些内容,等我做项目我在出。


scroll-into-view


值应为某子元素id(id不能以数字开头)。设置哪个方向可滚动,则在哪个方向滚动到该元素,就是说,在初始化的时候我们可以直接让scroll-view默认选中某一个指定id的元素,相当于自动为我们滚动到指定的元素进行展示。


首先需要给每一个元素绑定一个id:

<view id="to{{index}}" class="item" style="background: {{item}}">item</view>


我这里为了更好的显示这个效果我将 .item 的样式进行了调整,宽度设置为了 375 这样子就每一个元素的展示就是一整个屏幕。

.item{
  height: 100px;
  width: 375px;
  flex-shrink: 0;
}


给scroll-view设置scroll-into-view=“to2”。


bindscroll


滚动时触发,event.detail = {scrollLeft, scrollTop, scrollHeight, scrollWidth, deltaX, deltaY}


简单的绑定和打印一下事件对象:

<scroll-view 
class="container"
enable-flex 
scroll-x
bindscroll="onScroll"
>
       <block wx:for="{{colors}}" wx:key="*this">
              <view class="item" style="background: {{item}}">item</view>
       </block>
</scroll-view>


index.js:

Page({
  onScroll(e){
    console.log(e);
  }
})


2105804-20230513105937811-1875776117.png


在监听方法的事件对象中:

  • deltaX 表示滚动的方向:如果是负值,表示往左边滚动,如果是正值,表示往右边滚动
  • deltaY 表示滚动方向,具体正值和负值是上还是下,自己下去实验
  • scrollHeight/scrollWidth:表示整个scroll-view的高度和宽度
  • scrollLeft:左边滚出去了多少
  • scrollTop:同理可证


bindscrolltoupper

滚动到顶部/左边时触发


bindscrolltolower

滚动到底部/右边时触发


index.wxml:

<scroll-view 
class="container"
enable-flex 
scroll-x
bindscrolltoupper="onScrollToupper"
bindscrolltolower="onScrollLower"
>
       <block wx:for="{{colors}}" wx:key="*this">
              <view class="item" style="background: {{item}}">item</view>
       </block>
</scroll-view>


index.js:

Page({
  onScrollToupper(){
    console.log("滚动到最上面或者最左边了");
  },
  onScrollLower(e){
    console.log("滚动到最下面或者最右边了");
  }
})


其实这两个属性也并不是滚动到最左边或者最右边才被触发事件的,是与左右两边有一段距离的,这个距离是可以进行设置的。通过 upper-threshold/lower-threshold 进行设置,这两个属性有函数节流,我这里其实觉得吧,可以直接使用官方设置好的距离即可。


upper-threshold

距顶部/左边多远时,触发 scrolltoupper 事件


lower-threshold

距底部/右边多远时,触发 scrolltolower 事件


index.wxml:

<scroll-view 
class="container"
enable-flex 
scroll-x
upper-threshold="{{0}}"
lower-threshold="{{0}}"
bindscrolltoupper="onScrollToupper"
bindscrolltolower="onScrollLower"
>
       <block wx:for="{{colors}}" wx:key="*this">
              <view class="item" style="background: {{item}}">item</view>
       </block>
</scroll-view>


这么一设置就代表就与左右两边的距离不存在偏移了。但是有节流问题,效果也并不是很好,所以说还是得要按照以后企业开发当中的需求而定。

目录
相关文章
|
7月前
|
JSON 小程序 JavaScript
微信小程序瀑布流组件
微信小程序瀑布流组件
|
移动开发 小程序 前端开发
微信小程序自定义导航栏
微信小程序自定义导航栏
330 0
微信小程序自定义导航栏
|
6月前
|
小程序 安全
微信小程序自定义底部导航栏
微信小程序自定义底部导航栏
|
JSON 小程序 JavaScript
微信小程序开发笔记—底部导航栏tabar
本文介绍了微信小程序开发中底部导航栏的设计方法,步骤详细,非常适合初学的小伙伴!
604 0
|
小程序
微信小程序下拉刷新功能
微信小程序下拉刷新功能
135 0
|
JSON 小程序 数据格式
微信小程序下拉刷新
微信小程序下拉刷新
102 2
|
小程序
微信小程序-tabBar底部菜单
微信小程序-tabBar底部菜单
111 0
|
JSON 小程序 JavaScript
微信小程序实现下拉刷新
设置微信小程序所有页面都可以下拉刷新
156 0
|
小程序
微信小程序系列——正确使用tabBar
微信小程序系列——正确使用tabBar
|
小程序 JavaScript API
微信小程序实现旋转动画效果
微信小程序实现旋转动画效果
693 0

相关实验场景

更多