JavaScript实现抖音罗盘时钟

yizhihongxing

下面我将详细讲解如何用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浏览器本地存储store.js介绍及应用

    JS浏览器本地存储store.js介绍及应用 简介 浏览器本地存储是前端开发中常用的技术之一,通过它,我们可以将数据存储在用户本地而不是服务器上,从而实现更快的读写性能,以及离线使用。store.js就是一个用于简化本地存储操作的轻量级JavaScript库。 安装 store.js可以直接通过CDN引入,也可以使用npm进行安装。 通过CDN引入: &lt…

    JavaScript 2023年6月11日
    00
  • 原生js开发的日历插件

    原生JS开发日历插件的完整攻略包含以下几个步骤: 1. 确定需求和功能 在开发日历插件之前,我们需要确定该插件所需实现的功能和需求,如:显示当前日历、搜索指定日期、显示日程安排等等。 2. 设计日历插件的界面 根据我们的需求和功能,我们可以开始设计日历插件的整体界面和交互效果。可以考虑使用HTML/CSS来实现,同时要考虑兼容性和响应式设计。 3. 实现日历…

    JavaScript 2023年6月11日
    00
  • 跟我学习javascript的闭包

    跟我学习JavaScript的闭包攻略 什么是闭包? 在JavaScript中,闭包是指一个函数可以访问并操作定义在其它函数内部的变量。 具体来说,当一个函数返回另一个函数时,返回的函数可以访问其父级函数的变量,这个返回的函数就是一个闭包。 为什么需要使用闭包? 使用闭包有以下几个好处: 私有化变量: 为变量提供私有化处理,保护不被外部所访问,实现数据的安全…

    JavaScript 2023年5月27日
    00
  • 一些主流JS框架中DOMReady事件的实现小结

    下面我介绍一下“一些主流JS框架中DOMReady事件的实现小结”的完整攻略。 标题 概述 文档对象模型(DOM)由浏览器创建,表示网页的结构。DOM Ready(文档已准备就绪)是在页面加载完成后,但在所有图像和外部资源完成加载和处理之前运行的代码的事件。 在浏览器解析DOM、CSS,执行脚本、布局和绘制期间,大多数浏览器都支持两个事件:load 和 DO…

    JavaScript 2023年6月10日
    00
  • JS中Location使用详解

    JS中Location使用详解 概述 Location是一个包含当前URL相关信息的对象,它是浏览器原生提供的全局对象。使用Location对象可以获取当前URL、跳转页面、刷新页面、修改URL等操作。 Location的属性 href 用于获取或者设置当前页面的完整URL。 示例: console.log(location.href); // 输出当前页面…

    JavaScript 2023年6月11日
    00
  • 纯js模仿windows系统日历

    下面是详细的“纯js模仿windows系统日历”的攻略。 确定需求 在开始实现之前,我们需要明确我们要实现的功能和样式。通过分析windows系统日历,我们需要实现以下功能:展示年、月、日;选择日期;展示节日;展示农历等。 确定技术栈 由于需要实现前端交互和展示,我们可以选用纯js实现,同时可以使用第三方库例如moment.js或day.js来处理日期以及节…

    JavaScript 2023年5月27日
    00
  • javascript之对系统的toFixed()方法的修正

    前言: 在 Javascript 中,toFixed() 方法可以将一个数字保留指定位数的小数。但是这个方法存在一个问题,对于某些数字在小数部分保留时可能会出现精度错误。本文将介绍如何修正toFixed()方法在某些情况下出现的精度错误。 修正toFixed()方法的代码: 我们将修正后的代码命名为toFixedNew()方法。toFixedNew()方法可…

    JavaScript 2023年6月10日
    00
  • JS中FormData类实现文件上传

    当需要上传文件时,可以使用JS中的FormData类来实现。下面是实现文件上传的完整攻略: 创建一个表单 首先,要在HTML中创建一个表单,指定具体的上传文件的路径和上传方法: <form action="upload.php" method="post" enctype="multipart/form…

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