当前位置: 首页 > news >正文

使用uniapp.pageScrollTo方法进行页面滚动

先看看是不是你想要的:

需求:

有个填写数据的单子在提交的时候,会对必填项做校验,如果必填项没有数据的话,必填项校验生效给出提示,并且页面滚动到第一个需要填写数据的地方。

开发:

因为这个需求是后续增加的,那也不可能改变样式结构,那就在原来的基础上去写吧!

首先想到是用uniapp的内置方法pageScrollTo,这个方法可以让页面滚动到指定的位置,比较合适。

开始上手:

使用的vue3+js写法:

uni.pageScrollTo的参数:

selector使用子元素选择器:(在第二个view标签增加scrlloClass、第三个view标签增加scrollClass1类名)

  • 子元素选择器:.the-parent > .the-child

上代码:

const submit = () => {
// form表单绑定的是ref="form",因此使用使用form.value.validate方法对表单进行校验form.value.validate().then(res => {// 成功后的执行方法,即必填项都已经填写了}).catch(err => {// 失败后的方法,即有必填项没有填写// 输出的是必填项未填写的数据信息console.log('err', err);// 上图中的form表单是有三个view标签,每个view标签中有多个uv-form-item标签,list数组是将第二个和第三个view标签的必填项(每个form-item标签上prop的字段)列举下来let list = ["a", 'b', "c", "d", "e", "f", "g", "h"]// 设置标签滚动位置let scrollNum = undefined// scrollObj是uni.pageScrollTo方法的参数,本文一共涉及到下面三个选项let scrollObj = {// scrollTop: 0, // 指定滚动到离顶部的距离// duration: 500, // 滚动动画的时长// selector: `.scrollClass > .uv-form-item:nth-child(${scrollNum})` // 指定滚动的元素duration: 500,}// 先判断未填写的必填项中是否有name字段,没有的话接着走if (err[0].field !== 'name') {try { // 使用try catch中断forEach循环list.forEach((e, i) => {console.log('中断forEach');if (e === err[0].field) {scrollNum = i + 1 // 指定标签元素(nth-child是从1开始)throw e // 抛给catch}})} catch (e) {scrollObj.selector = `.scrollClass > .uv-form-item:nth-child(${scrollNum})`if (e === 'name') {// 上图中的form表单是有三个view标签,给第三个form-item标签增加一个scrollClass1类名scrollObj.selector = `.scrollClass1 > .uv-form-item:nth-child(1)`}}console.log('scrollNum', scrollNum);} else {// 有name字段的话,将scrollTop设置为0,及滚动到页面顶部(第一个view标签,见gif动图的第一块区域)scrollObj.scrollTop = 0}uni.pageScrollTo(scrollObj);})}

问题解决无非就是获取必填项未填写的数组(下文称为arr),及validate方法的catch方法中的err,将必填项的字段标识放到一个新数组里面,拿到arr的第一项的field(第一个必填项的字段的标识),循环新数组,如果新数组每一项和arr的第一项的field相等的话,拿到该项索引,索引加1,用于确定滚动到该标签。

http://www.lryc.cn/news/388403.html

相关文章:

  • 寒武纪实现高维向量的softmax进阶优化和库函数对比
  • 我的世界服务器-高版本服务器-MC服务器-生存服务器-RPG服务器-幻世星辰
  • 倒装COB显示屏与传统SMD显示屏安装方式有哪些不同?
  • elasticsearch重置密码
  • 微信小程序写一个可以滚动虚拟列表(瀑布流),减少dom渲染的优化,解决内存问题。
  • 人工与智能系统之间的交互方式
  • 【运维】如何在Ubuntu中设置一个内存守护进程来确保内存不会溢出
  • 调用基类的纯虚函数,如何知道纯虚函数会调用哪个派生类(子类)中的实现。
  • 塑造卓越企业家IP:多维度视角下的策略解析
  • Rust 跨平台-Android 和鸿蒙 OS
  • Typora导出为Word
  • 数据库被后台爆破如何解决?
  • php7.4源码安装dbase7.1.1扩展
  • OkHttp的源码解读1
  • 08:结构体
  • 喜讯!安全狗荣获“2023年网络安全技术支撑优秀单位”称号
  • android里面json操作
  • MATLAB的.m文件与Python的.py文件:比较与互参
  • 武汉星起航:自运营团队精准把握亚马逊红利,引领跨境电商新潮流
  • 嵌入式计算器模块实现
  • tomcat定时重启
  • 构建LangChain应用程序的示例代码:48、如何使用非文本生成工具创建多模态代理
  • 【笔记】记录一次全新的Java项目部署过程
  • 达梦数据库系列—14. 表空间的备份和还原
  • 奔驰G350升级原厂自适应悬挂系统有哪些作用
  • 一个启动脚本例子
  • grpc学习golang版( 六、服务器流式传输 )
  • ubuntu语音库ALSA报错具体原因
  • Java高级重点知识点-17-异常
  • DM达梦数据库函数分析(与mysql对应函数区别及用法分析)