JS自动倒计时30秒后按钮才可用(两种场景)

当我们需要用户在规定时间内完成某些操作,而不希望用户在规定时间之前提交多次请求时,可以使用JS自动倒计时,以此限制用户在规定时间之前不能再触发该操作。

以下是JS自动倒计时的完整攻略,包含两种场景的具体实现方法。

场景一:按钮点击后30秒后才可再次触发

HTML代码

首先,我们需要在HTML代码中创建一个按钮,例如以下代码:

<button id="myButton" onclick="buttonClick()">点击我</button>

JavaScript代码

然后,我们需要编写JavaScript代码,实现倒计时的功能。具体的实现步骤如下:

  1. 获取按钮的引用,和倒计时的时长。我们可以使用document.getElementById方法获取按钮的引用,使用一个变量来保存倒计时的时长,例如:
var myButton = document.getElementById("myButton");
var countDown = 30; // 倒计时时长为30秒
  1. 定义一个计时器,每秒减少一秒。我们可以使用setInterval方法每秒钟执行一次计时器函数,该函数可以将倒计时的时长减1,然后更新按钮的文本内容,例如:
var intervalId;
function startCountDown() {
  intervalId = setInterval(function(){
    countDown--;
    myButton.innerHTML = "还需等待" + countDown + "秒";
  }, 1000);
}

在上面的代码中,setInterval方法每秒钟执行一次匿名函数,该匿名函数的作用是将countDown减1,然后将更新后的计时器文本设置为按钮的文本内容。最后,返回一个intervalId值,该值用于停止计时器。

  1. 开始计时器。当按钮被点击后,需要先调用startCountDown函数,启动计时器。同时,需要将按钮设置为禁用状态,禁止用户多次点击,例如:
function buttonClick() {
  startCountDown(); // 启动计时器
  myButton.disabled = true; // 禁用按钮
}

在上面的代码中,当按钮被点击时,先调用startCountDown函数启动计时器,然后禁用按钮,禁止用户多次点击。

  1. 停止计时器。当倒计时结束后,需要停止计时器,并将按钮恢复为可使用状态,例如:
function stopCountDown() {
  clearInterval(intervalId);
  myButton.disabled = false; // 恢复按钮为可使用状态
  myButton.innerHTML = "点击我"; // 恢复按钮文本
}

在上面的代码中,当倒计时结束时,先调用clearInterval方法停止计时器,然后将按钮恢复为可使用状态,并恢复按钮的文本内容。

  1. 完整代码
var myButton = document.getElementById("myButton");
var countDown = 30; // 倒计时时长为30秒
var intervalId;

function startCountDown() {
  intervalId = setInterval(function(){
    countDown--;
    myButton.innerHTML = "还需等待" + countDown + "秒";
  }, 1000);
}

function buttonClick() {
  startCountDown(); // 启动计时器
  myButton.disabled = true; // 禁用按钮
}

function stopCountDown() {
  clearInterval(intervalId);
  myButton.disabled = false; // 恢复按钮为可使用状态
  myButton.innerHTML = "点击我"; // 恢复按钮文本
}

场景二:用户登录后30分钟内操作有效

JavaScript代码

在这种情况下,我们需要在用户登录后的30分钟内限制用户的操作,同样可以使用JS实现自动倒计时的功能。具体的实现步骤如下:

  1. 获取当前的时间和倒计时的时长。我们可以使用new Date()方法获取当前的时间,使用一个变量来保存倒计时的时长,例如:
var startTime = new Date();
var countDown = 1800; // 倒计时时长为30分钟
  1. 定义一个计时器,每秒减少一秒。与场景一类似,我们可以使用setInterval方法每秒钟执行一次计时器函数,该函数可以将倒计时的时长减1,然后更新页面上的倒计时文本内容,例如:
var intervalId;
function startCountDown() {
  intervalId = setInterval(function(){
    countDown--;
    updateCountDown();
  }, 1000);
}

在上面的代码中,setInterval方法每秒钟执行一次匿名函数,该匿名函数的作用是将countDown减1,然后调用updateCountDown函数更新倒计时文本内容。

  1. 计算剩余的倒计时。我们需要通过当前时间和localStorage中保存的登录时间,计算剩余的倒计时,例如:
function getRemainingTime() {
  var endTime = new Date();
  var elapsedTime = Math.floor((endTime - startTime) / 1000);
  return Math.max(countDown - elapsedTime, 0);
}

在上面的代码中,new Date()方法获取当前时间,然后使用(endTime - startTime) / 1000计算已经过去的时间(单位为秒),最后用倒计时时长减去已经过去的时间,计算剩余的倒计时时间。

  1. 更新倒计时文本内容。根据剩余的倒计时时间,我们需要动态地更新页面上的倒计时显示文本内容,例如:
function updateCountDown() {
  var remainingTime = getRemainingTime();
  var minutes = Math.floor(remainingTime / 60);
  var seconds = remainingTime % 60;
  document.getElementById("countDown").innerHTML = "您的操作将在" + minutes + "分" + seconds + "秒后失效";
}

在上面的代码中,getRemainingTime函数获取剩余的倒计时时间,然后将剩余时间格式化为“分:秒”的形式,更新页面上的倒计时文本内容。

  1. 开始计时器。当用户登录时,我们需要调用startCountDown函数启动计时器。同时,需要将倒计时文本内容添加到页面上,例如:
function login() {
  startTime = new Date();
  updateCountDown();
  document.getElementById("countDownContainer").style.display = "block"; // 显示倒计时容器
  startCountDown();
}

在上面的代码中,当用户登录成功后,调用login函数,启动计时器并更新倒计时文本内容,最后将倒计时容器设置为可见状态。

  1. 停止计时器。当倒计时结束后,我们需要将倒计时容器隐藏,停止计时器并进行其他操作(例如,禁止用户做某些操作),例如:
function stopCountDown() {
  clearInterval(intervalId);
  document.getElementById("countDownContainer").style.display = "none"; // 隐藏倒计时容器
  // TODO: 禁止用户进行某些操作
}

在上面的代码中,当倒计时结束时,停止计时器,并将倒计时容器设置为隐藏状态,最后可以禁止用户进行某些操作。

  1. 完整代码
var startTime = new Date();
var countDown = 1800; // 倒计时时长为30分钟
var intervalId;

function startCountDown() {
  intervalId = setInterval(function(){
    countDown--;
    updateCountDown();
  }, 1000);
}

function getRemainingTime() {
  var endTime = new Date();
  var elapsedTime = Math.floor((endTime - startTime) / 1000);
  return Math.max(countDown - elapsedTime, 0);
}

function updateCountDown() {
  var remainingTime = getRemainingTime();
  var minutes = Math.floor(remainingTime / 60);
  var seconds = remainingTime % 60;
  document.getElementById("countDown").innerHTML = "您的操作将在" + minutes + "分" + seconds + "秒后失效";
}

function login() {
  startTime = new Date();
  updateCountDown();
  document.getElementById("countDownContainer").style.display = "block"; // 显示倒计时容器
  startCountDown();
}

function stopCountDown() {
  clearInterval(intervalId);
  document.getElementById("countDownContainer").style.display = "none"; // 隐藏倒计时容器
  // TODO: 禁止用户进行某些操作
}

以上就是JS自动倒计时的实现方式和完整攻略,适用于在一定时间内限制用户的操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS自动倒计时30秒后按钮才可用(两种场景) - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • JS猜数字游戏实例讲解

    JS猜数字游戏实例讲解 猜数字游戏是一种基于逻辑和推理的有趣互动游戏。下面将通过一个JS猜数字游戏实例来讲解如何实现这个游戏。 游戏规则 猜数字游戏的规则非常简单:系统会自动随机生成一个数,在限定的次数内,玩家需要通过猜测数字来确定该数,如果玩家猜中了,游戏结束,玩家胜利;反之,如果玩家未在限定的次数内猜出该数,则游戏失败。 实现步骤 随机生成目标数字:使用…

    JavaScript 2023年6月10日
    00
  • JavaScript面试题大全(推荐)

    感谢对本网站的关注和支持。以下是对于“JavaScript面试题大全(推荐)”的完整攻略: 简介 “JavaScript面试题大全(推荐)”是一篇完整的JavaScript面试题目合集,其中包含了常见的JavaScript面试题以及它们的详细答案解释。本文的题目难度从基础到高级不等,覆盖了面试中常见的各个知识点。该题集不仅适用于求职者准备面试,也适合企业HR…

    JavaScript 2023年5月27日
    00
  • js原生Ajax的封装和原理详解

    下面是关于”js原生Ajax的封装和原理详解”的完整攻略: 什么是Ajax Ajax是指异步JavaScript和XML(Asynchronous Javascript and XML)技术,主要用于异步加载数据,是一种无需重新加载整个网页的情况下,能够更新部分网页的技术。 使用Ajax技术,通过XMLHttpRequest对象向服务器发送请求,并进行异步通…

    JavaScript 2023年6月11日
    00
  • JavaScript实现获取img的原始尺寸的方法详解

    我来详细讲解“JavaScript实现获取img的原始尺寸的方法详解”的完整攻略。 一、背景说明 在开发网页中,经常需要获取 img 标签的原始尺寸,以便进行响应式布局或者图片的合理展示。对于这种需求,我们可以使用 JavaScript 来获取 img 标签的原始尺寸,本文将介绍几种实现方式。 二、addEventListener 方法 addEventLi…

    JavaScript 2023年6月11日
    00
  • 你所不了解的javascript操作DOM的细节知识点(一)

    下面就为大家详细讲解“你所不了解的JavaScript操作DOM的细节知识点(一)”的完整攻略。 什么是DOM? DOM(文档对象模型)是指一种用于在HTML、XML等文档中描述元素的层次结构的API。通过DOM,JavaScript可以获取和修改文档的内容和结构。 元素节点和文本节点 在DOM中,每一个HTML元素都被表示为一个元素节点(element n…

    JavaScript 2023年6月10日
    00
  • js中prototype用法详细介绍

    “js中prototype用法详细介绍”的攻略如下: 1. 什么是prototype 在javascript中,每个对象有一个特殊的属性__proto__,指向其构造函数的原型对象(prototype)。原型对象中存储着对象的方法和属性。使用原型机制,可以使所有对象共享相同的属性和方法,而不必为每个对象创建副本。 2. 为什么需要prototype 在jav…

    JavaScript 2023年6月10日
    00
  • java后台实现js关闭本页面,父页面指定跳转或刷新操作

    实现JS关闭本页面、父页面指定跳转或刷新操作需要通过JavaScript与Java后台交互实现。下面详细讲解完整攻略: 第一步:前端代码js关闭本页面 在前端通过JavaScript实现关闭本页面的方法为: window.close(); 第二步:通过Java后台实现父页面跳转或刷新操作 通过Java后台实现父页面的跳转或刷新操作需要借助JavaScript…

    JavaScript 2023年6月11日
    00
  • vue element-ui使用required进行表单校验时自定义提示语问题

    在Vue中使用Element-UI进行表单校验时,可以使用required属性来进行必填校验。然而,在默认情况下,当该表单项未填写时,Element-UI会输出“该字段不能为空”的默认提示语,而有时候我们希望自定义提示语。下面是自定义提示语的攻略: 使用label属性自定义提示语 如果我们不想使用默认提示语,可以使用label属性来自定义提示语。在使用lab…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部