JavaScript实现抖音罗盘时钟

下面我将详细讲解如何用JavaScript实现抖音罗盘时钟。

准备工作

在编写JavaScript代码之前,我们需要先准备好HTML和CSS文件。HTML文件中包含了页面布局的基本结构,CSS文件中定义了页面对应的样式。具体代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>抖音罗盘时钟实现</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="center">
        <div id="hour" class="hand hour-hand"></div>
        <div id="minute" class="hand min-hand"></div>
        <div id="second" class="hand second-hand"></div>
        <div class="number-12 number"><span>12</span></div>
        <div class="number-1 number"><span>1</span></div>
        <div class="number-2 number"><span>2</span></div>
        <div class="number-3 number"><span>3</span></div>
        <div class="number-4 number"><span>4</span></div>
        <div class="number-5 number"><span>5</span></div>
        <div class="number-6 number"><span>6</span></div>
        <div class="number-7 number"><span>7</span></div>
        <div class="number-8 number"><span>8</span></div>
        <div class="number-9 number"><span>9</span></div>
        <div class="number-10 number"><span>10</span></div>
        <div class="number-11 number"><span>11</span></div>
    </div>
    <script src="app.js"></script>
</body>
</html>
.center {
    width: 400px;
    height: 400px;
    border-radius: 50%;
    border: 20px solid #eee;
    margin: 50px auto;
    position: relative;
}
.number {
    width: 10px;
    height: 10px;
    position: absolute;
    top: 10px;
    left: 50%;
    transform: translateX(-50%);
}
.number-12 {
    top: 30%;
}
.number-1 {
    top: 40%;
    left: 80%;
}
.number-2 {
    top: 50%;
    left: 90%;
}
.number-3 {
    top: 60%;
    left: 95%;
}
.number-4 {
    top: 70%;
    left: 90%;
}
.number-5 {
    top: 80%;
    left: 80%;
}
.number-6 {
    bottom: 10px;
    left: 50%;
    transform: translateX(-50%);
}
.number-7 {
    top: 80%;
    left: 20%;
}
.number-8 {
    top: 70%;
    left: 10%;
}
.number-9 {
    top: 60%;
    left: 5%;
}
.number-10 {
    top: 50%;
    left: 10%;
}
.number-11 {
    top: 40%;
    left: 20%;
}
.hand {
    position: absolute;
    width: 10px;
    height: 50%;
    background-color: #333;
    transform-origin: bottom center;
    transition: all .05s;
    transition-timing-function: cubic-bezier(.1, 2.7, 0.58, 1);
}
.hour-hand {
    height: 30%;
    z-index: 3;
    background-color: #333;
}

在HTML文件中,我们创建了一个div元素,名为“center”,并将其样式设置为:

  • 宽度和高度均为400px
  • 边框颜色为灰色(#eee),边框粗细为20px
  • 圆角半径为50%
  • 居中对齐

同时,我们在div元素中嵌套了12个div元素,每个元素都代表了一个数字。并且给每个数字块添加了一个类名,用来设置样式。

在CSS文件中,我们对各个元素的样式进行了定义。其中:

  • .number-12表示数字12的样式
  • .hand表示时针、分针、秒针的样式
  • .hour-hand表示时针的样式

实现代码

以下是实现抖音罗盘时钟的JavaScript示例代码:

const hourHand = document.querySelector('#hour');
const minHand = document.querySelector('#minute');
const secondHand = document.querySelector('#second');

function setDate() {
  const now = new Date();
  const seconds = now.getSeconds();
  const secondsDegrees = ((seconds / 60) * 360) + 90;
  secondHand.style.transform = `rotate(${secondsDegrees}deg)`;

  const mins = now.getMinutes();
  const minsDegrees = ((mins / 60) * 360) + ((seconds / 60) * 6) + 90;
  minHand.style.transform = `rotate(${minsDegrees}deg)`;

  const hour = now.getHours();
  const hourDegrees = ((hour / 12) * 360) + ((mins / 60) * 30) + 90;
  hourHand.style.transform = `rotate(${hourDegrees}deg)`;
}

setInterval(setDate, 1000);

我们首先使用querySelector()方法在HTML页面中获取到了三个div元素,分别代表时针、分针和秒针。之后,我们定义了setDate()函数,用来更新每个针所指的位置。

setDate()函数中,我们先获取当前的时间(now),然后根据当前时间计算出时针、分针、秒针所要指向的角度(hourDegreesminsDegreessecondsDegrees)。具体的计算方式是:

  • 秒针指向的角度为 secondsDegrees = ((seconds / 60) * 360) + 90
  • 分针指向的角度为 minsDegrees = ((mins / 60) * 360) + ((seconds / 60) * 6) + 90
  • 时针指向的角度为 hourDegrees = ((hour / 12) * 360) + ((mins / 60) * 30) + 90

最后,我们使用setInterval()方法来每秒钟调用一次setDate()函数,来更新针的位置。

示例说明

示例一

假设当前时间是下午2点30分30秒,此时时针应该指向2,分针应该指向6,秒针应该指向180度。

根据计算公式,时针应该指向的角度为 ((hour / 12) * 360) + ((mins / 60) * 30) + 90 = ((14 / 12) * 360) + ((30 / 60) * 30) + 90 = 150℃,分针指向的角度为 ((mins / 60) * 360) + ((seconds / 60) * 6) + 90 = (30 / 60) * 360 + (30 / 60) * 6 + 90 = 195℃,秒针指向的角度为 ((seconds / 60) * 360) + 90 = (30 / 60) * 360 + 90 = 270℃

因此,根据以上示例,我们可以检验代码是否正确。

示例二

我们可以通过修改CSS样式,来实现抖音罗盘时钟的变化。下面是针的动画效果示例:

.hand {
  animation: shake 0.05s ease-in-out infinite;
}

@keyframes shake {
  0% {
    transform: rotateZ(-15deg);
  }
  25% {
    transform: rotateZ(15deg);
  }
  50% {
    transform: rotateZ(-15deg);
  }
  75% {
    transform: rotateZ(15deg);
  }
  100% {
    transform: rotateZ(-15deg);
  }
}

我们向需要抖动的元素上添加一个动画样式animation: shake 0.05s ease-in-out infinite;,并在CSS文件中定义@keyframes shake这个动画,设置元素的抖动效果。这会让指针像抖音效果一样,动态地抖动起来。

如下面这个示例:https://codepen.io/cathy-lin/pen/JjNNrqj

总结

以上就是实现抖音罗盘时钟的完整攻略了。我们需要先准备好HTML和CSS文件,再通过JavaScript代码实现抖音罗盘时钟。同时,我们也可以通过修改CSS样式来实现不同的视觉效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript实现抖音罗盘时钟 - Python技术站

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

相关文章

  • js浮点数精确计算(加、减、乘、除)

    下面是js浮点数精确计算的完整攻略: 问题描述 在JavaScript中对浮点数进行计算时,由于采用 IEEE 754 标准,浮点数会存在精度误差。例如: 0.1 + 0.2 // 返回0.30000000000000004 而不是我们期望的 0.3。这种精度误差可能会在一些需要精确计算的场景下带来问题。本文将介绍如何使用JavaScript实现浮点数的精确…

    JavaScript 2023年6月10日
    00
  • JavaScript数组reduce()方法的语法与实例解析

    JavaScript数组reduce()方法是常见的数组处理方法之一,它可以将数组中的所有元素通过一个指定的函数进行计算,得到一个最终的结果。 语法 reduce()方法的语法如下: arr.reduce(callback,[initialValue]) 其中,callback表示用于处理数组元素的函数,initialValue则表示指定的初始值。 call…

    JavaScript 2023年5月27日
    00
  • 使用 JS 复制页面内容的三种方案

    下面是使用 JS 复制页面内容的三种方案的完整攻略: 一、使用 document.execCommand() 方法 1. 步骤 将待复制的内容放到一个元素中,例如一个 div 标签,在这里我们以一个具有 class 为 “copy-content” 的 div 块为例。 html<div class=”copy-content”> <p&g…

    JavaScript 2023年6月11日
    00
  • JS求解两数之和算法详解

    JS求解两数之和算法详解 什么是两数之和算法? 两个整数的和就是将这两个数加起来得到的数。而两数之和算法是指在给定一组整数的情况下,找到其中两个数之和等于给定目标值的两个数。 算法的实现步骤 循环遍历整个数列,固定一个数,得到另一个数。 在剩下的数列中循环查找另一个数(目标值减去当前数),如果查找到,则说明找到了答案。 返回两个数的下标。 代码示例1 下面是…

    JavaScript 2023年5月28日
    00
  • JS module的导出和导入的实现代码

    一、JS Module导出代码实现攻略 JavaScript模块通过导出可以将模块中定义的变量、函数、类等内容暴露给外部调用。常见的JS模块导出方式包括:ES6模块、CommonJS模块和AMD模块等。以下是关于如何通过ES6模块进行导出的实现攻略: 使用export关键字将模块中定义的内容导出,导出内容可以是变量、函数、类等; 如果需要导出多个变量或函数,…

    JavaScript 2023年5月27日
    00
  • JavaScript 详解预编译原理

    JavaScript 详解预编译原理 什么是预编译 预编译是 JavaScript 在运行代码之前先对代码进行处理的一个过程。 预编译过程中,JavaScript 引擎会遍历当前作用域内的所有代码,然后将变量和函数名提前声明,形成一个预编译作用域。 预编译过程简介 预编译过程分为三个步骤,分别是变量声明、函数声明和变量赋值。 变量声明 在预编译阶段,Java…

    JavaScript 2023年6月11日
    00
  • js运动事件函数详解

    JS运动事件函数详解 在JS中,事件函数是编写交互逻辑的重要部分。其中,运动事件函数可以实现对象的平移、缩放、旋转等效果。本文将详细讲解JS中的运动事件函数,包括常见的函数、使用注意事项和两个示例说明。 常见的运动事件函数 以下是JS常用的运动事件函数: setInterval():重复调用一个函数或执行一段代码,间隔一定的时间(以毫秒为单位)。 setTi…

    JavaScript 2023年5月27日
    00
  • JS获取url参数,JS发送json格式的POST请求方法

    JS获取url参数: 在JavaScript中获取url参数可以使用location对象的search属性或URLSearchParams API。 使用search属性: // 获取url参数 const urlParams = new URLSearchParams(window.location.search); // 获取具体参数 const id …

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