存css实现动态时钟背景

在这里插入图片描述

代码实现

<!DOCTYPE html>
<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Title</title>
  <meta name="referrer" content="no-referrer">
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    <meta name="viewport"
          content="width=device-width,initial-scale=1.0,user-scalable=no,minimum-scale=1,maximum-scale=1">
    <meta HTTP-EQUIV="pragma" content="no-cache">
    <meta HTTP-EQUIV="Cache-Control" content="no-cache, must-revalidate">
    <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">
    <meta HTTP-EQUIV="expires" content="0">
    <meta name="viewport"
          content="width=device-width,initial-scale=1,minimum-scale=1, maximum-scale=1, user-scalable=no, viewport-fit=cover"/>
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <meta name="full-screen" content="yes">
    <meta name="x5-fullscreen" content="true">
    <meta name="apple-mobile-web-app-capable" content="yes"/>
    <link href="https://fonts.googleapis.com/css2?family=Poppins:wght@600;900&display=swap" rel="stylesheet">
</head>
<style>
    html{
      background: #000;
      color: #4f4f4f;
      font-size: 1em;
      overflow:hidden;
      font-weight: bold;
    }
    *{
      margin: 0;
      padding: 0;
    }
    span{
      display: block;
      float: left;
    }
    .on{
      color: #d0d0d0;
    }
    .wrapper{
      width: 200px;
      height: 200px;
      position: absolute;
      left:50%;
      top:50%;
      margin-top: -100px;
      margin-left: -100px;
    }
    .wrapper .timebox{
      position: absolute;
      width: 200px;
      height: 200px;
      left:0;
      top:0;
      border-radius: 100%;
      transition: all 0.5s;
    }
    .timebox span{
      transition: all 0.5s;
      float: left;
    }
    .wrapper  .timebox span{
      position: absolute;
      left:50%;
      top:50%;
      width: 40px;
      height: 18px;
      margin-top: -9px;
      margin-left: -20px;
      text-align: right;
    }
</style>

<body>

  <div id="wrapper">
    <div class="timebox nianBox" id="nianBox"></div>
    <div class="timebox yuebox" id="yueBox"></div>
    <div class="timebox riqiBox" id="riqiBox"></div>
    <div class="timebox hourbox" id="hourbox"></div>
    <div class="timebox minutebox" id="minutebox"></div>
    <div class="timebox secondbox" id="secondbox"></div>
  </div>

<script>

  let wrapper = document.getElementById("wrapper");
  let nianBox = document.getElementById("nianBox");
  let yueBox = document.getElementById("yueBox");
  let riqiBox = document.getElementById("riqiBox");
  let hourbox = document.getElementById("hourbox");
  let minutebox = document.getElementById("minutebox");
  let secondbox = document.getElementById("secondbox");

  /*
  * 找所有的东西标签函数
  * */
  let findSiblings = function(tag){
    let parent = tag.parentNode;
    let childs = parent.children;
    let sb = [];
    for(let i=0 ; i <= childs.length-1 ; i++){
      if( childs[i]!==tag){
        sb[sb.length] = childs[i];
      }
    }
    return sb ;
  };

  /*
  * 去掉所有兄弟的类
  * */
  let removeSiblingClass =function(tag){
    let sb = findSiblings(tag);
    for(let i=0;i <= sb.length-1;i++){
      sb[i].className = "";
    }
  };

  let initYear = function(){
    let date = new Date();
    let span = document.createElement("span");
    span.innerHTML = date.getUTCFullYear();
    span.className = "on";
    nianBox.appendChild(span);
  };
  /*
  * 初始化月份函数
  * */
  let initMonth = function(){
    for(let i=1;i<=12; i++){
      let span = document.createElement("span");
      span.innerHTML = i+"月";
      yueBox.appendChild(span);
    }
  };

  // 初始化日期
  let initDate = function(){
    for(let i=1; i<=31; i++){
      let span = document.createElement("span");
      span.innerHTML = i+"日";
      riqiBox.appendChild(span);
    }
  };

  // 初始化小时,分钟,秒
  let initHour = function(){
    for(let i=0; i<=23; i++){
      let h = i ;
      let span = document.createElement("span");
      if( h<10){
        h="0"+h;
      }
      span.innerHTML = h +"点";
      hourbox.appendChild( span );
    }
  };
  let initMinute = function(){
    for(let i=0; i<=59; i++){
      let  f = i ;
      let span = document.createElement("span");
      if( f<10){
        f="0"+f;
      }
      span.innerHTML = f +"分";
      minutebox.appendChild( span );
    }
  };
  let initSecond = function(){
    for(let i=0; i<=59; i++){
      let  miao = i ;
      let span = document.createElement("span");
      if( miao<10){
        miao="0"+miao;
      }
      span.innerHTML = miao +"秒";
      secondbox.appendChild( span );
    }
  };

  // 时间文字样式切换函数
  let changeTime = function(tag){
    tag.className = "on";
    removeSiblingClass(tag);
  };

  /*
  * 初始化日历函数
  * */
  let initRili = function(){
    initYear();
    initMonth(); // 初始化月份
    initDate(); // 初始化日期
    initHour(); // 小时
    initMinute();
    initSecond();
  };

  /*
  * 展示当前时间
  * 参数:mydate 时间对象
  * */
  let  showNow = function(mydate){
    let yue = mydate.getMonth();
    let riqi = mydate.getDate();
    let hour = mydate.getHours();
    let minute = mydate.getMinutes();
    let second = mydate.getSeconds();
    // 时间文字样式切换函数
    changeTime(yueBox.children[yue]);
    changeTime(riqiBox.children[riqi-1]);
    changeTime(hourbox.children[hour]);
    changeTime(minutebox.children[minute]);
    changeTime(secondbox.children[second]);
  };

  // 展示时间圆圈函数
  // tag:目标
  // num:数字数量
  // dis:圆圈半径
  let textRound = function(tag,num,dis){
    let span = tag.children ;
    for(let i=0 ; i<=span.length-1; i++){
      span[i].style.transform="rotate("+ (360/span.length)*i+"deg)  translateX("+dis+"px)" ;
    }
  };
  /*
  * 旋转指定“圆圈”指定度数
  * */
  let rotateTag = function(tag , deg){
    tag.style.transform = "rotate("+deg+"deg)";
  };

  let main = function(){
    initRili(); // 初始化日历

    setInterval(function(){
      let mydate = new Date();
      showNow(mydate); // 展示当前时间
    },1000);
    //  n秒后,摆出圆形
    // setTimeout(function(){
      wrapper.className = "wrapper";
      textRound(nianBox,4,0);
      textRound(yueBox,12,70);
      textRound(riqiBox,31,140);
      textRound(hourbox,24,210);
      textRound(minutebox,60,280);
      textRound(secondbox,60,350);
      setInterval(function(){
        let mydate = new Date();
        rotateTag( yueBox , -30*mydate.getMonth());
        rotateTag( riqiBox , -360/31*(mydate.getDate()-1));
        rotateTag( hourbox , -360/24*mydate.getHours());
        rotateTag( minutebox , -6*mydate.getMinutes());
        rotateTag( secondbox , -6*mydate.getSeconds());
      },1000)
    // },1000)
  };
  main();
</script>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/41739.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

掌握无人机遥感数据预处理的全链条理论与实践流程、典型农林植被性状的估算理论与实践方法、利用MATLAB进行编程实践(脚本与GUI开发)以及期刊论文插图制作等

目录 专题一 认识主被动无人机遥感数据 专题二 预处理无人机遥感数据 专题三 定量估算农林植被关键性状 专题四 期刊论文插图精细制作与Appdesigner应用开发 近地面无人机植被定量遥感与生理参数反演 更多推荐 遥感技术作为一种空间大数据手段&#xff0c;能够从多时、多…

Linux —— 进程状态

目录 一&#xff0c;进程状态分类 二&#xff0c;僵尸进程 三&#xff0c;孤儿进程 一&#xff0c;进程状态分类 进程状态反应进程执行过程中的变化&#xff0c;状态会随外界条件的变化而转换&#xff1b; 三态模型&#xff0c;运行态、就绪态、阻塞态&#xff1b;五态模型…

PageObject+Python+Appium

目录 前言&#xff1a; 简介 功能 常用目录 配置 实例 - 第一次启动 app 实例 - 登录 代码入口实例 结果展示 前言&#xff1a; Page Object模式是一种常用的设计模式&#xff0c;用于组织和管理自动化测试脚本中的页面对象。它将页面的元素和操作封装在一个独立的类…

skbuff.h在哪

今天看来下底层socket的实现&#xff0c;发现很多人都说有个skbuff结构&#xff0c;我就想着去找下这个&#xff0c; cat /include/linux/skbuff.h 结果找不到&#xff0c;查了下&#xff0c;需要下载内核源码 //Ubuntusudo apt install linux-headers-genericdpkg -S skbuff.…

浏览器显示ERR_NETWORK_ACCESS_DENIED,安全设置或防火墙可能正在阻止连接,无法上网

环境: Win10 专业版 HP台式机 问题描述: 浏览器显示ERR_NETWORK_ACCESS_DENIED,安全设置或防火墙可能正在阻止连接,无法上网 1.无线连接状态正常 打不开网站 2.可以ping通百度DNS解析正常 3.防火墙已关闭 这样的错误可能由于多种原因而发生 原因分析 1.防火墙/防…

Unity游戏源码分享-Third Person Controller - Shooter Template v1.3.1

Unity游戏源码分享-Third Person Controller - Shooter Template v1.3.1 功能非常齐全 AI格斗 2.5D 完整工程地址&#xff1a;https://download.csdn.net/download/Highning0007/88057824

SpringCloud学习路线(3)—— Eureka注册中心

一、导引 服务调用出现的问题 服务调用采取的请求地址是静态的&#xff0c;当我们使用服务集群时&#xff0c;很容易造成只能调用固定的微服务上的接口。多个提供者&#xff0c;消费者的使用对象无法确定消费者无法得知提供者的状态 二、Eureka注册中心 &#xff08;一&…

一个小技巧,分分钟搞定新零售!

新零售模式的兴起带来了线上线下销售渠道的整合&#xff0c;而自动售货机作为新零售模式的一种重要形式&#xff0c;提供了便捷的自助购物体验。 自动售货机作为新零售模式的一种典型应用&#xff0c;以其便利性、快捷性和24小时无人值守的特点&#xff0c;深受消费者和商家的青…

【C++】C++入门必备知识详细讲解

C入门必备知识 一、命名空间1. namespace2. namespace 的使用场景 二、了解 C 中的输入和输出三、缺省参数四、函数重载1. 函数重载的概念2. C支持函数重载的原理 五、引用1. 引用的概念2. 引用特性3. 常引用4. 引用的使用场景&#xff08;1&#xff09;做参数&#xff08;传引…

ES系列--打分机制

一、文档打分机制 当你通过关键字搜索相关文档时&#xff0c;可能会出现多个文档&#xff0c;这些文档的顺序是通过一个max_score属性的大小从高到低顺序展现出来的&#xff0c;max_score属性就是我们所说的评分。而这个评分是通过一个文档打分机制计算出来的。 二、打分原理 …

第二章 Android 基础--开发基础

文章目录 1.使用真机调试运行2.Android开发涉及的编程语言3.工程目录结构4.编译配置文件 build.gradle5.清单文件6.界面显示与逻辑处理7.Activity创建与跳转8.练习题 本专栏主要在B站学习视频&#xff1a; B站Android视频链接 本视频范围&#xff1a;P9—P16 工程结构、设计规…

DDOS百科:什么是 DDoS 攻击及如何防护DDOS攻击

一、什么是 DDoS 攻击&#xff1f; 当多台机器一起攻击一个目标&#xff0c;通过大量互联网流量淹没目标或其周围基础设施&#xff0c;从而破坏目标服务器、服务或网络的正常流量时&#xff0c;就会发生分布式拒绝服务(DDoS)攻击。 DDoS允许向目标发送指数级更多的请求&#…

什么是 XSS 攻击,攻击原理是什么

什么是 XSS 攻击&#xff1f; XSS&#xff08;Cross-Site Scripting&#xff09;攻击是一种常见的 Web 安全漏洞&#xff0c;其攻击目标是 Web 应用程序中的用户&#xff0c;攻击者通过在 Web 页面中植入恶意脚本&#xff0c;从而实现窃取用户敏感信息、篡改用户数据等目的。 …

一本通12951917:装箱问题

不知道说什么废话好了 题目 装箱问题 描述 有一个箱子容量为V&#xff08;正整数&#xff0c;0&#xff1c;&#xff1d;V&#xff1c;&#xff1d;20000&#xff09;&#xff0c;同时有n个物品&#xff08;0&#xff1c;n&#xff1c;&#xff1d;30)&#xff0c;每个物品…

安卓进程间通信浅谈

Case: /Users/lucas/AndroidStudioProjects/aidldemo-master 一&#xff1a;操作系统 从操作系统原理去看&#xff0c;进程通信主要有三个方法&#xff1a;共享存储、消息传递、管道通信。 二&#xff1a;安卓中的IPC 进程间通信的几种方式&#xff1a;Intent&#xff08;Bu…

华为产品测评官-开发者之声 - ModelArts 真实体验感想

华为产品测评官&#xff0d;开发者之声 - ModelArts 真实体验感想 我先是在6月17日参加了华为在深圳举办的开发者大会&#xff0c;后面看到群里发的"2023华为产品测评官&#xff0d;开发者之声"活动&#xff0c;简单看了一下体验活动的具体事情&#xff0c;感觉好玩…

超声医疗高压功率放大器ATA-4315技术参数

超声波检查或超声诊断&#xff0c;是一种非侵入性的医学检查方法&#xff0c;它利用了声波的高频振动来观察和评估人体内部的器官和组织。它基于不同密度和组织结构中传播的原理。通过将ultrasound(超声波)传递到身体的特定区域&#xff0c;并记录反射回来的声波&#xff0c;我…

flutter开发实战-svga播放svgaplayer_flutter直播礼物特效等效果使用

flutter开发实战-svga播放svgaplayer_flutter直播礼物特效等效果使用 最近开发过程中用到了SVGA进行播放动画&#xff0c;这里记录一下svgaplayer_flutter使用过程。svga可以做一些非常精美的动画&#xff0c;包括直播的刷礼物(火箭、跑车特效动画)等等。 效果图如下 一、SVG…

分区类型ID一键变身!快速改变分区类型ID的简单方法

分区类型ID是什么&#xff1f; 想要改变分区类型ID&#xff0c;先得明白分区类型ID是什么。大多数电脑用户可能只熟悉分区和分区类型&#xff0c;实际上有5种分区类型&#xff1a;主分区、可扩展固件接口&#xff08;EFI&#xff09;、扩展分区、逻辑分区和Microsoft保留分…

百分点科技苏萌受邀出席首届全国统计与数据科学联合会议

7月11-13日&#xff0c;首届全国统计与数据科学联合会议在北京举行&#xff0c;会议由中国现场统计研究会、中国数学会概率统计分 会、全国工业统计学教学研究会和中国商业统计学会联合主办&#xff0c;北京大学统计科学中心承办&#xff0c;旨在促进统计与数据科学领域发展&a…