scroll-view横向滚动

之前只是用sroll-view实现纵向滚动,没发现横向滚动实现起来需要注意的一些问题,所以现在记录,也算为时不晚吧。我的需求是横向滚动,里面显示一组带图片文字的按钮,点击收集formID。

wxml文件:


<scroll-view class='scrollContainer' scroll-x>

  <form report-submit='true' bindsubmit='onClickingRecommandItem' data-id="{{item.id}}" wx:for="{{recommand_list}}" wx:key="{{recIndex}}"> 
    <button class='recommandItemBtn' form-type='submit' hover-class='none'>
      <image class='recommandItemImg' src="{{item.img}}"></image>
      <view class='recommandItemText' >{{item.name}}</view>
    </button>
  </form></scroll-view>

wxss文件:

.scrollContainer {

  width: 100%;
  height: 234rpx;
  border-top: 1rpx solid #EF639F;
  border-bottom: 1rpx solid #EF639F;
  background-color: #EEE;}.recommandItemBtn {
  display: flex;
  flex-direction: column;
  align-items: center;
  margin-left: 30rpx;
  margin-right: 0;
  padding-left: 0;
  padding-right: 0;
  width: 140rpx;
  height: 234rpx;
  line-height: 1;
  border-radius: 0;
  background-color: rgba(0, 0, 0, 0);}.recommandItemBtn::after {
  display: none;}.recommandItemImg {
  width: 130rpx;
  height: 130rpx;
  margin-top: 30rpx;
  border-radius: 10rpx;}.recommandItemText {
  color: black;
  font-size: 24rpx;
  margin: 20rpx 0 30rpx 0;
  text-align: center;
  width: 140rpx;
  height: 24rpx;
  line-height: 24rpx;}

发现:recommandItemBtn是竖向排列,效果如下图1:


图1

此时我给scrollContainer新增:

.scrollContainer {
  display: flex;
  flex-direction: row;
  white-space: nowrap;}

还是无效,scroll-view并没有横向滚动,内部的recommandItemBtn仍然是竖向排列。

观察属性控制区域:发现scroll-view的display默认block。另外社区中 Scroll-View 组件的scroll-x属性不起作用 给出了解决方案。所以,我决定在我的recommandItemBtn外层包一层view作为scroll-view的最外层子元素,此时代码修改量最小。

最终的wxml文件改为:

<scroll-view class='scrollContainer' scroll-x>
  <view class='itemBg' wx:for="{{recommand_list}}" wx:key="{{recIndex}}">
    <form report-submit='true' bindsubmit='onClickingRecommandItem' data-id="{{item.id}}" wx:for="{{recommand_list}}" wx:key="{{recIndex}}"> 
      <button class='recommandItemBtn' form-type='submit' hover-class='none'>
        <image class='recommandItemImg' src="{{item.img}}"></image>
        <view class='recommandItemText' >{{item.name}}</view>
      </button>
    </form>
  </view></scroll-view>

最终的wxss文件改为:


.scrollContainer {

  width: 100%;
  height: 234rpx;
  border-top: 1rpx solid #EF639F;
  border-bottom: 1rpx solid #EF639F;
  white-space: nowrap;
  background-color: #EEE;}.itemBg {
  display: inline-block;
  margin-left: 30rpx;
  width: 140rpx;
  height: 234rpx;}.recommandItemBtn {
  /*其余属性一致,此处略写,只改margin-left*/
  margin-left: 0;}...

效果如下图2所示:


图2

至此:横向滚动实现。纵向滚动时没有因为子元素都是竖向排列,所以一直没注意过这些细节问题如:scroll-view不支持flex,默认block; 子元素需要设置display为inline-block。所以还是需要多实践多踩坑多记录,掌握的东西才不仅限于文档所介绍的部分,也能避免以后再次被文档没写明的细节问题所坑。

总结:关于scroll-view及横向滚动条件:
1、scroll-view不支持flex,默认block;
2、scroll-view设置scroll-x  width: 100%; white-space: nowrap;
3、子元素设置display: inline-block;
4、内部元素内容宽度超出scroll-view的宽。