程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 原生微信小程序

  • uniapp多端开发

    • 快速入门

    • 内置组件

    • 扩展组件

      • uni-ui 介绍
      • Uni-UI 的安装和使用
      • uni-sass 辅助样式
      • uni-badge 数字角标
      • uni-breadcrumb 面包屑
      • uni-calendar 日历
      • uni-card 卡片
      • uni-collapse 折叠面板
      • uni-combox 组合框
      • uni-countdown 倒计时
      • uni-data-checkbox 数据选择器
      • uni-data-picker 级联选择器
      • uni-data-select 下拉框
      • uni-dateformat 日期格式化
      • uni-datetime-picker 日期选择器
      • uni-drawer 抽屉
      • uni-easyinput 增强输入框
      • uni-fab 悬浮按钮
      • uni-fav 收藏按钮
      • uni-file-picker 文件选择上传
      • uni-forms 表单
      • uni-goods-nav 商品导航
      • uni-grid 宫格
        • 介绍
          • 基本用法
          • 不带边框并矩形显示
        • API
          • Grid Props
          • Grid Events
          • GridItem Props
        • 示例
      • uni-group 分组
      • uni-icons 图标
      • uni-indexed-list 索引列表
      • uni-link 超链接
      • uni-list 列表
      • uni-load-more 加载更多
      • uni-nav-bar 自定义导航栏
      • uni-notice-bar 通告栏
      • uni-number-box 数字输入框
      • uni-pagination 分页器
      • uni-popup 弹出层
      • uni-rate 评分
      • uni-row 布局-行
      • uni-search-bar 搜索栏
      • uni-section 标题栏
      • uni-segmented-control 分段器
      • uni-steps 步骤条
      • uni-swipe-action 滑动操作
      • uni-swiper-dot 轮播图指示点
      • uni-table 表格
      • uni-tag 标签
      • uni-title 章节标题
      • uni-tooltip 文字提示
      • uni-transition 过渡动画
  • 小程序开发
  • uniapp多端开发
  • 扩展组件
scholar
2024-10-21
目录

uni-grid 宫格

组件名:uni-grid

代码块: uGrid

点击下载&安装 (opens new window)

宫格组件。

# 介绍

注意事项

为了避免错误使用,给大家带来不好的开发体验,请在使用组件前仔细阅读下面的注意事项,可以帮你避免一些错误。

  • 删除组件自带圆点角标效果,完全交给用户实现,示例有简单角标效果实现
  • Grid 组件仅在自定义组件模式下支持
  • column 属性最大值最好不要超过 5 个,如果超过,需要注意内容显示
  • 支付宝小程序平台需要在支付宝小程序开发者工具里开启 component2 编译模式,开启方式: 详情 --> 项目配置 --> 启用 component2 编译
  • 为了避免高度显示错误组件内必须要有内容

# 基本用法

<uni-grid :column="3">
	<uni-grid-item>
		<text class="text">文本</text>
	</uni-grid-item>
	<uni-grid-item>
		<text class="text">文本</text>
	</uni-grid-item>
	<uni-grid-item>
		<text class="text">文本</text>
	</uni-grid-item>
</uni-grid>
1
2
3
4
5
6
7
8
9
10
11

# 不带边框并矩形显示

<uni-grid :column="3" :showBorder="false"  :square="false">
	<uni-grid-item>
		<text class="text">文本</text>
	</uni-grid-item>
	<uni-grid-item>
		<text class="text">文本</text>
	</uni-grid-item>
	<uni-grid-item>
		<text class="text">文本</text>
	</uni-grid-item>
	<uni-grid-item>
		<text class="text">文本</text>
	</uni-grid-item>
	<uni-grid-item>
		<text class="text">文本</text>
	</uni-grid-item>
	<uni-grid-item>
		<text class="text">文本</text>
	</uni-grid-item>
</uni-grid>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# API

# Grid Props

uni-grid 属性说明:

属性名 类型 默认值 说明
column Number 3 每列显示个数
borderColor String #d0dee5 边框颜色
showBorder Boolean true 是否显示边框
square Boolean true 是否方形显示
highlight Boolean true 点击背景是否高亮

# Grid Events

事件名 说明 返回值
@change 点击 grid 触发 e={detail:{index:0}},index 为当前点击 grid下标

# GridItem Props

属性名 类型 默认值 说明
index Number - 子组件的唯一标识 ,点击grid会返回当前的标识

# 示例

注意

示例依赖了 uni-card uni-section uni-scss 等多个组件,直接拷贝示例代码将无法正常运行 。

请到 组件下载页面 (opens new window) ,在页面右侧选择 使用 HBuilderX导入示例项目 ,体验完整示例演示 (opens new window)。

    <template>
    	<view class="warp">
    		<uni-card is-full :is-shadow="false">
    			<text class="uni-h6">宫格组件主要使用场景如:商品推荐列表、热门内容等</text>
    		</uni-card>
    		<uni-section title="基础样式" type="line" padding>
    			<uni-grid :column="4" :highlight="true" @change="change">
    				<uni-grid-item v-for="(item, index) in 4" :index="index" :key="index">
    					<view class="grid-item-box" style="background-color: #fff;">
    						<uni-icons type="image" :size="30" color="#777" />
    						<text class="text">文本信息</text>
    					</view>
    				</uni-grid-item>
    			</uni-grid>
    		</uni-section>
    		<uni-section title="自定义列数" type="line" padding>
    			<uni-grid :column="4" :highlight="true" @change="change">
    				<uni-grid-item v-for="(item, index) in 8" :index="index" :key="index">
    					<view class="grid-item-box" style="background-color: #fff;">
    						<uni-icons type="image" :size="30" color="#777" />
    						<text class="text">文本信息</text>
    					</view>
    				</uni-grid-item>
    			</uni-grid>
    		</uni-section>
    
    		<uni-section title="滑动视图" type="line" padding>
    			<!-- 因为swiper特性的关系,请指定swiper的高度 ,swiper的高度并不会被内容撑开-->
    			<swiper class="swiper" :indicator-dots="true">
    				<swiper-item>
    					<uni-grid :column="3" :highlight="true" @change="change">
    						<uni-grid-item v-for="(item, index) in list" :index="index" :key="index">
    							<view class="grid-item-box">
    								<image :src="item.url" class="image" mode="aspectFill" />
    								<text class="text">{{ item.text }}</text>
    							</view>
    						</uni-grid-item>
    					</uni-grid>
    				</swiper-item>
    				<swiper-item>
    					<uni-grid :column="3" :highlight="true" @change="change">
    						<uni-grid-item v-for="(item, index) in list" :index="index" :key="index">
    							<view class="grid-item-box">
    								<image :src="item.url" class="image" mode="aspectFill" />
    								<text class="text">{{ item.text }}</text>
    							</view>
    						</uni-grid-item>
    					</uni-grid>
    				</swiper-item>
    				<swiper-item>
    					<uni-grid :column="3" :highlight="true" @change="change">
    						<uni-grid-item v-for="(item, index) in list" :index="index" :key="index">
    							<view class="grid-item-box">
    								<image :src="item.url" class="image" mode="aspectFill" />
    								<text class="text">{{ item.text }}</text>
    							</view>
    						</uni-grid-item>
    					</uni-grid>
    				</swiper-item>
    			</swiper>
    		</uni-section>
    		<uni-section title="动态加载" type="line" padding>
    			<view class="grid-dynamic-box">
    				<uni-grid :column="3" :highlight="true" @change="change">
    					<uni-grid-item v-for="(item, index) in dynamicList" :index="index" :key="index">
    						<view class="grid-item-box" :style="{'backgroundColor':item.color}">
    							<image :src="item.url" class="image" mode="aspectFill" />
    							<text class="text">{{ item.text }}</text>
    						</view>
    					</uni-grid-item>
    				</uni-grid>
    			</view>
    			<button type="primary" @click="add">点击添加一个宫格</button>
    			<button v-if="dynamicList.length !== 0" type="primary" style="margin-top: 15px;"
    				@click="del">点击删除一个宫格</button>
    		</uni-section>
    		<uni-section title="无边框带角标(3列)" type="line" padding>
    			<uni-grid :column="3" :show-border="false" :square="false" @change="change">
    				<uni-grid-item v-for="(item ,index) in list" :index="index" :key="index">
    					<view class="grid-item-box">
    						<image class="image" :src="item.url" mode="aspectFill" />
    						<text class="text">{{item.text}}</text>
    						<view v-if="item.badge" class="grid-dot">
    							<uni-badge :text="item.badge" :type="item.type" />
    						</view>
    					</view>
    				</uni-grid-item>
    			</uni-grid>
    		</uni-section>
    		<uni-section title="矩形宫格(3列)" type="line" padding>
    			<uni-grid :column="3" :square="false" :highlight="false" @change="change">
    				<uni-grid-item v-for="(item, index) in list" :index="index" :key="index">
    					<view class="grid-item-box">
    						<image :src="item.url" class="image" mode="aspectFill" />
    						<text class="text">{{ item.text }}</text>
    					</view>
    				</uni-grid-item>
    			</uni-grid>
    		</uni-section>
    		<uni-section title="边框颜色(4列 无文字)" type="line" padding>
    			<uni-grid :column="4" border-color="#03a9f4" @change="change">
    				<uni-grid-item :index="0">
    					<view class="grid-item-box">
    						<image class="image" src="/static/c1.png" mode="aspectFill" />
    					</view>
    				</uni-grid-item>
    				<uni-grid-item :index="1">
    					<view class="grid-item-box">
    						<image class="image" src="/static/c2.png" mode="aspectFill" />
    					</view>
    				</uni-grid-item>
    				<uni-grid-item :index="2">
    					<view class="grid-item-box">
    						<image class="image" src="/static/c3.png" mode="aspectFill" />
    					</view>
    				</uni-grid-item>
    				<uni-grid-item :index="3">
    					<view class="grid-item-box">
    						<image class="image" src="/static/c4.png" mode="aspectFill" />
    					</view>
    				</uni-grid-item>
    			</uni-grid>
    		</uni-section>
    	</view>
    </template>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    <script>
    	export default {
    		components: {},
    		data() {
    			return {
    				dynamicList: [],
    				list: [{
    						url: '/static/c1.png',
    						text: 'Grid 1',
    						badge: '0',
    						type: "primary"
    					},
    					{
    						url: '/static/c2.png',
    						text: 'Grid 2',
    						badge: '1',
    						type: "success"
    					},
    					{
    						url: '/static/c3.png',
    						text: 'Grid 3',
    						badge: '99',
    						type: "warning"
    					},
    					{
    						url: '/static/c4.png',
    						text: 'Grid 4',
    						badge: '2',
    						type: "error"
    					},
    					{
    						url: '/static/c5.png',
    						text: 'Grid 5'
    					},
    					{
    						url: '/static/c6.png',
    						text: 'Grid 6'
    					},
    					{
    						url: '/static/c7.png',
    						text: 'Grid 7'
    					},
    					{
    						url: '/static/c8.png',
    						text: 'Grid 8'
    					},
    					{
    						url: '/static/c9.png',
    						text: 'Grid 9'
    					}
    				]
    			}
    		},
    		methods: {
    			change(e) {
    				let {
    					index
    				} = e.detail
    				this.list[index].badge && this.list[index].badge++
    
    				uni.showToast({
    					title: `点击第${index+1}个宫格`,
    					icon: 'none'
    				})
    			},
    			add() {
    				if (this.dynamicList.length < 9) {
    					this.dynamicList.push({
    						url: `/static/c${this.dynamicList.length+1}.png`,
    						text: `Grid ${this.dynamicList.length+1}`,
    						color: this.dynamicList.length % 2 === 0 ? '#f5f5f5' : "#fff"
    					})
    				} else {
    					uni.showToast({
    						title: '最多添加9个',
    						icon: 'none'
    					});
    				}
    			},
    			del() {
    				this.dynamicList.splice(this.dynamicList.length - 1, 1)
    			}
    		}
    	}
    </script>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    <style lang="scss">
    	.image {
    		width: 25px;
    		height: 25px;
    	}
    
    	.text {
    		font-size: 14px;
    		margin-top: 5px;
    	}
    
    	.example-body {
    		/* #ifndef APP-NVUE */
    		// display: block;
    		/* #endif */
    	}
    
    	.grid-dynamic-box {
    		margin-bottom: 15px;
    	}
    
    	.grid-item-box {
    		flex: 1;
    		// position: relative;
    		/* #ifndef APP-NVUE */
    		display: flex;
    		/* #endif */
    		flex-direction: column;
    		align-items: center;
    		justify-content: center;
    		padding: 15px 0;
    	}
    
    	.grid-item-box-row {
    		flex: 1;
    		// position: relative;
    		/* #ifndef APP-NVUE */
    		display: flex;
    		/* #endif */
    		flex-direction: row;
    		align-items: center;
    		justify-content: center;
    		padding: 15px 0;
    	}
    
    	.grid-dot {
    		position: absolute;
    		top: 5px;
    		right: 15px;
    	}
    
    	.swiper {
    		height: 420px;
    	}
    
    	/* #ifdef H5 */
    	@media screen and (min-width: 768px) and (max-width: 1425px) {
    		.swiper {
    			height: 630px;
    		}
    	}
    
    	@media screen and (min-width: 1425px) {
    		.swiper {
    			height: 830px;
    		}
    	}
    
    	/* #endif */
    </style>
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    // Make sure to add code blocks to your code group
    编辑此页 (opens new window)
    上次更新: 2025/02/03, 00:09:13
    uni-goods-nav 商品导航
    uni-group 分组

    ← uni-goods-nav 商品导航 uni-group 分组→

    Theme by Vdoing | Copyright © 2019-2025 程序员scholar
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式