全局UI方法-弹窗三-文本滑动选择器弹窗(TextPickDialog)

文章介绍了如何在应用中创建TextPickerDialog文本选择器,包括其接口、参数配置(如选择范围、默认选中项、回调函数等),并提供了示例代码展示了如何在不同场景下使用这个组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、描述

        根据指定的选择范围创建文本选择器,展示在弹窗上。

2、接口

        TextPickDialog(options?: TextPickDialogOptions)

3、TextPickDialogOptions

参数名称

参数类型

必填

参数描述

rang

string[] | Resource

设置文本选择器的选择范围。

selected

number

设置选中项的索引值。默认值:0。

valuestring设置选中项的文本内容。当设置了selected参数时,该参数不生效。如果设置的value值不在range范围内,则默认去range第一个元素。
DefaultPickItemHeightnumber | string设置选择器中选项的高度。
onAccept(value : TextPickResult) => void点击弹窗中“确定”按钮时触发该回调。
onCancel() => void点击弹窗中“取消”按钮时触发该回调。
onChange(value : TextPickResult) => void滑动弹窗中的选择器使当前选中项改变时触发该回调。

4、TextPickerResult对象说明

类型

描述

value

string

选中项的文本内容。

index

number

选中项在选择范围数组中的索引值。

5、参数解析

1.当selected和value参数都设置时,且selecetd设置值在范围内时,value参数无效。

2.当不设置selected参数时,并且设置的value值不在range范围内时,显示的是默认的range的第一个元素。

3.根据onAccept和onChange监听或者确定选中项的数据信息。

6、示例

@Entry
@Component
struct TextPickerDialogPage {
  @State message: string = '根据指定的选择范围创建文本选择器,展示在弹窗上。'
  private defaultSelectIndex: number = 2; // 默认选中项索引值
  private developList: string[] = ['Android', 'IOS', 'Java', 'ArkTS', 'ArkUI-X', 'Python', 'TypeScript', 'Vue', 'HarmonyOS']; // 弹窗选项列表

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(20)
          .fontWeight(FontWeight.Bold)
          .width("96%")
          .margin({ top: 12 })

        Button("TextPickerDialog.show Default")
          .width("96%")
          .fontSize(20)
          .margin({ top: 12 })
          .onClick(() => {
            TextPickerDialog.show({
              range: this.developList,
              onAccept: (result: TextPickerResult) => {
                console.info("TextPickerDialog Default onAccept result = " + JSON.stringify(result));
              },
              onCancel: () => {
                console.info("TextPickerDialog Default onCancel");
              },
              onChange: (result: TextPickerResult) => {
                console.info("TextPickerDialog Default onChange result = " + JSON.stringify(result));
              }
            })
          })

        Button("TextPickerDialog.show Selected")
          .width("96%")
          .fontSize(20)
          .margin({ top: 12 })
          .onClick(() => {
            TextPickerDialog.show({
              range: this.developList,
              selected: this.defaultSelectIndex,
              value: "Vue", // 当设置selected参数时,value参数会失效
              defaultPickerItemHeight: 60,
              onAccept: (result: TextPickerResult) => {
                console.info("TextPickerDialog Selected onAccept result = " + JSON.stringify(result));
              },
              onCancel: () => {
                console.info("TextPickerDialog Selected onCancel");
              },
              onChange: (result: TextPickerResult) => {
                console.info("TextPickerDialog Selected onChange result = " + JSON.stringify(result));
              }

            })
          })

      }
      .width('100%')
      .height("100%")
    }
    .height('100%')
  }
}

7、效果图

### element-ui el-date-picker 固定打开时间选择弹窗解决方案 为了确保 `el-date-picker` 的弹出框不会因页面滚动而错位,可以在组件属性中设置特定参数来控制其行为。具体来说,在使用 `el-date-picker` 组件时遇到滚动条导致的选择器位置偏移问题可以通过调整组件的挂载方式解决。 通过设定 `:append-to-body="true"` 属性可以让弹出的日历面板附加到 body 上而不是默认容器内,从而避免随父级元素移动造成的位置偏差[^2]: ```html <el-date-picker v-model="value" type="date" placeholder="选择日期" :append-to-body="true"> </el-date-picker> ``` 然而,如果希望进一步增强稳定性并防止弹窗关闭,则需考虑其他配置选项或自定义逻辑处理。对于保持弹窗始终处于可见状态的需求,通常的做法是在触发事件后手动管理 visible 状态,并配合 CSS 样式锁定背景滚动等功能实现更佳用户体验。 另外值得注意的是,当在模态对话框或其他浮动层内部部署 `el-date-picker` 时,可能还需要额外关注层级关系以及遮罩层的影响,以确保最佳交互效果[^3]。 #### 自动化固定弹窗实例代码展示 下面是一个简单的 Vue.js 实现例子,展示了如何利用 JavaScript 和样式表组合起来达到预期目的: ```javascript // 定义方法用于阻止默认滚屏动作 methods: { preventScroll(event){ event.preventDefault(); } } ``` ```css /* 添加全局样式 */ body.no-scroll{ overflow:hidden; } /* 针对 date picker 特殊定制 */ .el-popper.is-customized .popper__arrow::after, .el-popper.is-customized .popper__arrow { display:none !important; } ``` ```html <!-- 使用指令绑定 class --> <div @touchmove.prevent @mousewheel.prevent> <el-button @click="visible=true;$nextTick(()=>document.body.classList.add('no-scroll'))">点击开启日历</el-button> <!-- 设置 append-to-body 并监听显示隐藏变化 --> <el-date-picker ref="pickerRef" v-model="selectedDate" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-value="[new Date(), new Date()]" :append-to-body="true" :visible.sync="visible" @hide="$nextTick(()=>document.body.classList.remove('no-scroll'))" > </el-date-picker> </div> ``` 上述代码片段实现了点击按钮后强制使浏览器窗口无法上下滑动的效果,同时让日期选择器始终保持在屏幕上指定区域不被遮挡。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

yyxhzdm

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

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

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

打赏作者

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

抵扣说明:

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

余额充值