翻转时钟效果

news2024/11/15 8:04:12

在这里插入图片描述
时分秒三个部分结构功能完全一致,均有四块构成,上下各两块。
在这里插入图片描述
正面可见,背面不可见,同时需要调整翻转过程中的z-index。
初始状态card2为已经翻转状态。

calendar.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./calendar.css">
</head>

<body>
    <div class="calendar">
        <div class="card-container hour" data-number="00">
            <div class="card card1">00</div>
            <div class="card card2">00</div>
            <div class="card card3">00</div>
            <div class="card card4">00</div>
        </div>
        <div class="a">
           :
        </div>
        <div class="card-container minute" data-number="00">
            <div class="card card1">00</div>
            <div class="card card2">00</div>
            <div class="card card3">00</div>
            <div class="card card4">00</div>
        </div>
        <div class="a">
            :
         </div>
        <div class="card-container seconds" data-number="00">
            <div class="card card1">00</div>
            <div class="card card2">00</div>
            <div class="card card3">00</div>
            <div class="card card4">00</div>
        </div>
    </div>

    <script src="./calendar.js"></script>
</body>

</html>

calendar.css

*{
    margin: 0;
    padding: 0;
}

body{
  background: #868383e6;
}
.calendar{
  margin: 100px auto;
  width: 400px;
  display: flex; 
  font-size: 80px; /* 文本大小 */

}
.a{
  margin-top: 90px;
}

.card-container{    
    position: relative;
    width: 100px;
    height: 100px;
    margin: 100px auto;
    text-align: center;
    background: #868383e6;
    perspective: 100px;
    /* transform-style: preserve-3d; */
    color:#fff;
    border-radius: 10px;
    box-shadow: 006px rgba(0, 0, 0, .5);
}


.card-container::before {
    content: '';
    position: absolute;
    bottom: 50%;
    left: 0;
    right: 0;
    height: 2px;
    background-color: #868383e6;
    z-index: 99;
  }

  .card{
    position: absolute;
    width: 100%;
    height: 50%;
    left: 0;
    top: 0;
    line-height: 100px;
    overflow: hidden;
    background: #000;
    z-index: 10;
    border-radius: 10px;
  }

  

  .card2{
    top: 50%;
    line-height: 0;
    background: #000;
    transform: rotateX(180deg);
    transform-origin: center top;
    backface-visibility: hidden;
  }

  .flip.card2{
    transform: rotateX(0deg);
    transform-origin: center bottom;
    backface-visibility: hidden;  //背面不可见
    transition: 0.5s;
    z-index: 12;
    background: #000;
  }

  .card3{
    top: 0%;
    line-height: 100px;
    background: #000;
  }

  .flip.card3{
    transition: 0.5s;
    transform: rotateX(-180deg);
    transform-origin: center bottom;
    backface-visibility: hidden;
    z-index: 13;
    background: #000;
  }


  .card4{
    top: 50%;
    line-height: 0;
    background: #000;
    z-index: 10;
  }

calender.js


const doms = {
    hour:document.querySelector('.hour'),
    minute:document.querySelector('.minute'),
    seconds:document.querySelector('.seconds'),
}



function processTime(dom,time){
    const curTime = dom.dataset.number
    const nextTime = time.toString().padStart(2, "0");

    //当前时间与下一时间进行比较,相同则不更新
    if(nextTime === curTime){
        return;
    }

    dom.querySelector('.card1').innerHTML = nextTime
    dom.querySelector('.card2').innerHTML = nextTime
    dom.querySelector('.card3').innerHTML =  dom.dataset.number
    dom.querySelector('.card4').innerHTML =  dom.dataset.number
    dom.dataset.number = nextTime
    dom.querySelector('.card2').classList.remove("flip");
    dom.querySelector('.card3').classList.remove("flip");
    dom.querySelector('.card2').clientHeight;
    dom.querySelector('.card2').classList.add("flip");
    dom.querySelector('.card3').classList.add("flip");
}

setInterval(function () {
    processTime(doms.hour,new Date().getHours());
    processTime(doms.minute,new Date().getMinutes())
    processTime(doms.seconds,new Date().getSeconds())
}, 1000)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Excel第26享:模糊查找之Hlookup函数与通配符的嵌套

1、需求描述 如下图所示&#xff0c;现第一行有三个参考值&#xff1a;人S、羊E、猪3&#xff0c;在第三行有5个字&#xff1a;马、牛、人、羊、猪&#xff0c;每个字如果出现在第一行的三个参考值中&#xff0c;就返回该单元格的数值。如&#xff0c;人&#xff0c;就返回“人…

unicloud update 修改

update 修改 使用腾讯云时更新方法必须搭配doc、where方法使用&#xff0c;db.collection(‘test’).update()会报如下错误&#xff1a;param should have required property ‘query’ collection.doc().update(Object data)未使用set、remove更新操作符的情况下&#xff0c…

vue:功能:table动态合并+前端导出

场景&#xff1a;第一列WM 名字相同&#xff0c;行内合并&#xff0c;后面的列合并的行数根据第一列合并的行来。第二列‘累计请假天数根据合并的几列显示数值。后续需合并的列以第一列合并行数为基准 注&#xff09;当前数据表头固定&#xff0c;行内数据不固定。以第一列WM为…

主板维修一般多少钱?电脑主板常见维修方法交换法

修主板一般要多少钱&#xff1f; 下面就让我们一起来了解一下吧。 电脑主板维修价格根据损坏程度不同而不同 1、电容器最容易损坏。 如果只是更换电容的话&#xff0c;大约需要50元左右。 2、如果主板上的电路损坏&#xff0c;面积越大&#xff0c;价格就越贵&#xff0c;可…

产品必会的6个Axure使用技巧(高阶)

1. 事件也可以复制/剪切/粘贴 只需要选中事件&#xff0c;复制/剪切&#xff0c;再选择其它事件&#xff0c;即可粘贴到这个事件上。同时支持跨页面的复制粘贴。 2. Axure支持复制粘贴Excel里的表格 具体操作 在excel里复制具体内容&#xff0c;如下图&#xff1a; 进入axur…

ConcurrentHashMap 为什么不能插入 null?

1、典型回答 简单来说&#xff0c;ConcurrentHashMap 不允许插入 null 值是JDK 源码规定的&#xff0c;如下源码所示(此源码基于JDK 1.8)&#xff1a; 从上述源码可以看出&#xff0c;在添加方法的第一句就加了判断&#xff1a;如果 key 值为 null 或者是 value 值为 null&…

Java 世界破破烂烂,电音小猫缝缝补补

Java 世界破破烂烂&#xff0c;电音小猫缝缝补补 Java 通用代码生成器光 2.4.0 电音之王尝鲜版六正在研发&#xff0c;昨天发布了介绍视频&#xff0c;请见&#xff1a; https://www.bilibili.com/video/BV1yD421j7UP/ 电音之王尝鲜版六支持哑数据模式&#xff0c;支持枚举。…

VMware workstation的安装

VMware workstation安装&#xff1a; 1.双击VMware-workstation-full-9.0.0-812388.exe 2.点击next进行安装 选择安装方式 Typical&#xff1a;典型安装 Custom&#xff1a;自定义安装 选择程序安装位置 点击change选择程序安装位置&#xff0c;然后点击next 选择是否自动…

安泰ATA-7050高压放大器在静电纺丝研究中的应用

20世纪末以来&#xff0c;纳米技术的概念逐渐家喻户晓。目前&#xff0c;纳米材料已经越来越广泛地运用于人们的生活和工作中。到目前为止&#xff0c;以为纳米结构材料的研究发展迅速&#xff0c;并已经实现了在纳米电子器件、光学器件、传感器及生物医药运用中。 以为纳米结构…

AWTK 开源串口屏开发(13) - 计算器应用

1. 功能 计算器是一个很常见的应用&#xff0c;比如在电子秤中&#xff0c;可能就需要这样一个应用。在计算器中会用到一些有意思的知识点&#xff0c;比如嵌入键盘&#xff0c;在数字输入或密码输入是也会用到。 这里我们实现一个简单的计算器&#xff0c;不需要编写代码&am…

小程序(H5)连接微信公众号

报错信息 配自定义菜单 微信公众号没有配“白名单” 配业务域名

【数据结构】模拟实现二叉搜索树

文章目录 1. 二叉搜索树的实现2. 二叉搜索树的应用3. 改造二叉搜索树为 KV 结构4. 二叉搜索树的性能分析 1. 二叉搜索树的实现 namespace key {template<class K>struct BSTreeNode{typedef BSTreeNode<K> Node;Node* _left;Node* _right;K _key;BSTreeNode(const…

基于单片机的智能电机保护器设计

摘 要 电动机大量使用在现在工业生产和我们的日常生活中。但在实际的使用过程中&#xff0c;电动由于各种各样的原因经常出现故障导致电机损坏。因此保证电动机的正常运行十分必要。随着电机保护技术的迅速发展&#xff0c;智能电机保护器应运而生。智能电机保护器在今后的生产…

【数据结构】串的模式匹配(KMP+朴素模式匹配)

2.串的模式匹配 什么是字符串的模式匹配&#xff1f; 在主串中找到与模式串相同的子串&#xff0c;并返回其所在位置。 模式串&#xff1a;要匹配的一串。注&#xff1a;子串是主串的一部分&#xff0c;一定在主串中存在&#xff0c;但模式串不一定在主串中找得到。 2.1 朴素模…

upload文件上传漏洞复现

什么是文件上传漏洞&#xff1a; 文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷&#xff0c;而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马&#xff0c;病毒&#xff0c;恶意脚本或者WebShell等。“…

uniapp-vue3 项目初始化集成配置【开箱即用】

地址 https://gitee.com/charrie/vue3-uniapp-init 部分截图展示 技术说明 采用vue3viteuniapp技术栈&#xff0c;setup语法糖编码方式使用完全免费的sard-uniapp组件库引入unocss量子化样式引擎&#xff0c;动态css不用自己写样式&#xff0c;引用class即可&#xff0c;降低…

计算机网络(6)-----传输层

目录 一.传输层 二.UDP协议 1.UDP的特点&#xff1a; 2.UDP的首部格式&#xff1a; 3.UDP校验的过程&#xff1a; 三.TCP协议 1.TCP协议的特点 2.TCP报文段首部格式 3.TCP的连接管理 &#xff08;1&#xff09;连接建立&#xff08;三次握手&#xff09; &#xff0…

Spring Web MVC入门(1)

什么是Spring Web MVC? 定义:Spring Web MVC是基于Servlet构建的原始Web框架,从一开始就包含在Spring框架中.它的正式名称"Spring Web MVC"来自其源模块的名称(Spring-webmvc),但是它通常被称为"Spring MVC". 什么是Servlet? Servlet是一种实现动态页面…

【C++】排序算法

目录 一、排序算法概述 二、初级排序算法 三、进阶排序算法 四、分治思想排序 五、哈希思想排序 六、分割思想排序 一、排序算法概述 在C语言中&#xff0c;通常需要手写排序算法实现对数组或链表的排序&#xff0c;但是在C中&#xff0c;标准库中的<algorithm>头…

【兔子机器人】实现从初始状态到站立

一、遥想星空up主的方法 由于我有卡位结构&#xff0c;无法做到劈腿&#xff0c;而且底盘也不一样&#xff0c;无法使用此方法 但是其代码思想是可以借鉴的。 参考视频&#xff1a; 【【开源啦&#xff01;】无刷轮腿平衡机器人】 【精准空降到 01:16】 https://www.bilibili…