微信小程序(五十二)开屏页面效果

news2025/1/20 22:35:49

注释很详细,直接上代码

上一篇

新增内容:
1.使用控件模拟开屏界面
2.倒计时逻辑
3.布局方法
4.TabBar隐藏复现

源码:

components/openPage/openPage.wxml

<view class="openPage-box">
  <image src="{{imagePath}}" mode="aspectFill"></image>
  <view class="openPage-header">
    <!-- 跳过按钮 -->
    <view class="openPage-btn" bindtap="skipOpenPage">跳过 {{second}}s</view>
  </view>
  <!-- 创意指导:拼夕夕 -->
  <view class="openPage-gif">
      <image src="{{gifUrl}}" mode="aspectFill"/>
  </view>
</view>


components/openPage/openPage.wxss

/* 切记:最外面的盒子不能直接用百分之的形式 */
.openPage-box {
  width: 100vh;
  height: 100vh;
}

.openPage-box>image {
  width: 100%;
  height: 100%;
}

/* 因为图片已经占据了所有位置,而我们需要让按钮悬浮在图片左上角,
所以需要使用absolute */
.openPage-header {
  position: absolute; 
  left:40rpx;
  top: 80rpx;
}

.openPage-btn {
  font-size: 20px;/* 调大点提高用户舒适度,你也不想有被开屏广告支配的感觉吧 */
  color: white;
  border: 1px solid white;
  padding: 2px 5px;
  border-radius: 12px;
}


.openPage-gif{
  position: absolute;
  left: 30%;
  top: 40%;
}

.openPage-gif>image{
  width: 300rpx;
  height: 300rpx;
}

components/openPage/openPage.js

Component({
  /**
   * 组件的属性列表
   */
  properties: {//传入的数据
    imagePath: {
      type: String
    },
    second: {
      type: Number
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    gifUrl:'https://wimg.588ku.com/gif620/21/09/23/e14212e58c7e5da94ef8fca48ecd202e.gif',
    timer: null
  },

  lifetimes: {
    created: function () {
     
    },
    attached: function () {
      //在JavaScript中,this关键字的指向是动态的,取决于函数的调用方式。
      //比如普通调用方式里面的this则是这个函数,箭头函数则指的是外面的
      //如果里面不需要调用该函数这个this对象而只是需要访问外面的this对象则可以使用箭头函数
      //在某些情况下,为了在回调函数或异步操作中能够访问到外部的this对象并且访问这个函数的this对象,
      //可以将外部的this对象赋值给一个变量,通常命名为that或self
      let that = this;

      //timer是一个表示定时器的变量,其类型是number
      //在JavaScript中,setInterval函数会返回一个唯一的定时器标识符,
      //可以通过这个标识符来清除定时器,即使用clearInterval(timer)来停止定时器的执行
      const timer = setInterval(function () {//因为这个地方相当于嵌套了一层
        let nowSecond = --(that.data.second);//时间自减1
        console.log(nowSecond);

        if (nowSecond <= 0) {//计时到0则关闭开屏控件
          clearInterval(timer);//关闭计时器
          that.hideOpenPage();//隐藏开屏页面
        }
       
        that.setData({//赋值当前秒数(触发视图更新)
          second: nowSecond,//将计时器变量赋值给页面变量timer,方便在其他函数内关闭该计时器
          timer: timer
        });
      }, 1000);//延时1s

    }
  },

  /**
   * 组件的方法列表
   */
  methods: {
    //隐藏开屏控件
    hideOpenPage: function () {
      //触发hide的事件,在`index.wxml`内容里面设置了bind:hide="onMyEvent",
      //则调用`index.js`里面的onMyEvent方法
      this.triggerEvent("hide");
    },
    //跳过开屏页面
    skipOpenPage: function () {
      this.hideOpenPage();//先隐藏开屏控件
      let timer = this.data.timer;//获取计时器变量
      if (timer) {//避免计时器还没初始化但用户已经点击跳过的情况(感觉只有yyds的李跳跳才能做到了)
        clearInterval(timer);//关闭计时器
      }
    }
  }
})

components/openPage/openPage.json

{
  "component": true,
  "usingComponents": {}
}

index.wxml

<openPage wx:if="{{openPageFlag}}" imagePath="{{url}}" second="{{5}}" bind:hide="onMyEvent"></openPage>

 <!-- 图个方便咱样式全写行内了(毕竟这也不是重点) -->
 <view style=" border-radius: 30rpx; ">
    <view style="padding:160rpx 0 0 0;display: flex;flex-direction: column; align-items: center;">
      <view>
        <image src="{{userInfo.avatar}}" mode="aspectFill" style="width: 100rpx ;height: 100rpx; border-radius: 50%;" />
      </view>

      <view style="margin-bottom: 20rpx;">
        <text style="color: pink;">{{userInfo.nickName}}</text>
      </view>
    </view>
  </view>

index.wxss

page{
  background-image: url(https://pic3.zhimg.com/v2-a76bafdecdacebcc89b5d4f351a53e6a_r.jpg?source=1940ef5c);
  background-size: 100% auto;
  background-repeat: no-repeat;
}

index.js

Page({
  data: {
    userInfo:{//这里是默认的用户头像昵称信息
      avatar:'https://profile-avatar.csdnimg.cn/06d540e9389b45649e01ca3798fdb924_m0_73756108.jpg',//csdn整来的头像链接😎😎😎
      nickName:'眨眼睛'
    },
    //开屏控件是否存在标记
    openPageFlag: true,
    //开屏广告图片内容
    url:'https://ts1.cn.mm.bing.net/th/id/R-C.a4616e92a020b344cec039516ac755d3?rik=1pgZKObA0CxALA&riu=http%3a%2f%2fsjbz.fd.zol-img.com.cn%2ft_s1080x1920c%2fg5%2fM00%2f00%2f02%2fChMkJ1fJUwuIUssCAA39sthJrGMAAU9nwNNNewADf3K734.jpg&ehk=oX398mB4NzTaBxvWpwJIR3bS7NzghbGRvY4qp7jJPuE%3d&risl=&pid=ImgRaw&r=0'
  },
  //第一次加载这个页面触发一次,也就是开屏内容展现的时候
  onLoad: function () {
    //在有TabBar的情况下默认是不会隐藏的,所以我们手动隐藏一下
    wx.hideTabBar();
  },

  //当该控件隐藏时触发
  onMyEvent: function () {
    //打印关闭
    console.log("开屏控件关闭!!!");
    this.setData({//将开屏控件的存在标记设为否
      openPageFlag: false
    });
    //显示TabBar(前面隐藏了)
    wx.showTabBar();
  }
})

index.json

{
  "usingComponents": {
    "openPage": "/components/openPage/openPage"
  },
  
  "navigationStyle": "custom"
}

效果演示:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1495911.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法训练营】:数字三角形,背包问题1,背包问题2(python实现)

数字三角形 时间限制&#xff1a;2 sec 空间限制&#xff1a;256 MB 问题描述 给定一个高度为 n 的“数字三角形”&#xff0c;其中第 i 行&#xff08;1<i<n&#xff09;有 i 个数。&#xff08;例子如下图所示&#xff09; 初始时&#xff0c;你站在“数字三角形”的顶…

leetCode刷题 4.寻找两个正序数组的中位数

目录 1. 思路 2. 解题方法 3. 复杂度 4. Code 题目&#xff1a; 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 示例 1&#xff1a; 输入&…

SOC设计:关于时钟门控的细节

有如下几个信号 输入信号 1、同步后的rstnsync_clk 2、时钟&#xff1a;clk 3、test_mode 4、软件控制信号&#xff1a;clk_sub_en 输出信号 1、clk_sub 功能&#xff1a;软件配置的使能信号clk_sub_en经过时钟clk 2拍同步处理后产生clk 域下的enable信号&#xff0c;然…

flink重温笔记(十一):Flink 高级 API 开发——flink 四大基石之 Checkpoint(详解存储后端)

Flink学习笔记 前言&#xff1a;今天是学习 flink 的第 11 天啦&#xff01;学习了 flink 四大基石之 Checkpoint &#xff08;检查点&#xff09;&#xff0c;主要是解决大数据领域持久化中间结果数据&#xff0c;以及取消任务&#xff0c;下次启动人可以恢复累加数据问题&…

【LeetCode】升级打怪之路 Day 15:二叉树解题的思维模式 —— 遍历、分解问题

今日题目&#xff1a; 226. 翻转二叉树101. 对称二叉树114. 二叉树展开为链表 目录 LC 226. 翻转二叉树 【easy】LC 101. 对称二叉树 ⭐⭐⭐LC 114. 二叉树展开为链表 ⭐⭐⭐ 今天的题目主要是对二叉树递归遍历的应用&#xff0c;东哥带你刷二叉树&#xff08;思路篇&#xff0…

砝码称重 蓝桥杯

在C中&#xff0c;fabs()和abs()都用于计算数字的绝对值&#xff0c;但它们之间有一些区别。 fabs(double x)&#xff1a;计算浮点数x的绝对值&#xff0c;返回一个double类型的结果。 abs(int x)&#xff1a;计算整数x的绝对值&#xff0c;返回一个int类型的结果。 数组的默…

航天民芯一级代理 MT3608 MT3608L 升压转换器 1.2MHZ

MT3608/MT3608L是恒定频率的6引脚SOT23电流模式升压转换器&#xff0c;适用于小型、低功耗应用。MT3608在1.2MHz&#xff0c;允许使用微小、低成本的频率高度不超过2mm的电容器和电感器。内部软启动可实现较小的浪涌电流和延长电池寿命。MT3608具有自动切换到脉冲的功能轻负载下…

【控制台警告】npm WARN EBADENGINE Unsupported engine

今天用webpack下载几个loader依赖&#xff0c;爆出了三个警告&#xff0c;大概的意思就是本地安装的node和npm的版本不是很匹配&#xff1f; 我的解决思路是&#xff1a; 先检查node和npm版本 然后去官网查找版本的对应 靠&#xff0c;官网404 Node.js (nodejs.org) 就找到…

Conda快速安装的解决方法(Mamba安装)

如果你的Conda安装了&#xff0c;你可能会发现一个问题&#xff0c;就是使用Conda install 安装某个软件时&#xff0c;会特别慢&#xff0c;这时候呢&#xff1f;你会上网去搜&#xff0c;然后大家解决的方法呢。一是告诉你镜像可以下载快一点&#xff0c;二是&#xff0c;Mam…

Sentinel 规则持久化,基于Redis持久化【附带源码】

B站视频讲解 学习链接&#x1f517; 文章目录 一、理论二、实践2-1、dashboard 请求Redis2-1-1、依赖、配置文件引入2-1-2、常量定义2-1-3、改写唯一id2-1-4、新Provider和Publisher2-1-5、改写V2 2-2、应用服务改造2-2-1、依赖、配置文件引入2-2-2、注册监听器 三、源码获取3…

keycloak18.0.0==源码编译打包

参照官方文档building.md mvn -Pdistribution -pl distribution/server-dist -am -Dmaven.test.skip clean install 报错 ---------- [ERROR] Failed to execute goal com.github.eirslett:frontend-maven-plugin:1.12.0:npm (npm-install-common) on project keycloak-theme…

MySQL存储过程2——if、case、while、repeat、loop、cursor、handler

1、if用作条件判断 1.1、语法结构 IF 条件1 THEN... ELSEIF 条件2 THEN... ELSE... END IF; 在if条件判断的结构中&#xff0c;Else if结构可以有多个&#xff0c;也可以没有。Else结构可以有&#xff0c;也可以没有 1.2、示例 根据定义的分数score变量&#xff0c;判断当…

mysql学习笔记8——常用5个内置方法

1count 对查询内容进行计数&#xff0c;并返回结果 2as as可以将查询出来结果赋予新名字 3sum sum可以查询某字段特定条件下的和值 4concat concat可以将多列数据合并成一列&#xff0c;只要concat&#xff08;&#xff09;即可 5group_concat group_concat可以把多列…

Linux|终端管理|如何踢掉操作系统内的用户

一&#xff0c; 关于终端的一些基本概念 tty、pty 和 pts 是在类 Unix 系统&#xff08;包括 Linux&#xff09;中与终端交互相关的概念。它们各自代表不同的方面&#xff0c;并且有着密切的关联。 tty (Teletype) tty 原指老式的电传打字机&#xff0c;后来泛指任何类型的终…

Echarts 配置项 series 中的 data 是多维度

文章目录 需求分析 需求 如下图数据格式所示&#xff0c;现要求按照该格式进行绘制折线图 分析 在绘制折线图时&#xff0c;通常我们的 series 中的 data 数据是这样的格式 option {title: {text: Stacked Area Chart},tooltip: {trigger: axis,axisPointer: {type: cross…

内容管理平台用这几个就够了,简单又好用

对于大多数企业和自由职业者来说&#xff0c;选择合适的内容管理平台已经成为一种必备的技能。良好的内容管理平台可以赋能你的团队&#xff0c;让你们更好地协作、管理和分享内容。不管你是要发布博客文章&#xff0c;还是需要管理复杂的项目文档&#xff0c;都可以通过内容管…

华为OD机试 - 疫情扩散时间计算 - 矩阵(Java 2024 C卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&am…

图论 - DFS深度优先遍历、BFS广度优先遍历、拓扑排序

文章目录 前言Part 1&#xff1a;DFS&#xff08;深度优先遍历&#xff09;一、排列数字1.题目描述输入格式输出格式数据范围输入样例输出样例 2.算法 二、n皇后问题1.问题描述输入格式输出格式数据范围输入样例输出样例 2.算法 三、树的重心1.问题描述输入格式输出格式数据范围…

Ubuntu 下使用 Pybind11 实现 C++ 调用 Python 接口的示例

Pybind11 是一个轻量级的库&#xff0c;它提供了在 C 中无缝集成 Python 代码的能力。使用 Pybind11&#xff0c;你可以很容易地从 C 调用 Python 代码&#xff0c;反之亦然。下面我将通过一个简单的例子来展示如何在 Ubuntu 系统上使用 Pybind11 从 C 调用 Python 接口。 安装…

嵌入式常见概念介绍

什么是ARM&#xff1a; Advanced RISC Machines 先进RISC机器 嵌入式系统自诞生起就分为两条路&#xff1a; RISC&#xff1a;精简指令集计算机&#xff0c;如ARM&#xff0c;所有指令长度一致&#xff0c;指令数量较少 CISC&#xff1a;复杂指令集计算机&#xff0…