js实现时钟定时器

yizhihongxing

关于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日

相关文章

  • 12个常用的js正则表达式

    12个常用的JS正则表达式 正则表达式是一种用于匹配文本中特定模式的工具,它在JS编程中使用广泛。本文列举了12个常用的JS正则表达式及其用法。 验证用户名 const regex = /^[a-zA-Z][a-zA-Z0-9_]{4,15}$/; 该正则表达式用于验证用户名是否合法,用户名应包含5-16位字符,必须以字母开头,后面可跟字母、数字或下划线。 …

    JavaScript 2023年6月10日
    00
  • 详解JavaScript之Array.reduce源码解读

    详解JavaScript之Array.reduce源码解读 简介 Array.reduce() 是 Javascript 中一个十分有用的函数,它可以将数组转化为单个值。它的使用方式是这样的 array.reduce(callback[, initialValue]) ,其中 callback 是回调函数,initialValue是初始值。在本文中,我们将通…

    JavaScript 2023年5月27日
    00
  • 实现JavaScript中继承的三种方式

    实现JavaScript中继承的三种方式包括:原型链继承、构造函数继承和组合继承。 1. 原型链继承 原型链继承是通过将子类的原型指向父类实例来实现继承的。代码示例如下: // 父类 function Person(name) { this.name = name; } Person.prototype.sayHello = function() { con…

    JavaScript 2023年5月27日
    00
  • JS跨浏览器解析XML应用过程详解

    JS跨浏览器解析XML应用过程详解 在前端开发中,常常需要使用XML数据格式,而不同浏览器的XML解析方式有所不同,此时需要JS跨浏览器解析XML,以下是详细的应用过程: 1. 创建XMLHttpRequest对象 在JS中,我们可以使用XMLHttpRequest对象进行XML数据的读取和发送。在创建XMLHttpRequest对象时,需要根据当前浏览器选…

    JavaScript 2023年6月10日
    00
  • layui form.render(‘select’, ‘test2’) 更新渲染的方法

    让我来详细讲解一下“layui form.render(‘select’, ‘test2’) 更新渲染的方法”。 在layui表单中,通过form.render(‘select’)渲染下拉框可以轻松实现下拉框选择功能,但是如果动态变化下拉框的选项,仍要重新渲染下拉框,传统的JavaScript方法会导致下拉框默认选项变成‘请选择’,影响用户体验,此时就需要使…

    JavaScript 2023年6月10日
    00
  • 纯原生js实现table表格的增删

    下面是关于纯原生JS实现table表格的增删的攻略: 实现前必备知识 在开始实现表格的增删功能之前,有几点需要准备: HTML表格的结构 css样式控制 表格数据的动态绑定 监听HTML元素的事件 通过JS操作HTML元素 实现过程 首先创建一个空表格,代码如下: “`html Name Age Gender 操作 “` 接着,在JS代码里,声明一个对象…

    JavaScript 2023年6月10日
    00
  • AngularJS使用angular-formly进行表单验证

    AngularJS是目前比较流行的前端框架之一,用来构建复杂的单页应用程序。表单验证是前端开发过程中必不可少的环节。在AngularJS中,可以使用angular-formly库简化表单验证的开发过程。下面是使用angular-formly进行表单验证的详细攻略。 什么是angular-formly angular-formly是一个AngularJS表单生…

    JavaScript 2023年6月10日
    00
  • js中通过split函数分割字符串成数组小例子

    JS中通过split函数分割字符串成数组,可以帮助我们方便地对字符串进行处理,下面我们来讲解具体的攻略: 步骤1:理解split()函数 split函数是JS中字符串的一个函数,用来分割字符串,将字符串分割成一个数组。在分割字符串时,我们可以指定一个分隔符,如空格、逗号、分号等等。 步骤2:编写示例代码 下面通过两个代码示例来讲解,具体内容如下: 示例一:分…

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