BOM系列第一篇之定时器setTimeout和setInterval

BOM系列第一篇之定时器setTimeout和setInterval

一、概述

在前端开发中,我们经常需要在页面中加入一些动态效果,比如定时轮播图、倒计时等等,而这些效果往往需要用到JavaScript定时器。在JavaScript中,我们可以使用setTimeout()和setInterval()两个函数来实现定时器。

setTimeout()函数可以在一定时间后执行一次特定的代码,而setInterval()函数可以每隔一定时间重复执行一段特定的代码,常见的应用场景有轮播图、计时器等。

二、使用setTimeout()

before code

console.log("before setTimeout");

setTimeout(() => {
  console.log("in setTimeout");
}, 1000);

console.log("after setTimeout");

after code

第一个代码块会先输出"before setTimeout"和"after setTimeout",然后等待1秒钟后输出"in setTimeout"。如上代码中,setTimeout()的第一个参数是一个回调函数,在定时器完成后执行,第二个参数表明要等待的时间,单位为毫秒。

setTimeout()的返回值是一个定时器ID,如果需要取消定时器,可以调用clearTimeout()方法,传入该定时器ID即可。

例如,我们可以使用setTimeout()函数实现一个简单的倒计时,代码如下:

let time = 10;
let timer = setTimeout(() => {
  if (time > 0) {
    time -= 1;
    console.log(`${time} seconds remaining.`);
  } else {
    console.log("Time's up!");
    clearTimeout(timer);
  }
}, 1000);

三、使用setInterval()

before code

let counter = 0;
let interval = setInterval(() => {
  console.log(`current count:${counter}`);
  counter++;
  if (counter > 5) {
    clearInterval(interval);
  }
}, 1000);

after code

setInterval()用于定时重复执行一段代码,与setTimeout()相似,第一个参数仍然是一个回调函数,第二个参数代表执行间隔时间,也是以毫秒为单位的。setInterval()同样返回一个定时器ID,用于取消定时器,使用clearInterval()方法。

下面是一个实现轮播图自动切换的例子,代码如下:

<html>
  <head>
    <style>
      #slider {
        width: 400px;
        height: 300px;
        overflow: hidden;
      }
      .slide {
        width: 400px;
        height: 300px;
        float: left;
        text-align: center;
        font-size: 30px;
        line-height: 300px;
      }
      .slide:nth-child(1) {
        background-color: red;
      }
      .slide:nth-child(2) {
        background-color: green;
      }
      .slide:nth-child(3) {
        background-color: blue;
      }
      .slide:nth-child(4) {
        background-color: yellow;
      }
      .slide:nth-child(5) {
        background-color: purple;
      }
    </style>
  </head>
  <body>
    <div id="slider">
      <div class="slide">1</div>
      <div class="slide">2</div>
      <div class="slide">3</div>
      <div class="slide">4</div>
      <div class="slide">5</div>
    </div>
    <button onclick="start()">Start</button>
    <button onclick="stop()">Stop</button>
    <script>
      let slider = document.getElementById("slider");
      let slides = slider.querySelectorAll(".slide");
      let currentIndex = 0;
      let interval = null;
      start();
      function start() {
        if (interval) {
          clearInterval(interval);
        }
        interval = setInterval(() => {
          currentIndex = currentIndex + 1 >= slides.length ? 0 : currentIndex + 1;
          apply(currentIndex);
        }, 2000);
      }
      function stop() {
        clearInterval(interval);
      }
      function apply(index) {
        for (let i = 0; i < slides.length; i++) {
          slides[i].style.display = i === index ? "block" : "none";
        }
      }
    </script>
  </body>
</html>

使用setInterval()函数实现了自动切换轮播图,每隔2秒钟调用一次apply()方法,实现自动切换。同时,为了让用户手动控制轮播图的切换,添加了“Start”和“Stop”两个按钮,实现对定时器ID的控制。

通过上述示例,我们可以看到使用定时器可以快速实现网页的动态效果,给用户带来更好的交互体验。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:BOM系列第一篇之定时器setTimeout和setInterval - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • js实现图片轮播效果学习笔记

    下面是“js实现图片轮播效果学习笔记”的详细攻略。 什么是图片轮播效果? 图片轮播效果是一种常见的前端交互效果,它通常被用于网站首页的展示或者是产品推广的页面。通常,图片轮播效果由若干张图片组成,图片会在页面上自动进行轮播,并提供一些控制按钮供用户手动切换图片。 实现图片轮播效果的基本步骤 实现图片轮播效果的基本步骤大致如下: 编写HTML和CSS代码,实现…

    JavaScript 2023年6月11日
    00
  • JavaScript对象的四种创建方法

    下面我将详细讲解“JavaScript对象的四种创建方法”。 JavaScript对象的四种创建方法 在JavaScript中,我们可以使用四种不同的方式来创建对象。 1. 对象字面量 使用对象字面量创建对象是最常用且最简单的方式。对象字面量就是由一对花括号 {} 和其中包含的零到多个属性组成的。每个属性都由名称和值组成,名称和值之间由冒号 : 分隔,属性之…

    JavaScript 2023年5月18日
    00
  • js 原型对象和原型链理解

    JS 原型对象和原型链理解 在 JavaScript 中,每个对象都有一个内部属性 [[Prototype]],也可以叫做原型,它指向另一个对象,而后者则有自己的原型,这样就形成了一个链接的原型链。最终的原型指向 null。 原型对象 原型对象是函数对象的一个属性 prototype,它是一个对象,包含了一些属性和方法,这些属性和方法会被实例对象所继承。每当…

    JavaScript 2023年5月27日
    00
  • 详解JS数据类型的值拷贝函数(深拷贝)

    以下是详解JS数据类型的值拷贝函数(深拷贝)的攻略: 什么是深拷贝 在 JS 中,我们把变量分为两类:基础类型和引用类型。基本类型的值直接存储在栈(stack)中,而引用类型的值存储在堆(heap)中,变量实际上是一个指针指向对应的地址。因此,基础类型变量的修改不影响其他变量,而引用类型变量的修改会影响所有指向同一地址的变量。而深拷贝就是将原始数据类型和引用…

    JavaScript 2023年6月10日
    00
  • JavaScript高级函数应用之分时函数实例分析

    JavaScript高级函数应用之分时函数实例分析 分时函数是一种常见的优化技术,它可以在页面实际需要使用某些资源时再进行加载,避免了一开始就加载所有资源,造成不必要的浪费。以下是分时函数的简单实现: function timeChunk(arr, fn, count) { const len = arr.length; // 获取要迭代的数组长度 let …

    JavaScript 2023年6月11日
    00
  • cordova+vue+webapp使用html5获取地理位置的方法

    接下来我将为您讲解“cordova+vue+webapp使用html5获取地理位置的方法”的完整攻略。 1. 简介 H5的地理信息API,是HTML5新增的API之一,通过使用该API,我们可以获取到手机端、PC端等设备的地理位置信息。本文将使用Cordova+Vue框架进行H5地理信息获取的一些操作,其中,Cordova则是在构建混合APP时采用的,该方法…

    JavaScript 2023年6月11日
    00
  • 一起来看看JavaScript数据类型最详解

    一起来看看JavaScript数据类型最详解 简介 JavaScript是一种脚本语言,它的数据类型有很多种。了解JavaScript数据类型的完整列表,以及它们在代码中的特征和用法,对于学习和编写JavaScript代码至关重要。本文将会对JavaScript中的数据类型做出详细的讲解,涵盖以下几个方面: JavaScript的7种数据类型 JavaScr…

    JavaScript 2023年5月18日
    00
  • javascript中导出与导入实现模块化管理教程

    以下是对“javascript中导出与导入实现模块化管理教程”的完整攻略: JavaScript中导出与导入实现模块化管理教程 为什么需要模块化? 在编写JavaScript代码时,代码量可能会变得非常庞大和复杂,由于所有逻辑都在同一个js文件中,导致代码结构混乱,代码复用性不高。 随着代码量的增大,我们会面临着不好维护的代码库、命名冲突、团队开发、性能和可…

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