ScrollList 横向滚动列表

一个灵活的横向滚动列表组件,支持多行布局、自定义样式、滚动条等特性,适用于导航菜单、图片列表等场景。

代码示例

				
<template>
	<zk-theme type="page" padding="20" showBack navbarTitle=" 横向滚动 ">

		<zk-theme type="card" padding="20">
			<view class="section-header">
				<zk-text class="title" text="热门分类"></zk-text>
			</view>
			<zk-scroll-list :dataSource="navList" :column="5" :row="1" :barShow="true" :barWidth="120" :imageWidth="88"
				:imageHeight="88" :imageRadius="50" :titleSize="24" :showSubtitle="true" :subtitleSize="20"
				:subtitleColor="'#666'" :gridGap="30" @click="onNavClick" />
		</zk-theme>


		<zk-theme type="card" padding="20">
			<view class="section-header">
				<zk-text class="title" text="品牌精选"></zk-text>

			</view>
			<zk-scroll-list :dataSource="brandList" :column="3" :row="1" :barShow="true" :barWidth="120"
				:imageWidth="300" :imageHeight="160" :imageRadius="16" :titleSize="28" :titleWeight="600"
				:showSubtitle="true" :subtitleSize="24" :gridGap="60" @click="onBrandClick" />
		</zk-theme>


		<zk-theme type="card" padding="20">
			<view class="section-header">
				<zk-text class="title" text="热门服务"></zk-text>
			</view>
			<zk-scroll-list :dataSource="serviceList" :column="5" :row="2" :barShow="true" :imageWidth="60"
				:imageHeight="60" :imageRadius="12" :titleSize="24" :showSubtitle="false" :gridGap="30"
				@click="onServiceClick" />
		</zk-theme>


		<zk-theme type="card" padding="20">
			<view class="section-header">

				<zk-text class="title" text="好物推荐"></zk-text>
			</view>
			<zk-scroll-list :dataSource="goodsList" :column="3" :row="1" :barShow="true" :barWidth="120"
				:imageWidth="240" :imageHeight="240" :imageRadius="16" :titleSize="28" :titleWeight="500"
				:titleLines="2" :showSubtitle="true" :subtitleColor="'#ff4757'" :gridGap="60" @click="onGoodsClick" />
		</zk-theme>
	</zk-theme>
</template>

<script>
	export default {
		data() {
			return {
				navList: [{
						image: '/static/user/1.jpg',
						title: '女装精选',
						subtitle: '春季上新'
					},
					{
						image: '/static/user/2.jpg',
						title: '时尚搭配',
						subtitle: '流行趋势'
					},
					{
						image: '/static/user/3.jpg',
						title: '运动系列',
						subtitle: '潮流运动'
					},
					{
						image: '/static/user/4.jpg',
						title: '包包配饰',
						subtitle: '品质精选'
					},
					{
						image: '/static/user/1.jpg',
						title: '美妆护肤',
						subtitle: '美丽焕新'
					}
				],
				brandList: [{
						image: '/static/user/1.jpg',
						title: 'NIKE 春季特惠',
						subtitle: '运动精选大促'
					},
					{
						image: '/static/user/2.jpg',
						title: 'ZARA 新品首发',
						subtitle: '春夏系列上新'
					},
					{
						image: '/static/user/3.jpg',
						title: 'UNIQLO 联名系列',
						subtitle: '设计师合作款'
					}
				],
				serviceList: [{
						image: '/static/user/1.jpg',
						title: '签到领券'
					},
					{
						image: '/static/user/2.jpg',
						title: '限时秒杀'
					},
					{
						image: '/static/user/3.jpg',
						title: '拼团优惠'
					},
					{
						image: '/static/user/4.jpg',
						title: '积分商城'
					},
					{
						image: '/static/user/1.jpg',
						title: '领券中心'
					},
					{
						image: '/static/user/2.jpg',
						title: '会员专享'
					},
					{
						image: '/static/user/3.jpg',
						title: '品牌折扣'
					},
					{
						image: '/static/user/4.jpg',
						title: '更多服务'
					}
				],
				goodsList: [{
						image: '/static/user/1.jpg',
						title: '春季新款小众设计感连衣裙',
						subtitle: '¥299'
					},
					{
						image: '/static/user/2.jpg',
						title: '时尚百搭牛仔外套',
						subtitle: '¥199'
					},
					{
						image: '/static/user/3.jpg',
						title: '韩版休闲运动套装',
						subtitle: '¥259'
					},
					{
						image: '/static/user/4.jpg',
						title: '简约气质通勤包包',
						subtitle: '¥159'
					}
				]
			}
		},
		methods: {
			onNavClick({
				item,
				index
			}) {
				uni.showToast({
					title: `点击了${item.title}`,
					icon: 'none'
				})
			},
			onBrandClick({
				item,
				index
			}) {
				uni.showToast({
					title: `进入${item.title}`,
					icon: 'none'
				})
			},
			onServiceClick({
				item,
				index
			}) {
				uni.showToast({
					title: `使用${item.title}`,
					icon: 'none'
				})
			},
			onGoodsClick({
				item,
				index
			}) {
				uni.showToast({
					title: `查看商品:${item.title}`,
					icon: 'none'
				})
			},
			onMoreClick() {
				uni.showToast({
					title: '查看更多',
					icon: 'none'
				})
			}
		}
	}
</script>

<style lang="scss">
	.section-header {
		display: flex;
		align-items: center;
		justify-content: space-between;
		margin-bottom: 24rpx;
		padding: 0 12rpx;

		.title {
			font-size: 32rpx;
			font-weight: 600;
			color: #1a1a1a;
			position: relative;
			padding-left: 24rpx;

			&::before {
				content: '';
				position: absolute;
				left: 0;
				top: 50%;
				transform: translateY(-50%);
				width: 6rpx;
				height: 28rpx;
				background: linear-gradient(180deg, #3B82F6 0%, #60A5FA 100%);
				border-radius: 3rpx;
			}
		}

		.more {
			font-size: 26rpx;
			color: #666666;
			padding: 8rpx 24rpx;
			background: #f8f9fa;
			border-radius: 24rpx;
			transition: all 0.3s ease;

			&:active {
				background: #f1f3f5;
				color: #3B82F6;
			}
		}
	}
</style>
			

API

Props 属性

参数 说明 类型 默认值
data-source 数据源 Array []
column 每行显示的列数 number 4
row 显示的行数 number 2
direction 排列方向,可选值:row / column string row
image-width 图片宽度,单位rpx number / string 160
image-radius 图片圆角,单位rpx number / string 12
title-size 标题字体大小,单位rpx number / string 28
show-subtitle 是否显示副标题 boolean false
grid-gap 网格间距,单位rpx number / string 20
bar-show 是否显示滚动条 boolean true
bar-width 滚动条宽度,单位rpx number 120
gard-width 自定义网格宽度,单位rpx。设为0时自动计算 number 0
image-mode 图片填充模式 string aspectFill
title-weight 标题字重 number / string 400
title-lines 标题最大行数 number 1
content-padding 内容区域padding,单位rpx number / string 20

Slots 插槽

名称 说明
default 自定义列表项内容

Events 事件

事件名 说明 回调参数
click 点击列表项时触发 { item: object, index: number }

数据结构

dataSource: [
      {
          image: string,      // 图片地址
          title: string,      // 标题文字
          subtitle?: string   // 副标题文字(可选)
      }
  ]