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

yizhihongxing

当我们需要用户在规定时间内完成某些操作,而不希望用户在规定时间之前提交多次请求时,可以使用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字符串引用的两种方式 在JavaScript中,字符串是一个常见的数据类型。在使用字符串的过程中,我们需要通过引用字符串来进行操作。在JavaScript中,有两种常见的字符串引用方式,分别是单引号和双引号。 单引号字符串引用 使用单引号引用的字符串,需要在字符串的开头和结尾都添加单引号。 let str1 = ‘这是一个使用单引号引用的字符串’; co…

    JavaScript 2023年5月28日
    00
  • javascript中如何判断类型汇总

    下面是关于JavaScript中如何判断类型的完整攻略。本文将涵盖JavaScript中的原始类型、引用类型等常见类型的判断方式,并提供了实例代码进行说明。 一、JavaScript中的类型 JavaScript中的数据类型可以分为两类:原始类型和引用类型。 1.1 原始类型 JavaScript中的原始类型有6种,分别为:undefined、null、bo…

    JavaScript 2023年5月28日
    00
  • 如何配置jsconfig.json文件解决VSCode中无法识别@别名引用的问题

    在现代web开发中,使用别名来引用模块已经成为了一个非常常见的做法。这样可以使得代码更加易读、易维护。然而,在使用VSCode进行开发时,如果不正确地配置jsconfig.json文件,就会遇到一些问题。 其中一个比较常见的问题是,在使用“@”符号来引用模块时,无法通过Ctrl + 点击来跳转到相应的文件。这是因为默认情况下,VSCode无法识别这个“@”符…

    JavaScript 2023年4月17日
    00
  • JavaScript 和 Java 的区别浅析

    JavaScript 和 Java 的区别浅析 基本概念 JavaScript 是一门脚本语言,主要用于前端交互式的网页开发,而 Java 是一门面向对象的编程语言,常用于后端开发和 Android 应用开发。 语言类型 JavaScript 是一种解释型的语言,因为它的代码无需编译,直接在浏览器中解释执行;而 Java 是一种编译型的语言,需要通过编译器将…

    JavaScript 2023年5月18日
    00
  • 使用JS的DOM文档对象模型获取前端循环的参数

    获取前端循环的参数可以通过JavaScript的DOM文档对象模型来实现。在这个过程中,可以使用如下的步骤来获取循环的参数。 步骤一:获取要循环的HTML元素 首先需要获取前端页面中要进行循环的HTML元素,可以使用JavaScript中的document对象的方法来获取。document对象的方法包括getElementById()、getElements…

    JavaScript 2023年6月10日
    00
  • JS获取节点的兄弟,父级,子级元素的方法

    JS获取节点的兄弟、父级、子级元素的方法可以使用DOM提供的方法实现。下面是几种常用的方法: 获取兄弟元素节点 1. nextSibling和previousSibling nextSibling和previousSibling分别是获取下一个兄弟节点和上一个兄弟节点的方法。这两个方法返回的都是一个节点对象。需要注意的是,获取的兄弟节点可能是文本节点或注释节…

    JavaScript 2023年6月10日
    00
  • flash javascript之间的通讯方法小结

    Flash JavaScript之间的通讯方法小结 在开发网络应用程序的过程中,我们常常需要使用Flash和JavaScript之间的通讯。下面是一些常见的通讯方法。 1. ExternalInterface ExternalInterface 类是Flash和JavaScript之间通讯的最基本的方法,它提供了一个双向的接口,可以在Flash和JavaSc…

    JavaScript 2023年6月11日
    00
  • JavaScript基于扩展String实现替换字符串中index处字符的方法

    要基于扩展String实现替换字符串中index处字符的方法,需要使用JavaScript原型链进行扩展。具体步骤如下: 利用Object.defineProperty()方法,为String.prototype对象添加一个名为replaceCharAtIndex的新属性。 Object.defineProperty(String.prototype, ‘r…

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