微信小程序开发,scroll-view实现商品列表水平/横向滑动

1. 官方文档

1.滚动视图(scroll-view): https://developers.weixin.qq.com/miniprogram/dev/component/scroll-view.html

2. 功能描述

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

注意事项:在实际开发中,设置横向滚动也要设置固定高度。
注意事项:在实际开发中,设置横向滚动也要设置固定高度。
注意事项:在实际开发中,设置横向滚动也要设置固定高度。

  1. 横向滚动需打开 enable-flex 以兼容 WebView,如 :
<scroll-view scroll-x enable-flex style="flex-direction: row;"/>
  1. 滚动条的长度是预估的,若直接子节点的高度差别较大,则滚动条长度可能会不准确
  2. 使用 worklet 函数需要开启开发者工具 “将 JS 编译成 ES5” 或 “编译 worklet 函数” 选项。

3.通用属性

属性类型默认值必填说明最低版本
scroll-xbooleanfalse允许横向滚动1.0.0
scroll-ybooleanfalse允许纵向滚动1.0.0
upper-thresholdnumber/string50距顶部/左边多远时,触发 scrolltoupper 事件1.0.0
lower-thresholdnumber/string50距底部/右边多远时,触发 scrolltolower 事件1.0.0
scroll-topnumber/string-设置垂直滚动条位置1.0.0
scroll-leftnumber/string-设置水平滚动条位置1.0.0
scroll-into-viewstring-值为某子元素id(id不能以数字开头)。设置哪个方向可滚动,则在哪个方向滚动到该元素1.0.0
scroll-with-animationbooleanfalse在设置滚动条位置时使用动画过渡1.0.0
enable-back-to-topbooleanfalseiOS点击顶状态栏、安卓双击标题栏时,滚动条返回顶部,只支持竖向。自 2.27.3 版本开始,若非显式设置为false,则在显示尺寸大于屏幕90%时自动开启。1.0.0
enable-passivebooleanfalse开启 passive 特性,能优化一定的滚动性能2.25.3

查看更多属性,请阅读官方文档

4. 代码实现过程

  1. index.wxml
<!-- 商品推荐区域 -->

  <view class="good-hot">
    <scroll-view scroll-x enable-flex class="scroll-view_H"  type ="list">

      <view>
        <view class="goods-item">
          <image src="http://t13.baidu.com/it/u=2921758692,2069247658&fm=224&app=112&f=JPEG?w=500&h=500" mode="aspectFill" />
          <text>优花33枝红玫瑰</text>
          <text>99</text>
        </view>
      </view>

      <view>
        <view class="goods-item">
          <image src="https://img2.baidu.com/it/u=3992667725,944662479&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500" mode="aspectFill" />
          <text>优花33枝红玫瑰</text>
          <text>99</text>
        </view>
      </view>

      <view>
        <view class="goods-item">
          <image src="https://img1.baidu.com/it/u=4029400567,3042480412&fm=253&fmt=auto&app=138&f=JPEG?w=300&h=300" mode="aspectFill" />
          <text>优花33枝红玫瑰</text>
          <text>99</text>
        </view>
      </view>

      <view>
        <view class="goods-item">
          <image src="https://img0.baidu.com/it/u=321644153,4036133000&fm=253&fmt=auto&app=138&f=JPEG?w=400&h=400" mode="aspectFill" />
          <text>优花33枝红玫瑰</text>
          <text>99</text>
        </view>
      </view>


      <view>
        <view class="goods-item">
          <image src="https://img1.baidu.com/it/u=2852404479,2009840107&fm=253&fmt=auto&app=138&f=JPEG?w=400&h=400" mode="aspectFill" />
          <text>优花33枝红玫瑰</text>
          <text>99</text>
        </view>
      </view>

    </scroll-view>

  </view>
  1. index.wxss
.good-hot {
  padding: 16rpx;
}

/* 注意点,测试下来,设置水平滑动也要给一个固定高度 */
.scroll-view_H {
  width: 100%;
  white-space: nowrap;
  height: 480rpx;
  flex-direction: row;
}

.scroll-view_H view {
  display: inline-block;
  width: 320rpx;
  height: 100%;
  margin-right: 16rpx;
  border-radius: 10rpx;
}

/* 去掉最后一个元素的 margin-right: 16rpx 设置为0 */
.scroll-view_H view:last-child {
  margin-right: 0;
}

.scroll-view_H .goods-item {
  display: flex;
  height: 100%;
  width: 320rpx;
  flex-direction: column;
}
.scroll-view_H .goods-item image {
  width: 100%;
  height: 380rpx;
  border-radius: 10rpx 10rpx 0 0;
}
.scroll-view_H .goods-item text {
  margin-top: 8rpx;
}

5. 运行效果图

在这里插入图片描述

6. 可能存在的问题

  1. 官方说只有在竖向滚动时,需要给scroll-view一个固定高度,但在实际开发过程中,横向滚动也得给一个固定高度,可能是基础库版本问题

  2. 模拟器中可能出现如下图的警告信息:

在这里插入图片描述
解决方案:在scroll-view标签中添加 type="list",这个警告提示的很明显

7. 动态列表渲染

在上面.wxml布局中,商品列表是通过view堆积起来的,在实际开发中,肯定也不能这样写死,列表数据应该是一个动态的

使用列表渲染来实现数据动态显示

  1. 官方文档

数据绑定:https://developers.weixin.qq.com/miniprogram/dev/reference/wxml/data.html
列表渲染: https://developers.weixin.qq.com/miniprogram/dev/reference/wxml/list.html

  1. 语法
    wx:for

在组件上使用 wx:for 控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。
默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item

示例:

<view wx:for="{{array}}">
  {{index}}: {{item.message}}
</view>
Page({
  data: {
    array: [{
      message: 'foo',
    },
     {
      message: 'bar'
    }]
  }
})
  1. 代码改造

index.wxml

   <view class="good-hot">
    <scroll-view scroll-x enable-flex class="scroll-view_H" type="list">
      <view wx:for="{{RecommendedProduct}}" wx:key="*this">
        <view class="goods-item">
          <image src="{{item.posterUrl}}" mode="aspectFill" />
          <text>{{item.title}}</text>
          <text>{{item.price}}</text>
        </view>
      </view>
    </scroll-view>
  </view>

在index.js中模拟动态列表数据

// index.js
Page({

  data: {
    //新品推荐数据
    RecommendedProduct: [
      { title: "优花33枝红玫瑰", posterUrl: "http://t13.baidu.com/it/u=2921758692,2069247658&fm=224&app=112&f=JPEG?w=500&h=500", price: "199" },
      { title: "优花33枝红玫瑰", posterUrl: "https://img2.baidu.com/it/u=3992667725,944662479&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500", price: "69" },
      { title: "优花33枝红玫瑰", posterUrl: "https://img1.baidu.com/it/u=4029400567,3042480412&fm=253&fmt=auto&app=138&f=JPEG?w=300&h=300", price: "99" },
      { title: "优花33枝红玫瑰", posterUrl: "https://img0.baidu.com/it/u=321644153,4036133000&fm=253&fmt=auto&app=138&f=JPEG?w=400&h=400", price: "89" },
      { title: "优花33枝红玫瑰", posterUrl: "https://img1.baidu.com/it/u=2852404479,2009840107&fm=253&fmt=auto&app=138&f=JPEG?w=400&h=400", price: "49" },
      { title: "优花33枝红玫瑰", posterUrl: "https://img0.baidu.com/it/u=1281911112,1084861743&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500", price: "109" },
    ]
  }

})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浩宇软件开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值