学习JavaScirpt30的笔记!

有意思!

2------->   CSS clock

效果是这样的.... 这是改良过后的 版本....

话不多说,直接来看代码。

首先是html部分

<div class="clock">
<div class="clock-face">
<div class="hand hour-hand"></div>
<div class="hand min-hand"></div>
<div class="hand second-hand"></div>
</div>
</div>

最外层的  clock 来作为底部的圆环。

变化都是在 clock-face 里面的。

之后就是三个 div指针啦。

下面是CSS 部分

  .clock{

        width: 300px;
height: 300px;
border-radius: 50%;
border:5px solid #dca; } .clock-face{
width: 90%;
margin: 0 auto;
height: 300px;
position: relative;
} .hand{
width: 50%;
height: 3px; position: absolute;
top: 50%;
transform: rotate(-90deg);
transform-origin: 0%;
left: 50%; transition-timing-function: cubic-bezier(0, 1.74, 0.77, 0.87); } .second-hand{ transition-duration: .05s;
background-color:red;
} .min-hand{
width: 120px;
transition-duration: .05s;
background-color:#666;
} .hour-hand{
width: 100px;
transition-duration: .05s;
background-color:gray;
}

最需要关注的地方就是这里

   .hand{
width: 50%;
height: 3px; position: absolute;
top: 50%;
transform: rotate(-90deg);
transform-origin: 0%;
left: 50%; transition-timing-function: cubic-bezier(0, 1.74, 0.77, 0.87); }
   transform-origin: 0%;

transform-Origin属性允许您更改转换元素的位置。

2D转换元素可以改变元素的X和Y轴。 3D转换元素,还可以更改元素的Z轴。

transform-origin: 0%;设置为0 其实就是以hand的开始部分为圆点来旋转指针。
如果我们将transform-origin 设置为50%,看看是什么样子的效果。

..整指针都是以width = 50% 的地方开始旋转的。

视频里面的  transform-origin 是100%。 因为他没有设置每个指针的长度,默认都是一样长的。所以设置为100%的话是没有什么影响的。

但是如果想要设长度,考虑到div 的  position: absolute;  的时候。 他是自动向左靠拢的。如果我们以100%的origin来设置他的话,就会出现这样的情况。

指针们并没有共用圆心。所以给origin 设置为0%,(同时要调整圆心的位置 left:50%)。

接下来看js

          const secondHand = document.querySelector('.second-hand');
const minHand = document.querySelector('.min-hand');
const hourHand = document.querySelector('.hour-hand'); function setDate(){
const now= new Date();
const seconds = now.getSeconds();
const secondsDegrees = ((seconds/60)*360-90); const mins = now.getMinutes();
const minsDegrees=((mins/60)*360-90); const hours = now.getHours();
const hoursDegrees=((hours/12)*360-90); if(seconds==0){
secondHand.style.transitionDuration='0s'; }
else{
secondHand.style.transitionDuration='.1s'; } if(mins==0){
minHand.style.transitionDuration='0s';
}else{
minHand.style.transitionDuration='.05s';
} if(hours==0){
hourHand.transitionDuration='0s';
}else{
hourHand.transitionDuration='.05s';
} secondHand.style.transform = `rotate(${secondsDegrees}deg)`; minHand.style.transform = `rotate(${minsDegrees}deg)`; hourHand.style.transform = `rotate(${hoursDegrees}deg)`; console.log(seconds); } setInterval(setDate,1000);
核心部分是这里
 const now= new Date();
const seconds = now.getSeconds();
const secondsDegrees = ((seconds/60)*360-90); 利用了js里的date 直接获取了当前的秒数(简单粗暴..)
然后计算出每次 指针的偏移量 (秒数/60s)*360°-90°;
为什么要-90°?? 因为如果不-90°,那么这个指针的起始位置就不是12点 ,而是3点! 视频里面是+90°, 因为他使用的origin 是100%,而我使用的是 0%,两个的圆点不一样,旋转的方向是一样的。相当于我是从3点的位置开始 ,而视频里面是从9点的位置开始,
而我们都想要他从12点的位置开始,所以才需要+-90°。 然后用定时器每秒调用 setDate(),大家可能看到了有这样的三个判断。
          if(seconds==0){
secondHand.style.transitionDuration='0s'; }
else{
secondHand.style.transitionDuration='.1s'; } if(mins==0){
minHand.style.transitionDuration='0s';
}else{
minHand.style.transitionDuration='.05s';
} if(hours==0){
hourHand.transitionDuration='0s';
}else{
hourHand.transitionDuration='.05s';
}

这其实是对视频里面代码的改进...因为 每次从59s-->60s 的这个时候,其实second 的值是 59-->0.而这个时候如果 继续让 transition-Duration 有值的话。

就会出现指针快速的绕了一圈的效果,影响视觉体验,所以在0s的时候把 transition-Duration 设置为0 ,可以跳过这个旋转的动画,直接过渡,之后再将其

设置回来,就可以了。

但是我觉得....这样的判断和操作会不会对浏览器的性能是一种消耗,因为其实只需要在0s的时候设置1次,1s的时候再设置回来。之后的58s内都不需要对其进行

操作...

如果有大佬有更好的写法,希望告知,谢谢~!!


JavaScript 30 - 2 学习笔记的更多相关文章

  1. JavaScript 30 - 1 学习笔记

    学习JavaScirpt30的笔记! ...虽然英语不是很好,但是跟着来还是学到了一些东西. 1------->   JavaScirpt Drum Kit 功能是这样的 ,敲击键盘上面的按钮, ...

  2. JavaScript 30 - 3 学习笔记

    今天学习的是JavaScript 30-3 ---css Variables 实现的效果如下图所示. 废话不多,我们直接来看代码. html: <h1>大家好,这个一个<span c ...

  3. ArcGIS API for JavaScript 4.2学习笔记[0] AJS4.2概述、新特性、未来产品线计划与AJS笔记目录

    放着好好的成熟的AJS 3.19不学,为什么要去碰乳臭未干的AJS 4.2? 4.2全线基础学习请点击[直达] 4.3及更高版本的补充学习请关注我的博客. ArcGIS API for JavaScr ...

  4. 7 种 Javascript 常用设计模式学习笔记

    7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的 ...

  5. JavaScript 权威指南-学习笔记(一)

    本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! ## JavaScript 权威指南-学 ...

  6. ArcGIS API for JavaScript 4.2学习笔记[1] 显示地图

    ArcGIS API for JavaScript 4.2直接从官网的Sample中学习,API Reference也是从官网翻译理解过来,鉴于网上截稿前还没有人发布过4.2的学习笔记,我就试试吧. ...

  7. JavaScript权威设计--JavaScript函数(简要学习笔记十一)

    1.函数调用的四种方式 第三种:构造函数调用 如果构造函数调用在圆括号内包含一组实参列表,先计算这些实参表达式,然后传入函数内.这和函数调用和方法调用是一致的.但如果构造函数没有形参,JavaScri ...

  8. JavaScript权威设计--JavaScript函数(简要学习笔记十)

    1.函数命名规范 函数命名通常以动词为前缀的词组.通常第一个字符小写.当包含多个单词时,一种约定是将单词以下划线分割,就像"like_Zqz()". 还有一种就是"lik ...

  9. 《你不知道的 JavaScript 上卷》 学习笔记

    第一部分: 作用域和闭包 一.作用域 1. 作用域:存储变量并且查找变量的规则 2. 源代码在执行之前(编译)会经历三个步骤: 分词/此法分析:将代码字符串分解成有意义的代码块(词法单元) 解析/语法 ...

随机推荐

  1. (转)maven打包时跳过测试

    1 运行mvn install时跳过Test 1.1 方法一 <project> [...] <build> <plugins> <plugin> &l ...

  2. JVM常用启动参数

    本文参考 jvm参数设置大全:http://www.cnblogs.com/marcotan/p/4256885.html 堆内存分配及gc:http://www.cnblogs.com/weiguo ...

  3. 浅谈lvs和nginx的一些优点和缺点

    借鉴一些网上资料整理了简单的比较: LVS的负载能力强,因为其工作方式逻辑非常简单,仅进行请求分发,而且工作在网络的第4层,没有流量,所以其效率不需要有过多的忧虑. LVS基本能支持所有应用,因为工作 ...

  4. 【D3】D3词汇表

    按字母顺序 axis:数轴或坐标轴表示两个维度上数据尺度的直线 bar chart:条形图 (参见Excel)以矩形宽度反映数值大小的图表形式 bar:条形以宽度反映数值大小的矩形(rect) bin ...

  5. Java栈与堆 (转)

    1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取速度比堆要快,仅次于直接位于C ...

  6. JS和jQuery中ul li遍历获取对应的下角标

    首先先看代码: html代码部分: <div id="div"> <ul> <li>1111111</li> <li>2 ...

  7. JUnit4总结

    JUnit4使用要求: 测试方法必须使用@Test进行修饰 测试方法必须使用public void 进行修饰,不能带任何的参数 新建一个源代码目录来存放我们的测试代码 测试类的包应该和被测试类保持一致 ...

  8. SSH项目过一段时间之后再访问会报一次Could not open Hibernate session for transaction 异常,Caused by: com.mysql.jdbc.CommunicationsException: Communications link failure due to underlyi,再重新方法即可访问成功(通常出现在过了一晚之后再去访问系统)

    前端时间到客户那去进行项目的上线测试,将项目部署好之后,运行都是正常的,可是每到了第二天早上访问的时候,就会报一个Could not open Hibernate session for transa ...

  9. Selenium+java操作浏览器cookies

    描述:登录CSDN,将登录信息cookies保存到文件,再次打开网页时,直接利用文件中的数据登录. 1. 获取cookies并保存到文件 步骤: ① 打开CSDN的登录界面: ② 填写用户名和密码: ...

  10. H5滚动轮播插件

      概述 JRedu 随着前端技术的发展,越来越多的H5技术被应用到实际开发中,尤其是js插件更是无处不用,本章节我们主要分享下如何去自己封装一个滚动轮播插件. 1效果图如下: 2主要功能   支持超 ...