uni-app怎么做App引导页跳过功能 uni-app启动页倒计时实现【代码】

落强吖_5066

落强吖_5066

2026-03-28

542人浏览

原创

uni-app启动页加「跳过」按钮需在首页onLoad中调用uni.hideSplashScreen()后立即显示全屏遮罩,绑定点击跳转逻辑,并用requestAnimationFrame实现不卡顿倒计时;状态通过uni.getStorageSync在onLaunch读取并全局注入,且仅限app-plus平台生效。

uni-app怎么做app引导页跳过功能 uni-app启动页倒计时实现【代码】

uni-app 启动页怎么加「跳过」按钮

启动页(splash)本身是原生层渲染的,pages.json 里配的 splashscreen 不支持加按钮或交互。所谓“跳过”,实际是在启动页隐藏后、首屏页面加载前,用一个全屏遮罩模拟引导页,并提供跳过逻辑。

关键点:不能在 onLaunch 里直接 show 遮罩,因为此时页面还没 ready;必须等首屏 onLoad 触发后、uni.hideSplashScreen() 完成再处理。

  • 在首页 onLoad 中调用 uni.hideSplashScreen(),并立即 uni.showLoading({ mask: true }) 或自定义遮罩组件
  • 遮罩层用 position: fixed; top: 0; left: 0; width: 100%; height: 100% 覆盖整个视口
  • 「跳过」按钮绑定 @click="skip",内部执行 uni.switchTab({ url: '/pages/tab1/tab1' }) 或 uni.navigateTo({ url: '/pages/home/home' })
  • 别忘了在 onShow 或定时器结束后自动跳转,否则用户不点就卡住

uni-app 倒计时跳转怎么写才不卡顿

倒计时如果放在 setInterval 里直接改 data,频繁触发 setData 会导致 iOS 下卡顿甚至白屏。uni-app 的 setData 是异步跨端通信,每秒 10 次更新就是 10 次 JS → Native 调用。

正确做法是只在倒计时结束时更新一次 UI,过程中用 CSS 动画或 canvas 渲染倒计时数字,或者用 requestAnimationFrame 控制节奏。

  • 用 let timer = null + clearTimeout(timer) 管理倒计时,避免重复启动
  • 倒计时变量建议用 ref(Vue 3)或 data 中单个字段(如 countdown: 3),不要绑定复杂对象
  • 显示层用 v-if="countdown > 0" 控制「跳过」按钮文案,比如 跳过 ({{countdown}})
  • 注意安卓和 iOS 对 setTimeout 最小间隔的差异,低于 16ms 可能被合并,倒计时不准优先用 requestAnimationFrame

uni.hideSplashScreen() 调用时机不对会怎样

调用太早(比如 onLaunch 里)会报错 hideSplashScreen:fail splash screen is not showing;调用太晚(比如首页 onReady 之后)会导致启动页卡住不动,用户以为 App 崩了。

官方文档没说清楚,但实测:必须在首页 onLoad 第一行调用,且不能包裹在 setTimeout 或异步回调里。

  • 确保 pages.json 中 "splashscreen": { "alwaysShowBeforeRender": true } 已开启(默认 true)
  • 如果用了自定义原生启动图(iOS LaunchScreen.storyboard / Android drawable),uni.hideSplashScreen() 无效,必须走原生插件或改用 webview 层模拟
  • 真机调试时,HBuilderX 的「运行到手机」可能跳过 splash,要打正式包测试
  • 部分低端安卓机 hide 后有白屏闪动,可在 hide 前先 uni.showLoading({ mask: true }) 过渡

App 引导页「跳过」状态怎么持久化

用户点了一次跳过,下次启动不该再出现。但不能只存 localStorage,因为 App 冷启动时 localStorage 还没初始化完,首页可能已经渲染完毕。

可靠方式是用 uni.getStorageSync 在 onLaunch 就读取标记,然后通过全局变量或 Vuex/Pinia 注入首页,控制是否显示遮罩。

  • 首次安装后,在跳过逻辑里执行 uni.setStorageSync('guide_skipped', true)
  • onLaunch 中读取:const skipped = uni.getStorageSync('guide_skipped') === true,存到 globalData 或 Pinia state
  • 首页 onLoad 先判断 getApp().globalData.guideSkipped,为 true 就跳过遮罩逻辑
  • 别用 uni.setStorage(异步),冷启动时它还没写完,getStorageSync 就读不到

最易忽略的是多端一致性:微信小程序没有 splashscreen,H5 更没有,这个逻辑得用 process.env.UNI_PLATFORM === 'app-plus' 包一层,不然上线后 H5 页面会多出奇怪的跳过按钮。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2683

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

5823

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6810

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

6518

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

923

5

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

80

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

40

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

40

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

20

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习