html,css,js实现的一个钟表

效果如图:

实现代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Clock</title>
    <style>
        body {
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            width: 100vw;
            height: 100vh;
            background: #2e1f27;
        }
        p{
            color: #854d27;
        }
        code{
            color: #f4c950;
        }
        .clock {
            --clock-width: 50vmin;
            width: var(--clock-width);
            height: var(--clock-width);
            position: relative;
            overflow: hidden;
            border: 6px solid #f4c950;
            border-radius: 50%;
        }
        .clock:after {
            content: ‘‘;
            position: absolute;
            z-index: 10;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            width: 6px;
            height: 6px;
            background: #d0b8ac;
            border-radius: 50%;
        }
        .scaleContainer {
            --scale-width: 2px;
            margin: 0;
            padding: 0;
            width: var(--scale-width);
            height: calc(var(--clock-width) / 2 + 4px);
            position: absolute;
            bottom: calc(var(--clock-width) / 2);
            left: calc((var(--clock-width) - var(--scale-width)) / 2);
            /*background: #f4c950;*/
            transform-origin: center bottom;
        }
        .scaleContainer:nth-of-type(5n + 5) {
            --scale-width: 5px;
            width: var(--scale-width);
            left: calc((var(--clock-width) - var(--scale-width)) / 2);
        }
        .scale{
            height: calc(var(--clock-width) / 22);
            background: #f4c950;
        }
        .scaleContainer:nth-of-type(5n + 5) .scale{
            height: calc(var(--clock-width) / 16);
        }
        .hand {
            --hand-width: 4px;
            --hand-length: calc(var(--clock-width) / 2 - 6px);
            width: var(--hand-width);
            height: var(--hand-length);
            background: #d0b8ac;
            position: absolute;
            bottom: calc(var(--clock-width) / 2);
            left: calc((var(--clock-width) - var(--hand-width)) / 2);
            transform-origin: center bottom;
            z-index: 20;
        }
        .hour-hand{
            height: 15vmin;
        }
        .minute-hand {
            --hand-height: 20vmin;
            height: var(--hand-height);
        }
        .second-hand {
            --hand-width: 2px;
            width: var(--hand-width);
            left: calc((var(--clock-width) - var(--hand-width)) / 2);
        }
    </style>
</head>
<body>
<div class="clock">

    <div class="hand hour-hand"></div>
    <div class="hand minute-hand"></div>
    <div class="hand second-hand"></div>
</div>
<p>Responsive dimension via CSS <code>cal</code> and <code>var</code>.</p>

<script>
    const $clock = document.querySelector(‘.clock‘);
    for (let i = 1; i <= 60; i++) {
        const $scaleContainer = document.createElement(‘p‘);
        $scaleContainer.classList.add(‘scaleContainer‘);
        $scaleContainer.style.transform = `rotate(${6 * i}deg)`;
        const $scale = document.createElement(‘div‘);
        $scale.classList.add(‘scale‘);
        // $scale.textContent = `${i}`;
        $scaleContainer.appendChild($scale);
        $clock.appendChild($scaleContainer);
    }

    const $hourHand = document.querySelector(‘.hour-hand‘);
    const $minuteHand = document.querySelector(‘.minute-hand‘);
    const $secondHand = document.querySelector(‘.second-hand‘);

    function tick() {
        const date = new Date();
        const CS = date.getSeconds();
        const Sdeg = CS / 60 * 360;
        const CM = date.getMinutes();
        const Mdeg = CM / 60 * 360 + 360 / 60 / 60 * CS;
        const Hdeg = date.getHours() / 12 * 360 + 360 / 12 / 60 * CM + 360 / 12 / 60 / 60 * CS;
        $hourHand.style.transform = `rotate(${Hdeg}deg)`;
        $minuteHand.style.transform = `rotate(${Mdeg}deg)`;
        $secondHand.style.transform = `rotate(${Sdeg}deg)`;
    }

    tick();

    setInterval(tick, 1000);
</script>
</body>
</html>

原文地址:https://www.cnblogs.com/yingtoumao/p/11756144.html

时间: 2024-11-06 21:15:04

html,css,js实现的一个钟表的相关文章

利用前端三大件(html+css+js)开发一个简单的“todolist”项目

一.介绍 todolist,即待办事项.在windows android ios上参考微软家出的那个To-Do应用,大概就是那样的.我这个更简单,功能只有"待办" "已完成"两项,并且是在浏览器打开的. 二.界面和文件结构这些... 实际在浏览器中的网页如下: 在subline中的文件结构有index.html.index.css.index.js各一个,如下图: 三.程序 参考注释即可看懂. (1)index.html文件 1 <!DOCTYPE html&

实验楼一个很好的IT学习平台,包括JAVA,LINUX,HTML,C,CSS,JS等适合初学者

实验楼一个很好的IT学习平台,包括JAVA,LINUX,HTML,C,CSS,JS等适合初学者,网址 网址链接点击打开

一个html+css+js的轮播图片 -- 仅供参考

好久没打网页程序了,标签和css 之类都忘的跟空白一样,花几天时间把丢掉的东西给捡起来. 附上 html+css+js 代码 html: 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3

WordPress引入css/js方法总结

WordPress引入css/js方法很多,条件很多.如何全局加载,或仅在某些页面精准加载,什么时候需要先注册脚本再加载,本文希望找到最简单的方式,并给出探索更多方法的途径. 在前台加载css/js 用wp_enqueue_script()函数加载js,用wp_enqueue_style()加载css,加载资源的位置(action)只有一个——wp_enqueue_scripts. 用wp_enqueue_系列函数可以更好的处理脚本样式表的依赖关系,防止重复加载,以twentyfifteen主题

asp.net MVC发布iis无法加载css,js和图片

今天真够郁闷的,遇到了在本地能运行的项目到了iis服务器那里就不行了,无法加载css,js和图片,这里说清楚一下先,关于asp.net 的MVC中这样的情况其实不少,但是之前遇到的是在visual studio运行的时候就已经不能加载css和js文件,那种情况一般都是路径的问题,改下页面代码就行,网上教程不少,而这个其实是一个CMS的开源系统.Orchard,国庆实在无聊,就想玩下这个asp.net MVC框架的CMS,而且是微软推荐的开源CMS,提到了就来说说这个吧,和国内的其他CMS对比起来

原生js写的一个弧形菜单插件

弧形菜单是一种半弧式或者全弧形菜单,是一种不同于传统横向或者竖向菜单形式的菜单.最近在网上看到好多人写出了这种效果,于是也尝试自己写了一个. 实现方式:原生态js 主要结构: 1.参数合并 1 var defaultPra = { 2 mainMenuId: "ArcMenu",//主菜单id 3 menuBoxId:"menuBox",//菜单包裹id 4 position: "",//弧形菜单 5 customPosition:"0

HTML/CSS/JS编码规范

最近整理了一份HTML/CSS/JS编码规范,供大家参考.目录:一.HTML编码规范二.CSS编码规范三.JS编码规范 一.HTML编码规范 1. img标签要写alt属性 根据W3C标准,img标签要写alt属性,如果没有就写一个空的.但是一般要写一个有内容的,根据图片想要表达的意思,因为alt是在图片无法加载时显示的文字.如下不太好的写法: <img src="company-logo.svg" alt="ABC Company Logo"> 更好的

Django使用本地css/js文件

在网上看了很多说Django如何使用本地css/js的文章, 但都不能用 今天终于找到一个可以用的, 记录下 在manager.py同层级下创建static文件夹, 里面放上css , js, image等文件或者文件夹 我的文件夹层级 然后很简单,只需在settings.py中进行设置就行, 在末尾添加以下代码 STATIC_URL = '/static/' HERE = os.path.dirname(os.path.abspath(__file__)) HERE = os.path.joi

IIS7的集成模式下如何让自定义的HttpModule不处理静态文件(.html .css .js .jpeg等)请求

今天将开发好的ASP.NET站点部署到客户的服务器上后,发现了一个非常头疼的问题,那么就是IIS7的应用程序池是集成模式的话,ASP.NET项目中自定义的HttpModule会处理静态文件(.html .css .js .jpeg等)请求,而这不是我预期的效果,因为我只想让托管文件(aspx, ascx 及 MVC等)的请求被自定义HttpModule处理,但是我发现在IIS7的集成模式下所有请求都会进入HttpModule被处理. 后来我尝试将IIS7站点下的应用程序池改为了经典模式,这样的话