vue js实现时钟以及刻度效果
2025.01.08今天我学习如何用js实现时钟样式,效果如下:

一、html代码如下:
<template><!--圆圈--><div class="notice_border"><div class="notice_position notice_name_class" v-for="item in [3,6,9,12]">{{ item }}</div><!--最中心的点--><div class="notice_node"/><!--时针--><div class="notice_hour_class" ref="hour_time"/><!--分针--><div class="notice_minutes_class" ref="second_time"/><!--刻度线--><div class="scale_class" :ref="`scale_${index}`" v-for="(item,index) in 60" :key="index"/></div>
</template>
二、js代码如下:
<script>
export default{data(){return{}},mounted(){this.get_notice_time();},methods:{get_notice_time(){let notice_time = '12:00';//时间格式for (let i = 0; i < 60; i++) {let scale_class = this.$refs[`scale_${i}`]; // 获取每个元素scale_class[0].style.transform = `rotate(${i * 6}deg)`; // 修改样式}let hour_time = this.$refs.hour_time;//时针let second_time = this.$refs.second_time;//分针if (notice_time!= 0) {hour_time.style.transform = `rotate(${moment(notice_time.split(':')[0], 'HH').format('H') * 30}deg)`;//时针一次转30°second_time.style.transform = `rotate(${moment(notice_time.split(':')[1], 'mm').format('m') * 6}deg)`;//分针一次转6°}}}
}
</script>
三、style代码如下:
<style>
//圆圈样式
.notice_border {width: 58%;height: 57%;border-radius: 100%;border: 5px solid #3673E3;position: absolute;right: 10%;top: 14%;
}//字体位置
.notice_position {position: absolute;color: skyblue;font-weight: bolder;
}//字体样式 3,6,9,12
.notice_name_class:nth-child(1) {right: 7%;top: 41%;
}.notice_name_class:nth-child(2) {right: 44%;bottom: 4%;
}.notice_name_class:nth-child(3) {left: 8%;top: 41%;
}.notice_name_class:nth-child(4) {left: 42%;top: 4%;
}//节点样式
.notice_node {position: absolute;width: 10%;height: 10%;border-radius: 100%;background-color: #3673E3;left: 45%;top: 45%;z-index: 2;
}//时针样式
.notice_hour_class {position: absolute;width: 5%;height: 20%;background-color: red;left: 47.5%;top: 30%;border-radius: 5px 5px 0 0;z-index: 1;transform-origin: bottom; //绕着底部旋转//transform: rotate(90deg);
}//分针样式
.notice_minutes_class {position: absolute;width: 5%;height: 33%;background-color: #3673E3;//background-color: white;left: 47.5%;top: 18%;border-radius: 5px 5px 0 0;transform-origin: bottom; //绕着底部旋转
}//默认刻度线
.scale_class {position: absolute;width: 1%;height: 7%;background-color: #3673E3;top: 0;left: 50%;transform-origin: center 60px;//设置中心点旋转,要绕着notice_node
}//循环每一个刻度线,5的倍数
.scale_class:nth-of-type(5n-2) {width: 2.5%;height: 10%;
}
</style>
四、完整代码如下:
可以用作时钟的通用组件。
<template><!--圆圈--><div class="notice_border"><div class="notice_position notice_name_class" v-for="item in [3,6,9,12]">{{ item }}</div><!--最中心的点--><div class="notice_node"/><!--时针--><div class="notice_hour_class" ref="hour_time"/><!--分针--><div class="notice_minutes_class" ref="second_time"/><!--刻度线--><div class="scale_class" :ref="`scale_${index}`" v-for="(item,index) in 60" :key="index"/></div>
</template>
<script>
import moment from "moment";export default {data(){return{notice_time:'',//时间}},props: {// 获取传入时间props_time: {type: [String,Number],}},watch:{props_time(newVal,oldVal){this.notice_time = newVal;this.get_notice_time();},deep:true},methods: {get_notice_time() {//let notice_time = this.notice_time;//时间格式let notice_time = '12:00';//时间格式for (let i = 0; i < 60; i++) {let scale_class = this.$refs[`scale_${i}`]; // 获取每个元素scale_class[0].style.transform = `rotate(${i * 6}deg)`; // 修改样式}let hour_time = this.$refs.hour_time;//时针let second_time = this.$refs.second_time;//分针if (notice_time != 0) {//防止时间为空hour_time.style.transform = `rotate(${moment(notice_time.split(':')[0], 'HH').format('H') * 30}deg)`;//时针一次转30°second_time.style.transform = `rotate(${moment(notice_time.split(':')[1], 'mm').format('m') * 6}deg)`;//分针一次转6°}}}
}
</script>
<style scoped lang="less">
.notice_border {width: 58%;height: 57%;border-radius: 100%;border: 5px solid #3673E3;position: relative;
}.notice_position {position: absolute;color: skyblue;font-weight: bolder;
}.notice_name_class:nth-child(1) {right: 7%;top: 41%;
}.notice_name_class:nth-child(2) {right: 44%;bottom: 4%;
}.notice_name_class:nth-child(3) {left: 8%;top: 41%;
}.notice_name_class:nth-child(4) {left: 42%;top: 4%;
}.notice_node {position: absolute;width: 10%;height: 10%;border-radius: 100%;background-color: #3673E3;left: 45%;top: 45%;z-index: 2;
}.notice_hour_class {position: absolute;width: 5%;height: 20%;background-color: red;left: 47.5%;top: 30%;border-radius: 5px 5px 0 0;z-index: 1;transform-origin: bottom;//transform: rotate(90deg);
}.notice_minutes_class {position: absolute;width: 5%;height: 33%;background-color: #3673E3;left: 47.5%;top: 18%;border-radius: 5px 5px 0 0;transform-origin: bottom;
}.scale_class {position: absolute;width: 1%;height: 7%;background-color: #3673E3;top: 0;left: 50%;transform-origin: center 60px;
}.scale_class:nth-of-type(5n-2) {width: 2.5%;height: 10%;
}
</style>
相关文章:
vue js实现时钟以及刻度效果
2025.01.08今天我学习如何用js实现时钟样式,效果如下: 一、html代码如下: <template><!--圆圈--><div class"notice_border"><div class"notice_position notice_name_class" v-for"item in …...
unity学习15:预制体prefab
目录 1 创建多个gameobject 2 创建prefab 2.1 创建prefab (类) 2.2 prefab 是一个文件 2.3 prefab可以导出 3 创建prefab variant (子类) 3.1 除了创建多个独立的prefab, 还可以创建 prefab variant 3.2 他…...
基于Thinkphp6+uniapp的陪玩陪聊软件开发方案分析
使用uni-app框架进行前端开发。uni-app是一个使用Vue.js开发所有前端应用的框架,支持一次编写,多端发布,包括APP、小程序、H5等。 使用Thinkphp6框架进行后端开发。Thinkphp6是一个轻量级、高性能、面向对象的PHP开发框架,具有易…...
MySQL - 子查询和相关子查询详解
在SQL中,子查询(Subquery)和相关子查询(Correlated Subquery)是非常强大且灵活的工具,可以用于执行复杂的数据检索和操作。它们允许我们在一个查询中嵌套另一个查询,从而实现更复杂的逻辑和条件…...
Android 系统签名 keytool-importkeypair
要在 Android 项目中使用系统签名并将 APK 打包时与项目一起打包,可以按照以下步骤操作: 步骤 1:准备系统签名文件 从 Android 系统源码中获取系统签名文件,通常位于 build/target/product/security 目录下,包括 pla…...
安卓漏洞学习(十八):Android加固基本原理
APP加固技术发展历程 APK加固整体思路 加固整体思路:先解压apk文件,取出dex文件,对dex文件进行加密,然后组合壳中的dex文件(Android类加载机制),结合之前的apk资源(解压apk除dex以外…...
Docker 使用Dockerfile创建镜像
创建并且生成镜像 在当前目录下创建一个名为Dockerfile文件 vi Dockerfile填入下面配置 # 使用 CentOS 作为基础镜像 FROM centos:7# 设置工作目录 WORKDIR /app# 复制项目文件到容器中 COPY bin/ /app/bin/ COPY config/ /app/config/ COPY lib/ /app/lib/ COPY plugin/ /a…...
【Python运维】利用Python实现高效的持续集成与部署(CI/CD)流程
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 持续集成与部署(CI/CD)是现代软件开发中不可或缺的实践,通过自动化测试、构建和部署流程,显著提高了开发效率与运维质量。本文详细介绍…...
成功!QT 5.15.2编译mysql驱动
首选要说明,5.15与6.7编译驱动是完全不同的。搞错了永远编译不出来。 参考 主要是参考安装QT,安装mysql等。 编译成功!QT/6.7.2/Creator编译Windows64 MySQL驱动(MSVC版)_mingw编译qt6.7-CSDN博客 复制mysql的include和lib到一个方便的目…...
安卓NDK视觉开发——手机拍照文档边缘检测实现方法与库封装
一、项目创建 创建NDK项目有两种方式,一种从新创建整个项目,一个在创建好的项目添加NDK接口。 1.创建NDK项目 创建 一个Native C项目: 选择包名、API版本与算法交互的语言: 选择C版本: 创建完之后,可…...
第二届 Sui 游戏峰会将于 3 月 18 日在旧金山举行
3 月中旬,Sui 基金会和 Mysten Labs 将共同举办第二届 Sui 游戏峰会(Sui Gaming Summit),这是一个专注于 Sui 游戏平台的 GDC 周边活动。此次峰会将与旧金山的年度游戏开发者大会(GDC,Game Developers Conf…...
自动驾驶相关知识学习笔记
一、概要 因为想知道SIL、HIL是什么仿真工具,故而浏览了自动驾驶相关的知识。 资料来源《自动驾驶——人工智能理论与实践》胡波 林青 陈强 著;出版时间:2023年3月 二、图像的分类、分割与检测任务区别 如图所示,这些更高阶的…...
uniapp - 基于uniapp+vue3实现自定义增强版table表格组件体验「兼容H5+小程序+App端」
本文提供增强版table表格组件体验,打造跨端表格的新标杆. uv3-table:一款基于uniappvue3跨端自定义手机端增强版表格组件。支持固定表头/列、边框、斑马纹、单选/多选,自定义表头/表体插槽、左右固定列阴影高亮显示。支持编译兼容H5小程序端App端。 提供…...
新时期下k8s 网络插件calico 安装
1、k8s master节点初始化完毕以后一直处于notreadey状态,一直怀疑是安装有问题或者是初始化有问题(当然,如果真有问题要先解决这些问题),经过不断探索才发现是网络插件没有安装导致的,根据建议安装calico插…...
【SQL】COUNT()函数 用法详解
COUNT()函数 COUNT函数用法:COUNT ( [ALL | DISTINCT] column | expression | *) ALL关键字指示统计所有值,而DISTINCT关键字强制函数仅对不同的值进行操作。 默认情况下,使用ALL选项。条件表达式 COUNT()函数中条件表达式加 OR null。例如…...
【HTML+CSS+JS+VUE】web前端教程-6-图片路径详解
绝对路径 绝对路径是电脑盘符存储与访问的具体位置 E:\xxx\1.jpg <img src"E:\xxx\1.jpg">相对路径 两者相对关系,两者在同一路径下可以直接访问 子级关系:/ 父级关系:../ 同级关系: ./网络路径 具体的网络地址:…...
C++中面向对象的三大特性是什么?
封装(Encapsulation) 概念:封装是把数据和操作数据的函数绑定在一起,对数据的访问进行限制。通过将数据成员设为私有(private)或受保护(protected),并提供公共ÿ…...
Centos 修改 yum 源为阿里云
参考 https://serverfault.com/questions/1161816/mirrorlist-centos-org-no-longer-resolve 修改 Centos 的 yum 源为阿里云 去阿里云 yum 镜像源官网: https://developer.aliyun.com/mirror/ 选择自己对应的操作系统,这里以 centos7 演示…...
Qt之Cannot create children for a parent that is in a different thread问题分析
问题 在多线程场景中,使用QSerialPort,QTcpSocket等QIODevice设备时出现报Cannot create children for a parent that is in a different thread 分析 QObject构造函数中会检查父对象的线程数据与当前对象的线程数据是否一致 static bool check_parent_thread(Q…...
均值滤波从图像复原角度的解释
廖老师说若将图像生成看作一个随机过程,均值滤波(Mean Filtering)可以视为在高斯噪声模型下的线性最小均方估计(Linear Minimum Mean Squared Error, LMMSE)或者极大似然估计(Maximum Likelihood Estimatio…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
