JavaScript 30 - 2 学习笔记
学习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 学习笔记的更多相关文章
- JavaScript 30 - 1 学习笔记
学习JavaScirpt30的笔记! ...虽然英语不是很好,但是跟着来还是学到了一些东西. 1-------> JavaScirpt Drum Kit 功能是这样的 ,敲击键盘上面的按钮, ...
- JavaScript 30 - 3 学习笔记
今天学习的是JavaScript 30-3 ---css Variables 实现的效果如下图所示. 废话不多,我们直接来看代码. html: <h1>大家好,这个一个<span c ...
- ArcGIS API for JavaScript 4.2学习笔记[0] AJS4.2概述、新特性、未来产品线计划与AJS笔记目录
放着好好的成熟的AJS 3.19不学,为什么要去碰乳臭未干的AJS 4.2? 4.2全线基础学习请点击[直达] 4.3及更高版本的补充学习请关注我的博客. ArcGIS API for JavaScr ...
- 7 种 Javascript 常用设计模式学习笔记
7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的 ...
- JavaScript 权威指南-学习笔记(一)
本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! ## JavaScript 权威指南-学 ...
- ArcGIS API for JavaScript 4.2学习笔记[1] 显示地图
ArcGIS API for JavaScript 4.2直接从官网的Sample中学习,API Reference也是从官网翻译理解过来,鉴于网上截稿前还没有人发布过4.2的学习笔记,我就试试吧. ...
- JavaScript权威设计--JavaScript函数(简要学习笔记十一)
1.函数调用的四种方式 第三种:构造函数调用 如果构造函数调用在圆括号内包含一组实参列表,先计算这些实参表达式,然后传入函数内.这和函数调用和方法调用是一致的.但如果构造函数没有形参,JavaScri ...
- JavaScript权威设计--JavaScript函数(简要学习笔记十)
1.函数命名规范 函数命名通常以动词为前缀的词组.通常第一个字符小写.当包含多个单词时,一种约定是将单词以下划线分割,就像"like_Zqz()". 还有一种就是"lik ...
- 《你不知道的 JavaScript 上卷》 学习笔记
第一部分: 作用域和闭包 一.作用域 1. 作用域:存储变量并且查找变量的规则 2. 源代码在执行之前(编译)会经历三个步骤: 分词/此法分析:将代码字符串分解成有意义的代码块(词法单元) 解析/语法 ...
随机推荐
- KMP算法 --- 在文本中寻找目标字符串
KMP算法 --- 在文本中寻找目标字符串 很多时候,为了在大文本中寻找到自己需要的内容,往往需要搜索关键字.这其中就牵涉到字符串匹配的算法,通过接受文本和关键词参数来返回关键词在文本出现的位置.一般 ...
- C语言基础 - 输出1-100万之间的素数
其实这个很简单 代码 网上也一大堆... //判断素数 BOOL isPrime(int num) { for (int i = 2; i <= sqrt(num); i++) { //能整除则 ...
- 【PHP】数组用法(转)
摘要: 说明数组遍历方法foreach,while,for,推荐使用foreach(PHP内部实现,简单速度最快,还可以遍历类属性).以及一些常用方法current,prev,next,end,key ...
- web前端开发面试题(未完待续)
一.HTML与XHTML的不同:1)XHTML元素必须被正确地嵌套 2)元素必须被关闭 如:<h1>--</h1>关闭 3)标签名必须用小写字母 4)XHTML文档必须有根 ...
- 移动端https抓包那些事--初级篇
对于刚刚进入移动安全领域的安全研究人员或者安全爱好者,在对手机APP进行渗透测试的时候会发现一个很大的问题,就是无法抓取https的流量数据包,导致渗透测试无法继续进行下去. 这次给大家介绍一些手机端 ...
- iptables中DNAT的配置方法
1.一对一流量完全DNAT 首先说一下网络环境,普通主机一台做防火墙用,网卡两块 eth0 192.168.0.1 内网 eth1 202.202.202.1 外网 内网中一台主机 192.168. ...
- Web测试与APP测试有哪些异同?
1.相同点 不管是传统行业的web测试,还是新兴的手机APP测试,都离不开测试的基础知识,即是不管怎么变,测试的原理依然会融入在这两者当中. 1)设计测试用例时,依然都是依据边界值分析法.等价类划分等 ...
- 一步一步学习Vue(十)
本篇说一下组件通信的问题,父子组件通信,前面的博客中已有说明,vue也推荐props in,event out:兄弟节点通信如何做呢?官方其实也给出了实现方式,我们以下面的场景来实现一下: 上图中,实 ...
- Vue学习-01
1.vue 学习 v-bind:title 数据绑定 v-if 判断显示或者隐藏 <div id="app-3"> <p v-if="seen" ...
- react - 解刨组件的多种写法
一,原始的createClass写法 对于写react组件,很多人第一印象往往是createClass,这是因为createClass是react组件最原始的写法,基本每个学react的人都是接触这种 ...