JS实现页面炫酷的时钟特效示例

下面我将详细讲解如何使用JS实现页面炫酷的时钟特效。

第一步:HTML结构

首先,在HTML中创建一个时钟的容器,可以使用<div>标签包裹起来,为其添加一个id属性,以便JS能够准确定位到该元素。

<div id="clock"></div>

第二步:CSS样式

接着,为时钟容器添加CSS样式。我们可以先将时钟容器的大小和边框样式设置一下。

#clock {
  width: 200px;
  height: 200px;
  border: 5px solid #333;
  border-radius: 50%;
  position: relative;
}

紧接着,为时针、分针和秒针分别创建CSS样式,并设置其宽度、长度和背景颜色等属性。

#hour-hand {
  width: 8px;
  height: 60px;
  background-color: #333;
  position: absolute;
  left: 50%;
  bottom: 50%;
  transform-origin: 50% 100%;
}

#minute-hand {
  width: 6px;
  height: 80px;
  background-color: #666;
  position: absolute;
  left: 50%;
  bottom: 50%;
  transform-origin: 50% 100%;
}

#second-hand {
  width: 4px;
  height: 100px;
  background-color: #999;
  position: absolute;
  left: 50%;
  bottom: 50%;
  transform-origin: 50% 100%;
}

第三步:JS实现

接着是重头戏,JS实现时钟特效。我们需要获取当前时、分、秒的值,并将其转换为对应的角度。代码如下:

function updateClock() {
  var now = new Date();
  var hour = now.getHours();
  var minute = now.getMinutes();
  var second = now.getSeconds();

  var hourAngle = (hour % 12 + minute / 60) * 30;
  var minuteAngle = minute * 6;
  var secondAngle = second * 6;

  document.getElementById("hour-hand").style.transform = "rotate(" + hourAngle + "deg)";
  document.getElementById("minute-hand").style.transform = "rotate(" + minuteAngle + "deg)";
  document.getElementById("second-hand").style.transform = "rotate(" + secondAngle + "deg)";
}

setInterval(updateClock, 1000);

上述代码中,updateClock()函数是核心方法,每秒钟执行一次。var now = new Date()获取当前时间,var hour = now.getHours()获取当前小时数,var minute = now.getMinutes()获取当前分钟数,var second = now.getSeconds()获取当前秒数。通过这些值,计算出时针、分针和秒针的角度,进而通过style属性设置对应的CSS属性。

示例说明1:指针颜色和长度可配置

通常默认时针、分针和秒针的颜色和长度是一样的,为了让这个时钟更加炫酷,我们可以将这些属性暴露出来,让用户可以配置指针的颜色和长度。代码如下:

function updateClock(config) {
  var now = new Date();
  var hour = now.getHours();
  var minute = now.getMinutes();
  var second = now.getSeconds();

  var hourAngle = (hour % 12 + minute / 60) * 30;
  var minuteAngle = minute * 6;
  var secondAngle = second * 6;

  document.getElementById("hour-hand").style.transform = "rotate(" + hourAngle + "deg)";
  document.getElementById("hour-hand").style.height = config.hourLength + "px";
  document.getElementById("hour-hand").style.backgroundColor = config.hourColor;

  document.getElementById("minute-hand").style.transform = "rotate(" + minuteAngle + "deg)";
  document.getElementById("minute-hand").style.height = config.minuteLength + "px";
  document.getElementById("minute-hand").style.backgroundColor = config.minuteColor;

  document.getElementById("second-hand").style.transform = "rotate(" + secondAngle + "deg)";
  document.getElementById("second-hand").style.height = config.secondLength + "px";
  document.getElementById("second-hand").style.backgroundColor = config.secondColor;
}

var defaultConfig = {
  hourColor: "#333",
  minuteColor: "#666",
  secondColor: "#999",
  hourLength: 60,
  minuteLength: 80,
  secondLength: 100
};

setInterval(function() {
  updateClock(defaultConfig);
}, 1000);

示例说明2:支持动态调整时钟大小

为了让页面中的时钟适应不同设备分辨率的需求,我们还可以支持动态调整时钟大小,这里使用范围为10%到100%。代码如下:

@media (max-width: 768px) {
  #clock {
    width: 100px;
    height: 100px;
  }
}

@media (min-width: 769px) and (max-width: 1200px) {
  #clock {
    width: 150px;
    height: 150px;
  }
}

@media (min-width: 1201px) {
  #clock {
    width: 200px;
    height: 200px;
  }
}
function updateClock(config, size) {
  var now = new Date();
  var hour = now.getHours();
  var minute = now.getMinutes();
  var second = now.getSeconds();

  var hourAngle = (hour % 12 + minute / 60) * 30;
  var minuteAngle = minute * 6;
  var secondAngle = second * 6;

  document.getElementById("hour-hand").style.transform = "rotate(" + hourAngle + "deg)";
  document.getElementById("hour-hand").style.height = config.hourLength * size / 100 + "px";
  document.getElementById("hour-hand").style.backgroundColor = config.hourColor;

  document.getElementById("minute-hand").style.transform = "rotate(" + minuteAngle + "deg)";
  document.getElementById("minute-hand").style.height = config.minuteLength * size / 100 + "px";
  document.getElementById("minute-hand").style.backgroundColor = config.minuteColor;

  document.getElementById("second-hand").style.transform = "rotate(" + secondAngle + "deg)";
  document.getElementById("second-hand").style.height = config.secondLength * size / 100 + "px";
  document.getElementById("second-hand").style.backgroundColor = config.secondColor;
}

var defaultConfig = {
  hourColor: "#333",
  minuteColor: "#666",
  secondColor: "#999",
  hourLength: 60,
  minuteLength: 80,
  secondLength: 100
};

var defaultSize = 100;
setInterval(function() {
  updateClock(defaultConfig, defaultSize);
}, 1000);

document.querySelector("#size").addEventListener("input", function(e) {
  defaultSize = parseInt(e.target.value);
  updateClock(defaultConfig, defaultSize);
});

以上两种示例可以为实现页面炫酷的时钟特效提供一些思路和实现方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS实现页面炫酷的时钟特效示例 - Python技术站

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

相关文章

  • 浅谈spring中isolation和propagation的用法

    我们来一步步详细讲解。 简介 在Spring中,@Transactional注解可以用于标注事务处理的方法,其中isolation和propagation两个属性用来设置事务的隔离级别和传播特性。本文将主要围绕这两个属性展开讲解。 隔离级别 事务隔离级别是解决数据库并发访问引发的一系列问题的标准。Spring框架提供了五种不同的隔离级别,分别是: ISOLA…

    JavaScript 2023年6月11日
    00
  • js智能获取浏览器版本UA信息的方法

    获取浏览器版本 UA 信息是前端工程师在日常开发中经常会用到的技能之一。下面提供几种获取浏览器版本的方法。 1. navigator.userAgent navigator.userAgent 返回浏览器的用户代理字符串,通过解析这个字符串可以获取到浏览器的所有信息,包括浏览器类型、版本以及操作系统信息等。因此,这里用正则表达式进行版本号的提取。 const…

    JavaScript 2023年6月11日
    00
  • Json文件格式化方法详解

    Json文件格式化方法详解 什么是Json? Json(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript语言的子集,采用完全独立于编程语言的文本格式来存储和表示数据。Json由于具有简洁和易读的特点,得到了越来越广泛的应用。 Json文件格式化方法详解 在实际的开发中,有时候我们需要处理包含大量数据…

    JavaScript 2023年6月11日
    00
  • Javascript RegExp source 属性

    JavaScript RegExp的source属性 JavaScript的RegExp对象中的source属性是一个字符串,表示正则表达式的文本。该属性只读,不能被修改。 语法 source属性的语法如下: RegExp.source 示例1:使用source属性获取正则表达式的文本 const pattern = /hello/i; console.lo…

    JavaScript 2023年5月11日
    00
  • js实现日历与定时器

    JS实现日历与定时器完整攻略 1. JS实现日历 1.1 核心思路 获取当地时间(年、月、日); 定义一个方法,将获取到的时间以日历的形式渲染到页面中; 监听页面上的事件,实现日历的下一页、上一页功能; 实现日历的跳转到具体某一天的功能。 1.2 代码实现 // 获取当前日期 function getDate() { const today = new Da…

    JavaScript 2023年5月27日
    00
  • JavaScript 学习笔记(六)

    JavaScript 学习笔记(六)主要介绍了函数的使用,包括函数的定义、调用以及函数的参数和返回值。 函数的定义与调用 函数是一段执行特定任务的代码块,可以多次调用。在 Javascript 中,函数定义的语法如下: function functionName(argument1, argument2, …) { // 函数体 return value…

    JavaScript 2023年6月11日
    00
  • javascript读取本地文件和目录方法详解

    JavaScript读取本地文件和目录方法详解 概述 JavaScript是一种可以在页面上运行的脚本语言,其主要作用是改变页面上元素的行为和外观,实现更加友好和丰富的用户交互。在某些场景下,我们需要读取本地文件或目录内容,此时需要借助一些JS库或API来实现。 读取本地文件 使用File API 在HTML5中,有一个File API,该API提供了读取用…

    JavaScript 2023年5月27日
    00
  • javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)

    JavaScript中类的定义及其方式 什么是类 类是面向对象编程中的基本概念之一,它是一个抽象的概念,用来描述一个共性的概念或一些具有相同属性和方法的对象的集合。 在ES6之前,JavaScript中并没有类的概念,但是通过函数和构造函数的方式,可以模拟出类的定义和使用。 定义类的方式 1. 使用函数 通过创建一个函数,来模拟出一个类,然后可以使用new关…

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