程序员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多端开发

    • 快速入门

    • 内置组件

      • 视图容器

      • 基础内容

      • 表单组件

        • 按钮组件
        • 复选框组件
        • 富文本编辑器组件
        • 表单组件
        • 输入框组件
        • 标签组件
        • 选择器组件
        • 嵌入式选择器组件
          • 1. 什么是 picker-view 组件?
          • 2. picker-view 组件的常用属性
            • 2.1 滚动选择和显示样式
            • 2.2 中间选中框样式 indicator-style
          • 3. 日期选择器使用
        • 单选按钮组组件
        • 滑块选择器组件
        • 开关组件
        • 多行输入框组件
      • 路由页面跳转

      • 媒体组件

      • 地图

      • 画布

      • 网页嵌入

      • 页面属性配置节点

      • nvue组件

      • 小程序组件

    • 扩展组件

  • 小程序开发
  • uniapp多端开发
  • 内置组件
  • 表单组件
scholar
2024-10-21
目录

嵌入式选择器组件

# 嵌入式选择器组件

picker-view 是 Uniapp 中的嵌入页面的滚动选择器,提供了相较于 picker 更为灵活的选择方式。picker-view 支持自定义的 UI 和弹出方式,因此适用于需要更复杂选择器交互的场景。picker-view 常用于时间、日期等需要联动选择的场景,同时可以与 picker-view-column 组件一起使用,完成多列选择功能。

# 1. 什么是 picker-view 组件?

picker-view 是嵌入页面的滚动选择器,相比于弹出式的 picker 组件,它能更好地控制 UI 展现和自定义交互。它常用于需要多列或多项联动选择的场景,例如日期选择、时间选择等。picker-view 组件通过组合 picker-view-column 组件,实现类似原生选择器的功能。

使用场景

  • 日期选择:例如选择年、月、日,日期选择器通过 picker-view-column 分别提供三列数据,并且联动更新。
  • 时间选择:小时、分钟等时间选择也可通过 picker-view 实现。
  • 自定义选择器:当需要滚动选择多个不同维度的数据时,可以使用 picker-view 来自定义选项内容。

# 2. picker-view 组件的常用属性

picker-view 组件提供了多种属性,允许开发者定制选择器的展示样式和行为。下面是 picker-view 常用属性的详细说明和示例代码:

属性名 类型 默认值 说明
value Array<Number> 每列所选项的下标,数组中的数字依次表示 picker-view-column 选择的第几项(下标从 0 开始)。 数字大于 picker-view-column 可选项长度时,选择最后一项。
indicator-style String 设置选中框的样式 通过 CSS 样式字符串自定义选中框样式。
indicator-class String 设置选中框的类名,适配自定义样式 支持通过类名自定义选中框样式,使用 scoped 时需要 /deep/。
mask-style String 设置蒙层的样式 设置覆盖 picker-view 组件的遮罩层样式。
mask-class String 设置蒙层的类名 设置覆盖 picker-view 组件的遮罩层的类名。
immediate-change Boolean false 是否在手指松开时立即触发 change 事件,若不开启则会在滚动动画结束后触发 change 事件。
@change EventHandle 滚动选择,value 改变时触发 change 事件,event.detail.value 为数组,表示选择的各列的当前值。 用于处理选择变动的事件。
@pickstart EventHandle 滚动选择开始时触发 滚动选择的开始事件。
@pickend EventHandle 滚动选择结束时触发 滚动选择的结束事件。

# 2.1 滚动选择和显示样式

  • 说明:设置滚动选择器的初始值,并通过 value 属性控制每列选择的初始下标。
  • 类型:Array<Number>
<template>
  <view>
    <!-- 选择器展示,初始选中年份、月份、日期 -->
    <picker-view :value="value" @change="bindChange" class="picker-view">
      <!-- 年份选择列 -->
      <picker-view-column>
        <view class="item" v-for="(item, index) in years" :key="index">{{ item }}年</view>
      </picker-view-column>
      <!-- 月份选择列 -->
      <picker-view-column>
        <view class="item" v-for="(item, index) in months" :key="index">{{ item }}月</view>
      </picker-view-column>
      <!-- 日期选择列 -->
      <picker-view-column>
        <view class="item" v-for="(item, index) in days" :key="index">{{ item }}日</view>
      </picker-view-column>
    </picker-view>
  </view>
</template>

<script setup>
// 初始化数据
const years = Array.from({ length: 31 }, (_, i) => 1990 + i);
const months = Array.from({ length: 12 }, (_, i) => i + 1);
const days = Array.from({ length: 31 }, (_, i) => i + 1);

// 初始选中项(1999年, 5月, 20日)
const value = [9, 4, 19];

// 选择变更处理函数
const bindChange = (e) => {
  const val = e.detail.value;
  console.log("当前选择的年份、月份和日期分别是:", years[val[0]], months[val[1]], days[val[2]]);
};
</script>

<style scoped>
.picker-view {
  width: 750rpx;
  height: 600rpx;
}

.item {
  line-height: 100rpx;
  text-align: center;
}
</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

# 2.2 中间选中框样式 indicator-style

  • 说明:设置 picker-view 中间选中框的样式。
  • 类型:String
<template>
  <view>
    <!-- 带有自定义样式的 picker-view -->
    <picker-view :value="value" :indicator-style="'height: 50px; background-color: lightblue;'" class="picker-view">
      <picker-view-column>
        <view class="item" v-for="(item, index) in years" :key="index">{{ item }}年</view>
      </picker-view-column>
    </picker-view>
  </view>
</template>
1
2
3
4
5
6
7
8
9
10

# 3. 日期选择器使用

以下案例展示了 picker-view 的日期选择应用,涵盖了选择年份、月份、日期,并实时更新选择结果。

<template>
  <view>
    <!-- 展示选择的日期 -->
    <view class="uni-padding-wrap">
      <view class="uni-title">日期:{{ year }}年{{ month }}月{{ day }}日</view>
    </view>

    <!-- 日期选择器 -->
    <picker-view :value="value" @change="bindChange" class="picker-view" :indicator-style="'height: 50px;'">
      <picker-view-column>
        <view class="item" v-for="(item, index) in years" :key="index">{{ item }}年</view>
      </picker-view-column>
      <picker-view-column>
        <view class="item" v-for="(item, index) in months" :key="index">{{ item }}月</view>
      </picker-view-column>
      <picker-view-column>
        <view class="item" v-for="(item, index) in days" :key="index">{{ item }}日</view>
      </picker-view-column>
    </picker-view>
  </view>
</template>

<script setup>
import { ref } from 'vue';

// 初始化年份、月份、日期数据
const date = new Date();
const years = Array.from({ length: 31 }, (_, i) => 1990 + i);
const months = Array.from({ length: 12 }, (_, i) => i + 1);
const days = Array.from({ length: 31 }, (_, i) => i + 1);

// 初始化当前选中日期
const value = ref([30, date.getMonth(), date.getDate() - 1]);
const year = ref(years[value.value[0]]);
const month = ref(months[value.value[1]]);
const day = ref(days[value.value[2]]);

// 选择变更处理函数
const bindChange = (e) => {
  const val = e.detail.value;
  year.value = years[val[0]];
  month.value = months[val[1]];
  day.value = days[val[2]];
};
</script>

<style scoped>
.picker-view {
  width: 750rpx;
  height: 600rpx;
  margin-top: 20rpx;
}

.item {
  line-height: 100rpx;
  text-align: center;
}
</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

image-20241021025501762

编辑此页 (opens new window)
上次更新: 2025/02/01, 02:18:15
选择器组件
单选按钮组组件

← 选择器组件 单选按钮组组件→

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