js实现时钟定时器

关于JS实现时钟定时器的攻略如下:

确定设计思路

1.获取当前时间
2.计算时针、分针、秒针的位置
3.将时针、分针、秒针对应的角度应用到实际页面上

获取当前时间

我们需要获取当前的系统时间,这可以通过JS的Date对象实现。使用 new Date() 可以初始化一个Date对象,然后分别获取当前时间的小时、分钟、秒等信息。

const now = new Date()
const hour = now.getHours()
const minute = now.getMinutes()
const second = now.getSeconds()

计算时针、分针、秒针的位置

计算时针、分针和秒针的位置,可以根据当前时间的小时、分钟、秒分别计算。

const hourDeg = (hour % 12) * 30 + minute / 2 // 每小时对应的角度为30度,加上分钟的偏移量
const minuteDeg = minute * 6 + second / 10 // 每分钟对应的角度为6度,加上秒钟的偏移量
const secondDeg = second * 6 // 每秒钟对应的角度为6度

将角度应用到实际页面上

使用JS来动态更新CSS样式,将时针、分针、秒针的旋转角度应用到实际页面上。

document.querySelector('.hour').style.transform = `rotate(${hourDeg}deg)`
document.querySelector('.minute').style.transform = `rotate(${minuteDeg}deg)`
document.querySelector('.second').style.transform = `rotate(${secondDeg}deg)`

示例说明

示例一

我们先来看一个简单的例子,如何实现一个基本的时钟。

<!DOCTYPE html>
<html>
<head>
    <title>JS实现时钟定时器示例</title>
    <style type="text/css">
        .clock {
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            width: 300px;
            height: 300px;
            border-radius: 50%;
            background-color: #fff;
            border: 10px solid #000;
        }
        .clock .hand {
            position: absolute;
            top: 50%;
            left: 50%;
            width: 2px;
            height: 80px;
            margin-left: -1px;
            transform-origin: 50% 80px;
            background-color: #000;
        }
        .clock .hour {
            height: 50px;
            background-color: #000;
            transform-origin: 50% 50px;
        }
        .clock .minute {
            height: 70px;
            background-color: #000;
            transform-origin: 50% 70px;
            z-index: 1;
        }
        .clock .second {
            height: 80px;
            background-color: red;
            transform-origin: 50% 80px;
            z-index: 2;
        }
    </style>
</head>
<body>
    <div class="clock">
        <div class="hand hour"></div>
        <div class="hand minute"></div>
        <div class="hand second"></div>
    </div>

    <script type="text/javascript">
        function tick() {
            const now = new Date()
            const hour = now.getHours()
            const minute = now.getMinutes()
            const second = now.getSeconds()

            const hourDeg = (hour % 12) * 30 + minute / 2 // 每小时对应的角度为30度,加上分钟的偏移量
            const minuteDeg = minute * 6 + second / 10 // 每分钟对应的角度为6度,加上秒钟的偏移量
            const secondDeg = second * 6 // 每秒钟对应的角度为6度

            document.querySelector('.hour').style.transform = `rotate(${hourDeg}deg)`
            document.querySelector('.minute').style.transform = `rotate(${minuteDeg}deg)`
            document.querySelector('.second').style.transform = `rotate(${secondDeg}deg)`
        }

        setInterval(tick, 1000)
    </script>
</body>
</html>

在页面中我们定义了一个div元素来展示时钟,时针、分针、秒针通过设置不同的 transform-origin 来实现位置的不同。通过JS定时器来更新时针、分针、秒针的角度,从而实现时钟的更新。

示例二

继续来看一个稍微复杂一点的例子,如何在建立一个高性能的时钟。

<!DOCTYPE html>
<html>
<head>
    <title>JS实现高性能时钟定时器示例</title>
    <style type="text/css">
        .clock {
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            width: 300px;
            height: 300px;
            border-radius: 50%;
            background-color: #fff;
            border: 10px solid #000;
        }
        .clock .hand {
            position: absolute;
            top: 50%;
            left: 50%;
            width: 2px;
            height: 80px;
            margin-left: -1px;
            transform-origin: 50% 80px;
            background-color: #000;
        }
        .clock .hour {
            height: 50px;
            background-color: #000;
            transform-origin: 50% 50px;
        }
        .clock .minute {
            height: 70px;
            background-color: #000;
            transform-origin: 50% 70px;
            z-index: 1;
        }
        .clock .second {
            height: 80px;
            background-color: red;
            transform-origin: 50% 80px;
            z-index: 2;
        }
    </style>
</head>
<body>
    <div class="clock">
        <div class="hand hour"></div>
        <div class="hand minute"></div>
        <div class="hand second"></div>
    </div>

    <script type="text/javascript">
        // 获取DOM元素
        const hourHand = document.querySelector('.hour')
        const minuteHand = document.querySelector('.minute')
        const secondHand = document.querySelector('.second')

        // 计算角度
        function calcDeg(hour, minute, second) {
            const hourDeg = (hour % 12) * 30 + minute / 2 // 每小时对应的角度为30度,加上分钟的偏移量
            const minuteDeg = minute * 6 + second / 10 // 每分钟对应的角度为6度,加上秒钟的偏移量
            const secondDeg = second * 6 // 每秒钟对应的角度为6度

            return {
                hourDeg,
                minuteDeg,
                secondDeg
            }
        }

        // 更新时针、分针、秒针旋转角度
        function updateClock() {
            const now = new Date()
            const { hourDeg, minuteDeg, secondDeg } = calcDeg(now.getHours(), now.getMinutes(), now.getSeconds())

            hourHand.style.transform = `rotate(${hourDeg}deg)`
            minuteHand.style.transform = `rotate(${minuteDeg}deg)`
            secondHand.style.transform = `rotate(${secondDeg}deg)`
        }

        // 设置 requestAnimationFrame
        let handle = null
        function raf() {
            updateClock()
            handle = requestAnimationFrame(raf)
        }

        // 开启 requestAnimationFrame
        handle = requestAnimationFrame(raf)

        // 取消 requestAnimationFrame
        //cancelAnimationFrame(handle)
    </script>
</body>
</html>

在这个例子中,我们将一些计算动作提前到一个独立的函数中,以减轻 updateClock 函数的压力。我们还使用 requestAnimationFrame 来代替 setTimeout,以提高时钟的性能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现时钟定时器 - Python技术站

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

相关文章

  • javaScript 计算两个日期的天数相差(示例代码)

    接下来我将详细讲解如何使用JavaScript计算两个日期的天数相差,包括代码实现和示例说明。 使用JavaScript计算两个日期的天数相差攻略 计算两个日期的天数相差,我们需要完成以下几个步骤: 将两个日期字符串转换为日期对象 计算两个日期对象之间相差的毫秒数 将相差的毫秒数转换为天数 返回计算结果 下面是一个完成以上几个步骤的JavaScript函数:…

    JavaScript 2023年5月27日
    00
  • js判断鼠标位置是否在某个div中的方法

    要判断鼠标位置是否在某个div中,可以通过以下步骤实现。 第一步:获取鼠标的位置信息 要判断鼠标位置是否在某个div中,首先需要获取鼠标在页面中的位置信息。可以通过以下代码来获取: document.addEventListener(‘mousemove’, function(e) { var x = e.clientX; var y = e.clientY…

    JavaScript 2023年6月11日
    00
  • layui自定义验证,用ajax查询后台是否有重复数据,form.verify的例子

    下面是关于 layui 自定义验证,用 AJAX 查询后台是否有重复数据,form.verify 的例子的完整攻略。 1. 准备工作 在制作这个例子之前,我们需要先安装好 layui,以及后端接口,这里使用 Node.js + Express 作为示例,同时需要使用到 MySQL 数据库,这里使用到了 sequelize 库进行数据库的连接和操作。 安装完所…

    JavaScript 2023年6月10日
    00
  • JavaScript中CreateTextFile函数

    CreateTextFile函数是JavaScript中一个用于创建文本文件的函数,其语法结构如下: CreateTextFile(filename, overwrite) 它包含两个参数: filename:要创建的文本文件的完整路径和文件名,可以是相对路径或绝对路径。 overwrite:一个可选参数,表示在文件存在时是否覆盖该文件。如果overwrit…

    JavaScript 2023年5月27日
    00
  • C#使用MailAddress类发送html格式邮件的实例代码

    下面我将详细讲解如何使用C#的MailAddress类发送HTML格式邮件。 1. 准备工作 在开始之前,你需要安装SMTP的环境,同时确保你的邮箱账号的SMTP邮件发送权限已经开启。 2. 添加引用 在C#项目中引用System.Net.Mail, System.Net和System.Text命名空间 using System.Net.Mail; usin…

    JavaScript 2023年5月28日
    00
  • JavaScript strike方法入门实例(给字符串加上删除线)

    JavaScript strike方法入门实例(给字符串加上删除线) 简介 在 JavaScript 中,我们可以使用 strike() 方法为字符串添加删除线。strike() 方法创建划掉的文本标签 <strike>,通过将所选字符串包含在该标签中,使其在浏览器中显示为划掉的文本。 在本文中,我们将讨论如何使用 strike() 方法以及使用…

    JavaScript 2023年5月28日
    00
  • Javascript Date setUTCMonth() 方法

    以下是关于JavaScript Date对象的setUTCMonth()方法的完整攻略,包括两个示例说明。 JavaScript Date对象的setUTCMonth()方法 JavaScript的setUTCMonth()方法设置对象UTC月份部分。方法接受一个整数,表示要设置的UTC月份如果该参数超出了JavaScript所能表示的范围,则自动调整为相应…

    JavaScript 2023年5月11日
    00
  • 详解微信小程序中var、let、const用法与区别

    详解微信小程序中var、let、const用法与区别 在微信小程序的开发中,我们常常会使用到JS语言中的变量。而在ES6中,我们可以通过var、let、const来声明变量。这三个关键字有什么区别呢?下面就来详细讲解一下。 var var是ES5中定义的声明变量的关键字。它有以下特点: var声明的变量作用域为函数体内,如果不在函数内则为全局变量。 var声…

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