需求背景
开屏倒计时的使用场景比较广泛,例如可以用于预告即将发布的新内容,这种预告方式能够激发用户的兴趣,提高内容的关注度和点击率,也可以作为一种宣传手段,吸引用户的注意力并增强活动的吸引力。
实现思路
实现倒计时
1. 在编辑器中构建实现场景,大纲树中的两个普通容器分别代表首页内容和开屏图片,代码区的变量
remainingSeconds
代表倒计时秒数,javascript
方法 setInterval
实现倒计时逻辑。![](https://qcloudimg.tencent-cloud.cn/image/document/f07bf1489f161f8ee81d8e514f3eafb1.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/f07bf1489f161f8ee81d8e514f3eafb1.png)
2. 更改普通容器命名,使大纲书结构更加清晰。
![](https://qcloudimg.tencent-cloud.cn/image/document/c9d1f277b90cc376609ef83e9a067107.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/c9d1f277b90cc376609ef83e9a067107.png)
3. 开屏图片全屏样式设置,图片布局模式选择拉伸填满,css 自定义
wdith:100%;height:100vh
。![](https://qcloudimg.tencent-cloud.cn/image/document/a0e61826777b9b2eb444b8d989422f13.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/a0e61826777b9b2eb444b8d989422f13.png)
4. 文本-倒计时设置定位样式以及绑定变量
remainingSeconds
。4.1 定位选择绝对,位置距离如下。
![](https://qcloudimg.tencent-cloud.cn/image/document/fe1ea5d8f24f87b51e319d0485092bc3.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/fe1ea5d8f24f87b51e319d0485092bc3.png)
4.2 文本内容绑定表达式。
![](https://qcloudimg.tencent-cloud.cn/image/document/e1d3c92e0c01cc427b6d3cd3c27b46e6.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/e1d3c92e0c01cc427b6d3cd3c27b46e6.png)
5. 文本-跳过设置背景颜色以及定位方式。
![](https://qcloudimg.tencent-cloud.cn/image/document/9ff9f602637d1083eb97ad9ea3e5a1ab.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/9ff9f602637d1083eb97ad9ea3e5a1ab.png)
说明:
倒计时变量
remainingSeconds
为数字类型,默认值是5(以倒计时5秒为例)。6. 自定义 js 方法
setInterval
实现倒计时逻辑,代码中的 setInterval(updateCountdown, 1000)
,setInterval
为 js 方法,用于周期性地执行指定的函数或代码片段,后面参数1000代表1秒执行一次。![](https://qcloudimg.tencent-cloud.cn/image/document/3f93982c895b7142b34a5abc194128e7.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/3f93982c895b7142b34a5abc194128e7.png)
代码展示:
export default function({event, data}) {let remainingSeconds = $w.page.dataset.state.remainingSeconds;function updateCountdown() {console.log(`倒计时: ${remainingSeconds} 秒`);if (remainingSeconds > 0) {remainingSeconds -= 1;$w.page.dataset.state.remainingSeconds=remainingSeconds} else {console.log('倒计时结束');clearInterval(interval);}}updateCountdown();const interval = setInterval(updateCountdown, 1000);//setInterval为js方法,用于周期性地执行指定的函数或代码片段,}
7. 页面加载事件绑定倒计时方法。
![](https://qcloudimg.tencent-cloud.cn/image/document/a82defa6a03fe0da8e1a84dd856d48c9.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/a82defa6a03fe0da8e1a84dd856d48c9.png)
选择
setInterval
方法,并保存。![](https://qcloudimg.tencent-cloud.cn/image/document/5586a8ec86d293ac5a1eec993705f779.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/5586a8ec86d293ac5a1eec993705f779.png)
8. 设置普通容器-首页和普通容器-开屏的动态显隐。
普通容器-首页:
$w.If($w.page.dataset.state.remainingSeconds<1, true, false)
表示倒计时为0秒的时候,则显示首页内容,隐藏开屏内容。普通容器-开屏:
$w.If($w.page.dataset.state.remainingSeconds>=1, true, false)
表示倒计时为大于或等于1秒的时候,则显示开屏内容,隐藏首页内容。![](https://qcloudimg.tencent-cloud.cn/image/document/9bc15698e348b175ebc80631c193da9f.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/9bc15698e348b175ebc80631c193da9f.png)
9. 开屏倒计时效果展示。
![](https://qcloudimg.tencent-cloud.cn/image/document/81643c3746a1e7228a670a14b03f15b6.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/81643c3746a1e7228a670a14b03f15b6.png)
实现倒计时跳过
1. 新建布尔值变量 isClear,默认值 false,用来承载用户是否点击跳过的状态值。
![](https://qcloudimg.tencent-cloud.cn/image/document/09858f41b22c55d90d918fbc950efd25.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/09858f41b22c55d90d918fbc950efd25.png)
2. 跳过事件执行变量赋值。
![](https://qcloudimg.tencent-cloud.cn/image/document/e9618836ad218f4ad6480846ba1cafdb.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/e9618836ad218f4ad6480846ba1cafdb.png)
3. js 方法
setIntval
增加清除定时器逻辑。![](https://qcloudimg.tencent-cloud.cn/image/document/b7f52481992d78d7926f3a2929d314ba.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/b7f52481992d78d7926f3a2929d314ba.png)
export default function ({ event, data }) {let remainingSeconds = $w.page.dataset.state.remainingSeconds;function updateCountdown() {console.log(`倒计时: ${remainingSeconds} 秒`);if (remainingSeconds > 0) {//点击跳过,则清除定时器if ($w.page.dataset.state.isClear) {clearInterval(interval)console.log("已清除定时器");}remainingSeconds -= 1;$w.page.dataset.state.remainingSeconds = remainingSeconds} else {//console.log('倒计时结束');clearInterval(interval);}}updateCountdown();const interval = setInterval(updateCountdown, 1000);}
4. 普通容器-首页和普通容器显隐需要判断定时器状态。
4.1 定时器如果已经清除,说明点击了跳过,则直接展示首页内容。
![](https://qcloudimg.tencent-cloud.cn/image/document/bf20feb0266e19170217cf9ab5ca2f09.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/bf20feb0266e19170217cf9ab5ca2f09.png)
4.2 定时器没有被清除,正常倒计时。
![](https://qcloudimg.tencent-cloud.cn/image/document/72da7a568dbc3df3d437740fddd92c87.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/72da7a568dbc3df3d437740fddd92c87.png)
5. 倒计时过程中,单击跳过会直接展示首页内容。
![](https://qcloudimg.tencent-cloud.cn/image/document/95ec80538a4d9d42f38a1478a3dac58c.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/95ec80538a4d9d42f38a1478a3dac58c.png)