JavaScript | 定时器(setInterval和clearInterval)的使用

 效果图如下:

       当用户第一次看到这个页面时,按钮是不可点击的,并显示一个5秒的倒计时。倒计时结束后,按钮变为可点击状态,并显示“同意协议”。这样做的目的是确保用户有足够的时间阅读用户协议。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <textarea name="" id="" cols="30" rows="10">
        用户注册协议
欢迎注册成为京东用户!在您注册过程中,您需要完成我们的注册流程并通过
欢迎注册成为京东用户!在您注册过程中,您需要完成我们的注册流程并通过
    </textarea>
    <br>
    <button class="btn" disabled>(5)我已经阅读该用户协议</button>
    <!-- disabled 属性 按钮不能点击 -->
    <script>
        // 1.获取元素
        const btn = document.querySelector('.btn')
        // 2.倒计时
        let i = 5
        // 2.1 开启倒计时
        let n = setInterval(function () {
            i--
            // 2.2 更新里面的内容
            btn.innerHTML = `(${i})我已经阅读该用户协议`
            if (i === 0) {
                // 2.3 倒计时完了 关闭计时器 打开按钮
                clearInterval(n) // 关闭计时器
                btn.disabled = false  // 打开按钮
                btn.innerHTML = '同意协议' // 修改按钮内容
            }
        }, 1000)
    </script>
</body>

</html>

代码理解:

  1. 首先,通过document.querySelector获取了一个按钮元素,并把它赋值给变量btn
  2. 设置一个变量i,并初始化为5,这个变量用来表示倒计时的时间
  3. 使用setInterval设置一个每秒执行一次的定时器,这个定时器的功能是:
  • 每次执行时,先将变量i减1
  • 更新按钮内的文字,显示当前的倒计时
  • i变为0时,使用clearInterval清除定时器,这样定时器就不会再执行了
  • 同时,将按钮的disabled属性设置为false,使得按钮可以被点击
  • 更新按钮的文字为“同意协议”

定时器常用来做以下几件事:

  1. 延迟执行代码:有时候我们不希望某段代码立即执行,而是希望在一段时间后执行,比如用户登录后延迟一段时间跳转到另一个页面。
  2. 轮询:比如实时聊天功能,会定时向服务器发送请求,获取最新的消息。
  3. 动画效果:通过定时器来不断改变元素的样式,实现动画效果。
  4. 倒计时功能:比如电商促销活动中的倒计时,或者是抢购时的倒计时。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习:知识蒸馏(Knowledge Distillation,KD)

知识蒸馏&#xff08;Knowledge Distillation&#xff0c;KD&#xff09;作为深度学习领域中的一种模型压缩技术&#xff0c;主要用于将大规模、复杂的神经网络模型&#xff08;即教师模型&#xff09;压缩为较小的、轻量化的模型&#xff08;即学生模型&#xff09;。在实际应…

Vue(3) 组件

文章目录 对组件的理解单文件组件非单文件组件基本使用几个注意点组件的嵌套VueComponent构造函数一个重要的内置关系 组件的自定义事件全局事件总线安装全局事件总线使用事件总线解绑事件消息订阅与发布简介使用步骤范例 $nextTick插槽1.默认插槽2.具名插槽作用域插槽 对组件的…

[linux 驱动]网络设备驱动详解

目录 1 描述 2 结构体 2.1 net_device 2.2 sk_buff 2.3 net_device_ops 2.4 ethtool_ops 3 相关函数 3.1 网络协议接口层 3.1.1 dev_queue_xmit 3.1.2 netif_rx 3.1.3 alloc_skb 3.1.4 kfree_skb 3.1.5 skb_put 3.1.6 skb_push 3.1.7 skb_reserve 3.2 网络设备驱…

使用OpenCV实现基于EigenFaces的人脸识别

引言 人脸识别技术近年来得到了飞速的发展&#xff0c;它被广泛应用于安全监控、门禁系统、智能设备等领域。其中&#xff0c;基于特征脸&#xff08;EigenFaces&#xff09;的方法是最早期且较为经典的人脸识别算法之一。本文将介绍如何使用Python和OpenCV库实现一个简单的人…

AI大模型面经——以医疗领域为例,整理RAG基础与实际应用中的痛点

前言 谈到大模型在各垂直领域中的应用&#xff0c;一定离不开RAG&#xff0c;本系列开始分享一些RAG相关使用经验&#xff0c;可以帮助大家在效果不理想的时候找到方向排查或者优化。 本系列以医疗领域为例&#xff0c;用面试题的形式讲解RAG相关知识&#xff0c;开始RAG系列…

Spring与Spring Boot之间的区别

Spring和Spring Boot是用于开发Java企业应用的两个主流框架。虽然它们都属于Spring生态系统的一部分&#xff0c;但是它们各自有不同的使用场景和特点。 在本文中&#xff0c;我们将探讨Spring与Spring Boot之间的差异&#xff0c;针对他们之间特性的差异&#xff0c;做一个详…

windows10系统-在线设置账户有效期

.a.打开微软官网 点击右上角的登录按钮 .b.输入自己idea账户名&#xff0c;然后点击下一步 .c.使用邮箱接收验证码 输入验证码->登录 .d.点击右上角的个人账户->我的 Microsoft 账户 .e.点击更改密码即可 .f.修改完密码之后&#xff0c;点击保存即可。 微软的在线账户和…

XGBoost回归预测 | MATLAB实现XGBoost极限梯度提升树多输入单输出

回归预测 | MATLAB实现XGBoost极限梯度提升树多输入单输出 目录 回归预测 | MATLAB实现XGBoost极限梯度提升树多输入单输出预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 XGBoost的全称是eXtreme Gradient Boosting,它是经过优化的分布式梯度提升库,旨在高效、…

【python学习】1-1 python软件安装

1。搜索python官网&#xff0c;点击下载进行下载安装包。 2.双击.exe文件&#xff0c;如图步骤 3.winR输入cmd&#xff0c;在弹出黑框中输入python显示如图安装好。

linux线程 | 同步与互斥(上)

前言&#xff1a;本节内容主要是线程的同步与互斥。 本篇文章的主要内容都在讲解互斥的相关以及周边的知识。大体的讲解思路是通过数据不一致问题引出锁。 然后谈锁的使用以及申请锁释放锁的原子性问题。 那么&#xff0c; 废话不多说&#xff0c; 现在开始我们的学习吧&#x…

基于element-ui的upload组件与阿里云oss对象存储的文件上传(采用服务端签名后直传的方式)

服务端签名后直传图解 步骤 1 开通阿里云OSS对象存储服务&#xff0c;创建新的Bucket 2 创建子账户获取密钥 创建用户 添加权限 后端 1 新建一个第三方服务的模块 third-party pom文件 <?xml version"1.0" encoding"UTF-8"?> <project x…

【工程测试技术】第4章 常用传感器分类,机械式,电阻式,电容式,电感式,光电式传感器

上理考研周导师的哔哩哔哩频道 我在频道里讲课哦 目录 4.1 常用传感器分类 4.2 机械式传感器及仪器 4.3 电阻式、电容式与电感式传感器 1.变阻器式传感器 2.电阻应变式传感器 3.固态压阻式传感器 4.典型动态电阻应变仪 4.3.2 电容式传感器 1.变换原理 2.测量电路 …

ScriptableObject基本使用

使用方法 自定义类继承ScriptableObject 可以在类内部增加数据或者数据类&#xff0c;一般用于配置 注意事项 给继承ScriptableObject的类增加CreateAssetMenu特性。 CreateAssetMenu一般默认三个参数 第一个参数是父目录 第二个参数是父目录的子选项 第三个参数是可以…

[瑞吉外卖]-05菜品模块

文件上传下载 介绍 文件上传也称为upload&#xff0c;是指将本地图片、视频、音频等文件上传到服务器上, 可以供其他用户浏览或下载 前端组件库提供了上传组件&#xff0c;但是底层原理还是基于form表单的文件上传。 服务端要接收客户端上传的文件&#xff0c;通常都会使用Ap…

QT--QPushButton设置文本和图标、使能禁能、信号演示

按钮除了可以设置显示文本之外&#xff0c;还可以设置图标 文本 可以获取和设置按钮上显示的文本 // 获取和设置按钮的文本 QString text() const void setText(const QString &text)该属性&#xff0c;既可以在 Qt 设计师右侧的属性窗口中修改&#xff0c;也可以在代码…

深度学习调参技巧总结

文章目录 深度学习调参技巧总结1.寻找合适的学习率2.优化算法选择3.模型对不同超参数的敏感性4.训练技巧参考 深度学习调参技巧总结 1.寻找合适的学习率 学习率&#xff08;Learning Rate, LR&#xff09;是机器学习模型训练中极其重要的超参数。它直接影响模型的收敛速度和最…

数据结构——排序(2)

数据结构——排序(2) 文章目录 数据结构——排序(2)前言&#xff1a;1.快速排序&#xff08;非递归版本&#xff09;基本步骤&#xff1a;代码实现 2.归并排序算法思想&#xff1a;核心步骤&#xff1a;代码实现&#xff1a;特征总结&#xff1a; 3.计数排序&#xff08;非比较…

【深度学习系统】Lecture 2 - ML Refresher / Softmax Regression

一、问题的理解方式 首先&#xff0c;什么是数据驱动的编程&#xff1f;面对经典的MNIST数据集识别任务&#xff0c;传统的编程思维和数据驱动的编程思维有何不同&#xff1f; 传统编程思维&#xff1a; 通常从明确的问题定义和具体的算法开始。对于 MNIST 数据集识别任务&a…

AI时代的神器,解锁 PPT 制作新体验--分享使用经验

背景&#xff1a;探讨人们在使用AI工具时&#xff0c;最喜欢的和认为最好用的工具是哪些&#xff0c;展示AI技术的实际应用和影响。 说明&#xff1a;本文分析的AI技术的实际应用是制作PPT的AI工具。>>快速访问本文的AI工具<< 你好&#xff0c;我是三桥君 你有没有…

网络抓包06 - Socket抓包

TCP thread {val socket Socket("xx.xxx.xxx.xx", 8888)socket.soTimeout 3000val os socket.getOutputStream()Log.e("Socket", "class name ${os::class.java.canonicalName}")os.write(0x00)}运行代码&#xff0c;得知 OutputStream 是 S…