什么?用JS写一个iPhone上的计时器?

279 阅读3分钟

我吃泡面有个习惯: 我比较喜欢那种弹牙一点,筋斗一点的面口感,所以我会根据面饼的软硬度来设定倒计时时间;最近泡面吃的比较多,看着iOS的这个环形进度条定时器,突发奇想,如果我用js配合css动画可以实现吗?(PS:吃泡面仅仅是因为不用去食堂排队🤑)

image.png

一、思路

既然要实现这个效果,那么核心要素就是环形动画效果和计时器了吧?只要获取用户输入的值,再做一个间歇函数,再根据总时间来决定动画执行的时间,这么一想,也没有那么难?

image.png

既然有思路了,那么剩下的就交给键盘了

二、动画效果

关于这个环形的动画效果,确实让我头疼了一段时间,最终查阅各种资料以及一些尝试,我决定用以下思路来设计这个环形效果

1、首先做一个定义宽高的大盒子(后文中称为Box-A)

image.png

2、在大盒子里面水平排列两个小盒子(后文中称为Box-B),小盒子与大盒子等高,宽各为大盒子的一半

image.png

3、给两个小盒子再分别添加两个盒子(后文中称为Box-C),使Box-C的大小与Box-B的大小相等;给Box-C添加边框圆角,使其变成两个扇形

image.png

4、在Box-A中添加一个盒子(后文中称为Box-D),使其在Box-A中水平垂直对齐;给Box-D添加边框圆角,使其变成一个正圆;更改Box-D的大小使其比Box-A小,设置层级,使其在最上层遮罩Box-B来呈现环形

image.png

5、设计动画,使分布在左右的两个Box-C盒子旋转,并更改其旋转中心(详见代码片段);给Box-B盒子设定透明与溢出隐藏(最后别忘了Box-A变成圆形,本文为了方便展示使用方盒子)

三、计时器

既然动画效果已经有了,那么结合js更改动画的执行时间,就能实现环形进度条随着计时时间的更新啦!

步骤如下:

1、获取用户输入的时间值(时分秒)并做一个总秒数的计算

2、封装间歇函数,并设置自减值;在调用时使用总秒数作为实参;

3、给开始计时按钮注册点击事件,事件开始时调用间歇函数,并设定根据总秒数设定动画的总时长

4、设置暂停功能,暂停时清除定时器并暂停动画

5、设置重置功能,点击后刷新计时器并清除动画残留效果

....... (js内细节太多,若有兴趣可浏览源码)

代码如下:欢迎大家来找bug

(代码块有比例限制,若有需要复制源码创建html文件到浏览器打开即可)

若要转载,标明出处即可