vue js实现时钟以及刻度效果

news2025/1/10 1:46:10

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>

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

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

相关文章

CSS Grid 布局全攻略:从基础到进阶

文章目录 一.Grid 是什么二.示例代码1. 基础使用 - 固定宽高2.百分百宽高3.重复设置-repeat4.单位-fr5.自适应6.间距定义其他 一.Grid 是什么 CSS 中 Grid 是一种强大的布局方式&#xff0c;它可以同时处理行和列 Grid 和Flex有一些类似&#xff0c;都是由父元素包裹子元素使用…

【adb】5分钟入门adb操作安卓设备

ADB&#xff08;Android Debug Bridge&#xff09; 是一个多功能的命令行工具&#xff0c;用于与 Android 设备进行交互、调试和管理。它提供了对设备的直接控制&#xff0c;能够帮助开发者进行调试、安装应用、传输文件等。 目录 将设备和电脑连接 adb shell 文件的基本操…

Jenkins-持续集成、交付、构建、部署、测试

Jenkins-持续集成、交付、构建、部署、测试 一: Jenkins 介绍1> Jenkins 概念2> Jenkins 目的3> Jenkins 特性4> Jenkins 作用 二&#xff1a;Jenkins 版本三&#xff1a;DevOps流程简述1> 持续集成&#xff08;Continuous Integration&#xff0c;CI&#xff0…

Golang笔记:使用net包进行TCP监听回环测试

文章目录 前言TCP监听回环代码演示 附&#xff1a;UDP监听回环 前言 TCP是比较基础常用的网络通讯方式&#xff0c;这篇文章将使用Go语言实现TCP监听回环测试。 本文中使用 Packet Sender 工具进行测试&#xff0c;其官网地址如下&#xff1a; https://packetsender.com/ TC…

SSL 证书格式和证书文件扩展名:完整指南

SSL 证书是什么以及它如何工作相当容易理解。但当涉及到在服务器上安装它时&#xff0c;有时&#xff0c;你可能觉得这是在处理火箭科学。 由于有如此多的SSL 证书格式与特定服务器要求相关&#xff0c;您更有可能感到困惑和沮丧&#xff0c;而不是从一开始就正确配置证书。但…

【源码+文档+调试讲解】项目申报小程序

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代…

echarts横向柱状图胶囊

echarts配置项 tooltip: {trigger: axis, // 触发tooltip提示类型 axis:坐标轴触发axisPointer: {type: cross, // 指示器类型 cross: 十字准星指示器crossStyle: {color: #999 // 线颜色}} }, grid: { left: 0%, //离容器左侧的距离top:5%,bottom: 3%,containLabel: true…

人工智能的发展领域之GPU加速计算的应用概述、架构介绍与教学过程

文章目录 一、架构介绍GPU算力平台概述优势与特点 二、注册与登录账号注册流程GPU服务器类型配置选择指南内存和存储容量网络带宽CPU配置 三、创建实例实例创建步骤镜像选择与设置 四、连接实例SSH连接方法远程桌面配置 一、架构介绍 GPU算力平台概述 一个专注于GPU加速计算的…

Redis Exporter 安装与配置指南(v1.67.0)

&#x1f680; 1. 下载 Redis Exporter 首先&#xff0c;登录到目标服务器&#xff0c;下载 Redis Exporter v1.67.0 安装包。 wget https://github.com/oliver006/redis_exporter/releases/download/v1.67.0/redis_exporter-v1.67.0.linux-amd64.tar.gz&#x1f4e6; 2. 解压…

WD5105同步降压转换器:9.2V-95V宽电压输入,4.5A大电流输出,95%高效率,多重保护功能

概述 • WD5105同步降压转换器 • 封装形式&#xff1a;QFN-20封装 • 应用场景&#xff1a;适用于车载充电器、电动车仪表、电信基站电源、电源适配器等 性能特点 • 输入电压范围&#xff1a;9.2V至95V • 输出电流&#xff1a;可提供4.5A连续负载电流 • 效率&#xff1a;高…

Laravel 新 WebSocket 服务 Reverb 使用指南

旧篇 > Laravel/Lumen 中使用 Echo Socket.IO-Client 实现网页即时通讯广播 https://blog.csdn.net/maxsky/article/details/130394420 已过时 与时俱进&#xff0c;Laravel 官方在 2024 年 7 月发布了 laravel/reverb 包的正式版&#xff0c;因为之前使用的 laravel-echo-…

什么是Kafka?有什么主要用途?

大家好&#xff0c;我是锋哥。今天分享关于【什么是Kafka&#xff1f;有什么主要用途&#xff1f;】面试题。希望对大家有帮助&#xff1b; 什么是Kafka&#xff1f;有什么主要用途&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Kafka 是一个分布式流…

Python爬虫基础——认识网页结构(各种标签的使用)

1、添加<div>标签的代码定义了两个区块的宽度和高度均为100px&#xff0c;边框的格式也相同&#xff0c;只是区块中显示的内容不同&#xff1b; 2、添加<ul>和<ol>标签分别用于定义无序列表和有序列表。<il>标签位于<ul>标签或<ol>标签之…

数据结构:LinkedList与链表—面试题(三)

目录 1、移除链表元素 2、反转链表 3、链表的中间结点 4、返回倒数第k个结点 5、合并两个有序链表 1、移除链表元素 习题链接https://leetcode.cn/problems/remove-linked-list-elements/description/ 描述&#xff1a;给你一个链表的头节点 head 和一个整数 val &#xff…

QT实现 端口扫描暂停和继续功能 3

上篇QT给端口扫描工程增加线程2-CSDN博客 为按钮pushButton_Stop添加clicked事件&#xff0c;功能为暂停扫描&#xff0c;并在暂停后显示继续按钮&#xff0c;点击继续按钮之后继续扫描 1.更新UI 添加继续按钮 点击转到槽则会自动声明 2. 更新 MainWindow.h 需要新增的部分…

LabVIEW瞬变电磁接收系统

利用LabVIEW软件与USB4432采集卡开发瞬变电磁接收系统。系统通过改进硬件配置与软件编程&#xff0c;解决了传统仪器在信噪比低和抗干扰能力差的问题&#xff0c;实现了高精度的数据采集和处理&#xff0c;特别适用于地质勘探等领域。 ​ 项目背景&#xff1a; 瞬变电磁法是探…

左神算法基础巩固--3

文章目录 二叉树二叉树的遍历先序遍历中序遍历后序遍历 解答二叉树的宽度优先遍历 在这里插入图片描述 一颗完全二叉树具有以下特征&#xff1a;1.不存在任何一个节点具有右子树但不存在左子树.2.不存在任何一个节点在满足1的情况下左右子树不全且其后续节点不为叶子节点 根据以…

高山旅游景区有效降低成本,无人机山下到山上物资吊运技术详解

在高山旅游景区&#xff0c;传统的物资运输方式往往面临人力成本高昂、效率低下等问题&#xff0c;而无人机技术的引入为这一难题提供了新的解决方案。以下是对无人机从山下到山上进行物资吊运技术的详细解析&#xff1a; 一、无人机物资吊运技术的优势 1. 降低人力成本&#…

APP上架之Android 证书 MD5 指纹

Android 证书 MD5 指纹 1. 什么是 Android 证书 MD5 指纹&#xff1f; Android 证书 MD5 指纹是对证书数据进行 MD5 哈希运算后得到的 128 位字符串。在 Android 开发中&#xff0c;每个证书在理论上都有一个唯一的 MD5 指纹&#xff0c;用于识别和验证证书的有效性。证书指纹…

用户界面的UML建模11

然而&#xff0c;在用户界面方面&#xff0c;重要的是要了解《boundary》类是如何与这个异常分层结构进行关联的。 《exception》类的对象可以作为《control》类的对象。因此&#xff0c;《exception》类能够聚合《boundary》类。 参见图12&#xff0c;《exception》Database…