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日

相关文章

  • 纯js实现的积木(div层)拖动功能示例

    下面是详细的攻略: 1. 概述 本攻略将详细讲解如何实现“纯js实现的积木(div层)拖动功能示例”。实现过程包括以下几个步骤: 设置div元素的拖动属性; 监听鼠标事件; 计算鼠标相对于被拖动元素的偏移量; 根据鼠标移动的位置,对被拖动元素进行实时更新位置; 实现停止拖拽功能。 2. 操作步骤 步骤一:设置div元素的拖动属性 在HTML代码中,我们需要将…

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

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

    JavaScript 2023年6月11日
    00
  • Node.js中使用Buffer编码、解码二进制数据详解

    当我们需要处理二进制数据时,就需要使用到Node.js的Buffer API。Buffer API是用于处理二进制数据的API,可以将数据流转换为Buffer对象,进行编码、解码、拼接、拆分等操作。 创建Buffer对象 首先,我们需要创建一个Buffer对象来存储我们的二进制数据。可以通过下面的几种方式创建: 方法一:通过字符串创建Buffer对象 con…

    JavaScript 2023年5月19日
    00
  • JS网页播放声音实现代码兼容各种浏览器

    为了在网页中播放声音,我们可以使用HTML5音频标签或通过JavaScript代码动态创建audio元素。但由于不同的浏览器对HTML5音频支持的兼容性不同,我们需要编写代码以确保在各种浏览器中都能播放声音。 接下来的攻略将展示如何使用JavaScript创建兼容各种浏览器的网页播放声音的代码。 1. 创建声音对象 首先,我们需要创建一个声音对象。要创建声音…

    JavaScript 2023年6月11日
    00
  • JS数组交集、并集、差集的示例代码

    下面我将介绍JS数组交集、并集、差集的示例代码,让大家有更深入的理解。 JS数组交集 数组交集指的是两个或两个以上数组中共同的元素。下面是一个示例代码: const arr1 = [1, 2, 3, 4, 5]; const arr2 = [3, 4, 5, 6, 7]; const arr3 = [4, 5, 6, 7, 8]; const interse…

    JavaScript 2023年5月27日
    00
  • 一篇文章让你搞清楚JavaScript事件循环

    一篇文章让你搞清楚JavaScript事件循环 什么是事件循环? JavaScript是一门单线程语言,它有一个主线程执行环境(即全局上下文环境),主线程会按照代码的顺序依次执行。然而,由于JavaScript需要处理UI操作、网络请求、定时器等事件,而这些事件需要等待的时间可能非常长,如果按照阻塞式的方式等待,就会影响用户体验。因此,JavaScript采…

    JavaScript 2023年5月28日
    00
  • JavaScript switch case

    JavaScript switch case语句是一种用于多个分支情况的控制流语句。它与if-else语句相似,但要更加简洁和易于阅读。通常来说,switch case可帮助开发人员避免编写过多的if-else嵌套,从而提高代码效率。 下面是JavaScript switch case的语法: switch(expression) { case value1…

    Web开发基础 2023年3月30日
    00
  • uniapp跨页面传值uni.$emit和uni.$on的使用及踩坑实战

    uniapp 跨页面传值:uni.$emit 和 uni.$on 的使用 在一个完整的 uniapp 应用程序中,存在着多个页面组成的应用。有时候我们需要在不同的页面之间传递数据,这时候就要用到 uniapp 提供的跨页面传值方式 —— uni.$emit 和 uni.$on。 1. uni.$emit 和 uni.$on 概述 uni.$emit 和 un…

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