【学+原】CSS3的2D动画 ——仿NOMOS手表—— 妙味课堂

看CSS3妙味课堂中有一课是介绍如何做钟表界面,然后三根针都能随着时间转动,然后自己在那个简易的版本上做了一些进一部改进。

  1. 最关键的知识点应该是transform-origin这个样式,要选对旋转的中心点。分针秒针时针的旋转中心点应该是针的底部中间位置
  2. 这个实例还是让我第一次见到把<style>设置了id,然后写进js里去操作的,因为表面的各种小时,秒的刻度的制作,需要用循环来写,直接写css样式里是不现实的。
  3. 另外就是要把setIntervaltransform:rotate结合起来使用,让秒钟动起来。
  4. 不要忘了,在秒钟动的同时,分针和时针都在一直变化着,所以要将每一秒后三根针的位置都要同时计算,按照比例来计算分针是时针的角度


<style id="css">

ul{

    margin: 0;padding: 0;

    list-style: none;

}

#cover{

    width: 400px;

    height: 400px;

    border-radius: 50%;

    border: 3px solid #504f4c;

    position: relative;

    background: #f1f1f3;

}

#center,#icon,#icon_inner,#center_inner{

    border-radius: 50%;

    position: absolute;

    left: 0; right: 0; top: 0; bottom: 0;

    margin: auto;

}

#icon{

    width: 26px;

    height: 26px;

    background: #0677bf;    

}

#center{

    width: 8px;

    height: 8px;

    background: #b4bea5;

    z-index: 9; 

}

#icon_inner{

    width: 12px;

    height: 12px;

    background: #b94130;    

}

#center_inner{

    width: 4px;

    height: 4px;

    background: #b94130;

    z-index: 9; 

}

#hour{

    width: 6px;

    height: 105px;

    position: absolute;

    left: 197px;

    bottom: 208px;

    background:#0677bf;

    border-radius: 3px;

    transform-origin: 3px 110px;

    z-index: 10;

}

#minute{

    width: 6px;

    height: 190px;

    position: absolute;

    left: 197px;

    bottom: 205px;

    background:#0677bf;

    border-radius: 3px;

    transform-origin: 3px 195px;

    z-index: 11;

}

#second{

    width: 3px;

    height: 70px;

    position: absolute;

    left: 58.5px;

    bottom: 45px;

    background:#b94130;

    border-radius: 2px;

    transform-origin: 1.5px 55px; 

}

#list_big li{

    width: 1px;

    height: 15px;

    position: absolute;

    left: 199px;

    bottom: 380px;

    background: #171717;

    transform-origin: 1px 195px;

}

#list_small li{

    width: 4px;

    height: 40px;

    border-radius: 2px;

    position: absolute;

    left: 198px;

    bottom: 335px;

    background: #171717;

    transform-origin: 2px 175px; 

}

#list_big li:nth-of-type(5n+1){

    width: 4px;

    border-radius: 2px;

}

#number li{

    position: absolute;

    height: 40px;

    line-height: 40px;

    left: 50%;

    bottom: 330px;

    font-family: "arial narrow";

    font-size: 50px;

    transform: translateX(-50%);

    transform-origin: 50% 170px;

}

#mark{

    width: 100px;

    position: absolute;

    top: 100px;

    left: 50%;

    transform: translateX(-50%);

    font-family: arial;

    font-weight: 400;

}

#mark_top{

    position: absolute;

    text-align: center;

    left: 50%;

    transform: translateX(-50%); 

    font-size: 18px;

}

#mark_bottom{

    position: absolute;

    top: 20px;

    left: 50%;

    transform: translateX(-50%); 

    text-align: center;

    font-size: 8px;

}

#cover_inner{

    width: 120px;

    height: 120px;

    border-radius: 50%;

    background: #e0dfdb;

    position: absolute;

    bottom: 50px;

    left: 50%;

    transform: translateX(-50%);

}

#cover_inner li{

    width: 2px;

    height: 12px;

    border-radius: 1px;

    position: absolute;

    left: 59px;

    bottom: 103px;

    background: #171717;

    transform-origin: 1px 55px; 

}

#cover_inner li:nth-of-type(3n+1){

    width: 4px;

    border-radius: 2px;

}

</style>

<script>

window.onload=function(){

 var oListB = document.getElementById(‘list_big‘);

 var oListS = document.getElementById(‘list_small‘);

 var oListI = document.getElementById(‘list_inner‘);

 var oNum = document.getElementById(‘number‘);

 var oCss = document.getElementById(‘css‘);

 var listBHtml = ‘‘;

 var listSHtml = ‘‘;

 var listIHtml = ‘‘;

 var numHtml = ‘‘;

 

 var oCssHtml = oCss.innerHTML;

 

 for (var i=0; i<60; i++) {

        listBHtml += ‘<li></li>‘;

        oCssHtml += ‘#list_big li:nth-of-type(‘+ (i+1) +‘){transform: rotate(‘+ i*6 +‘deg);}‘

 }

 

 for (var i=0; i<12; i++) {

        listIHtml += ‘<li></li>‘;

        oCssHtml += ‘#list_inner li:nth-of-type(‘+ (i+1) +‘){transform: rotate(‘+ (i*30) +‘deg);}‘

 }

 

 for (var i=0; i<6; i++) {

        listSHtml += ‘<li></li>‘;

        oCssHtml += ‘#list_small li:nth-of-type(‘+ (i+1) +‘){transform: rotate(‘+ (i*60+30) +‘deg);}‘

 }

 

 for (var i=0; i<6; i++) {

 if(i===3){

 continue;

 }

        oCssHtml += ‘#number li:nth-of-type(‘+ (i+1) +‘){transform: translateX(-50%) rotate(‘+ (i*60) +‘deg);}‘

 }

    oListB.innerHTML = listBHtml;

    oListS.innerHTML = listSHtml;

    oListI.innerHTML = listIHtml;

    oCss.innerHTML = oCssHtml;

 

 var oSec = document.getElementById(‘second‘);

 var oMin = document.getElementById(‘minute‘);

 var oHour = document.getElementById(‘hour‘);

 

    getTime();

 

    setInterval(getTime,1000);

 

 function getTime(){

 var oDate = new Date();

 var iSec = oDate.getSeconds();

 var iMin = oDate.getMinutes() + iSec/60;

 var iHour = oDate.getHours() + iMin/60;

 

        oSec.style.transform = ‘rotate(‘+ iSec*6 +‘deg)‘;

        oMin.style.transform = ‘rotate(‘+ iMin*6 +‘deg)‘;

        oHour.style.transform = ‘rotate(‘+ iHour*30 +‘deg)‘;

 }

};

</script>

</head>

<body>

 <div id="cover">

 <span id="icon"></span>

 <span id="center"></span>

 <span id="hour"></span>

 <span id="minute"></span>

 <div id="mark">

 <span id="mark_top">N&nbspO&nbspM&nbspO&nbspS</span>

 <span id="mark_bottom">G&nbspL&nbspA&nbspS&nbspH&nbspU&nbspT&nbspT&nbspE</span>

 </div>

 <div id="cover_inner">

 <ul id="list_inner">

 </ul>

 <span id="icon_inner"></span>

 <span id="center_inner"></span>

 <span id="second"></span>

 </div>

 <ul id="list_big">

 </ul>

 <ul id="list_small">

 </ul>

 <ul id="number">

 <li>12</li>

 <li>2</li>

 <li>4</li>

 <li></li>

 <li>8</li>

 <li>10</li>

 </ul>

 </div>

</body>

</html>
时间: 2024-10-22 13:38:18

【学+原】CSS3的2D动画 ——仿NOMOS手表—— 妙味课堂的相关文章

【学】CSS3的3D动画 ——3D旋转(1)—— 妙味课堂

最近学了妙味的css3的动画,2D,3D的都有,先写一个最简单的3d翻转效果,鼠标移入div,正反面翻转效果. 注意点有: 要给正反面外面加个父级: transform-style: preserve-3d;是加在正反面的父级,使动画具有3d的效果:但是ie11并不支持preserve-3d perspective也要加在父级上,使动画具有透视效果: 要给父级也加上宽高,否则动画没有效果 <style> #box{ margin: 70px auto; width: 300px; height

【学】CSS3的3D动画 ——3D旋转之骰子样式的钟表(2)上—— 妙味课堂

这个是3D旋转的进阶版,是一个类似与骰子的正方体.这个版本只有秒数的个位数,还没有写整个钟表,下面那个版本好好想想该怎么写 这个效果需要用到transform-style: preserve-3d. 利用transform: rotateX, rotateY, rotateZ来定义物体转动轴,实现3D旋转 给一个正方体设置6个面,每个面都设置旋转基面,并且直接先朝各个方向转90度,有一个面要注意,就是和最前面的那个面的对面,不用转,但是要用transform: translateZ()来让这个面

【学】CSS3的animation基础——妙味课堂

终于结束了最后css3的一节课,关于animation的使用,其实之前已经用过一次.大致要了解的就是,关于如何让动画停在最后一帧的方法.视频里有提到过css3出了个新的样式可以实现,但是老师没有记住,用了个变通的方法,就是单独设置一个 .stop {left:0 !important;top:0!important;} 然后在js里将这个class赋值给元素即可. 后来我又网上找了一下,发现其实是一个叫animation-fill-mode的样式,将它的值设置为forwards,就可以实现效果.

仿妙味课堂导航(转)

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link href="miaov_style.css" rel="stylesheet" type="text/css" /> <script

jq仿 妙味课堂导航01

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> *{ margin:0; padding:0; } ul,li{ list-style:none; } a{ color:#333; text-decoration:none; } .clearfix{ zoom

css3的基础用法,新手必看哈(还有css3和jquery动画的对比)

第一步: 定义动画,名字可以各种起,就像方法名一样 1. 定义动画,名称为fadeIn @-webkit-keyframes fadeIn { 0% { opacity: 0; /*初始状态 透明度为0*/ } 50% { opacity: 0; /*中间状态 透明度为0*/ } 100% { opacity: 1; /*结尾状态 透明度为1*/ } } 方法里面还有很多写法: 如: /* 定义css方法,名字叫消失 Hides a leaf towards the very end of th

【原】CSS3的3D动画 ——3D旋转之骰子样式的钟表(2)下 - 模仿智能社网页下的.md

之前看到智能社主页的那个骰子样式的钟表,最近研究了一下,虽然没有仔细看他是怎么做的,但是学了css3的动画之后想自己尝试着写一下,用到的原理可能和智能社网站的不太一样,我自己主要用到了css3和js. 程序写到一半,发现只有chrome和ff支持,而用ie11是没有效果的,然后用ie11去打开智能社网页,效果也是没有,调查了一下,应该是transform-style:preserve-3d这个样式在ie11下还不支持,使得对象无法以3d的样式呈现,至于兼容方式,自己还没有花时间研究,所以这个效果

9款超绚丽的HTML5/CSS3应用和动画特效

1.CSS3飘带状3D菜单 菜单带小图标 这次我们要来分享一款很特别的CSS3菜单,菜单的外观是飘带状的,并且每一个菜单项有一个精美的小图标,鼠标滑过菜单项时,菜单项就会向上凸起,像是飘带飘动一样,形成非常酷的3D视觉效果.这款CSS3飘带状3D菜单非常适合作一些活动页面的菜单导航. 在线演示 源码下载 2.HTML5/CSS3 3D纸片折叠动画 今天我们再来分享一款非常华丽的HTML5/CSS3 3D动画特效,尽管它目前很少能在项目中应用,但从源码中我们可以学到很多HTML5 3D动画的制作知

Unity3D初学之2D动画制

作者:Alex Rose Unity最近宣布推出额外的2D游戏支持,添加了Box 2D物理和一个精灵管理器. 但这里还是有些技巧需要牢记在心.逐帧更改图像只是动画制作的冰山一角,若要让你的游戏出色运行,你还得使用转换和旋转等功能. 现在让我们先从基本技巧开始. 更改帧 如果你已经准备好了制作动画的纹理,你可能会使用SpriteManager脚本的付费版本,或者Unity的新版本.假设你使用的是2D位面和纹理.这就是一个低效率的方法,但如果你是在制作一个game jam的项目,你可能会想塞入一些可