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日

相关文章

  • 关于JavaScript实现动画时动画抖动的原因与解决方法

    关于 JavaScript 实现动画时动画抖动的原因与解决方法,我给你详细讲解。 原因 动画抖动通常是由于浮点数像素值引起的。由于屏幕在每个像素处都是有限制的,所以如果动画的像素值为小数,则会做出近似处理,这可能会导致动画抖动。 举个例子,在动画过程中,由于动画属性的值改变比较频繁,浮点数像素值也变得更加不可避免,浏览器会在每次重绘时尝试平滑过渡,这样就会导…

    JavaScript 2023年6月10日
    00
  • JS加密插件CryptoJS实现的Base64加密示例

    下面是“JS加密插件CryptoJS实现的Base64加密示例”的完整攻略,包含两个示例: 1. 什么是CryptoJS? CryptoJS是一个纯JavaScript实现的加密库,提供了很多常见的加密算法和加密模式,例如AES、DES、TripleDES、MD5、SHA-1、SHA-256等。它支持的加密方式很全面,使用简便,而且在前端中使用也非常方便。 …

    JavaScript 2023年5月19日
    00
  • javascript 基础简介 适合新手学习

    JavaScript 基础简介 适合新手学习 JavaScript 是一种广泛应用于编写网页脚本的编程语言。学习 JavaScript 对于新手来说是一项基础工作,本文章为新手介绍 JavaScript 的基础语法、数据类型、流程控制以及实例应用。 JavaScript 基础语法 JavaScript 代码可嵌入 HTML 页面的 \ 标签中。有两种方式,一…

    JavaScript 2023年5月18日
    00
  • JavaScript页面倒计时功能完整示例

    我将为您详细讲解如何实现Javascript页面倒计时功能的完整攻略,下面是完整步骤: 步骤一:准备工作 首先,在HTML页面中创建一个空白的 元素,用于展示倒计时。我们可以通过HTML代码将其嵌入到我们的页面中。 <div id="countdown"></div> 接下来,在JavaScript脚本中,我们需要…

    JavaScript 2023年5月27日
    00
  • JavaScript实现网页加载进度条代码超简单

    介绍 在这里,我将为您介绍如何使用JavaScript创建网页加载进度条。网页加载进度条是增加用户体验和减少用户等待时间的一种简单方法。它可以在页面加载过程中告诉用户页面是否正在加载,以及有多少量未加载。使用JavaScript实现网页加载进度条并不难,让我们开始吧! 步骤 创建 HTML 页面 首先,我们需要创建一个 HTML 页面来包含进度条。我们将创建…

    JavaScript 2023年6月11日
    00
  • 详解JS中定时器setInterval和setTImeout的this指向问题

    下面我将用Markdown语言,来给大家分享一篇关于JS中setInterval和setTimeout的this指向问题的详解攻略。 一、问题描述 在使用setInterval或setTimeout的时候,我们经常会遇到this指向问题,导致定时器中的代码无法访问到原始对象中的属性和方法。 二、原因分析 在JS中,setInterval或setTimeout…

    JavaScript 2023年6月10日
    00
  • JavaScript中反正弦函数Math.asin()的使用简介

    Math.asin()函数是一个JavaScript中的反正弦函数,用于计算一个数(参数)的反正弦值并返回结果。其函数定义如下: Math.asin(x) 其中x为一个介于-1与1之间的数值,表示要计算其反正弦值的数。函数返回值的单位为弧度,且其取值范围为[-π/2,π/2]。 下面是两个示例,说明Math.asin()函数的使用方法: 示例一:计算一个数字…

    JavaScript 2023年5月27日
    00
  • 史上最全JavaScript常用的简写技巧(推荐)

    史上最全JavaScript常用的简写技巧(推荐) 在JavaScript编写代码时,我们经常需要用到很多语句,例如if语句、for循环、函数等等。这些语句可以通过使用JavaScript的简写技巧来让我们的代码更加简短,更加易读。下面就是一些常用的JavaScript简写技巧。 1. 赋值运算符的简写 1.1 增量与减量 我们可以使用“++”和“–”来实…

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