1. ホーム
  2. Web制作
  3. CSS

[css3]css3 use transform to create walking 2D clock.

2022-02-03 04:52:39

学習終了 transform を使って、ケーススタディをしてみましょう。 transform の回転は rotate 時計を作り、JavaScriptのタイマーと組み合わせて動かしてみましょう。

動画のスクリーンショットです。

事例知識分析。

1. ポジショニングを利用して、時計の図面を完成させましょう。

2. 背景は放射性グラデーションを使用しています。

3. 目盛りと時間の桁の回転を完了させるためにJavaScriptが使用されています。

4、Date()オブジェクトを使ってシステム時刻を取得し、時針が対応する目盛りを指すようにします。

5. タイマーを使って継続的に時刻を更新し、時針の動きを完成させる。

I. HTMLソースコード

<div id="clock-wrap">
	<div id="clock">
    	<ul id="list">
        </ul>
    </div>
    <div id="num">
    	<ul>
        	<li>12</li>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
            <li>6</li>
            <li>7</li>
            <li>8</li>
            <li>9</li>
            <li>10</li>
            <li>11</li>
        </ul>
    </div>
    <div id="hour"></div>
    <div id="min"></div>
    <div id="sec"></div>
    <div id="circle"></div>
</div>

II. CSSスタイル

<style id="css">/* Note that here an id is added to the style tag, which is fetched inside JavaScript, and css styles are added to it. */
body,ul{
	margin:0;
	padding:0;}
body{
	font:1em "microsoft Yahei";
	color:#666;
	background-color:#333;}
h1{
	text-align:center;
	color:#eee;
	font-size:3rem;}
li{
	list-style:none;}
p{
	text-align:center;
	color:#ddd;
	position:relative;
	top:100px;
	}
a{
	color:#999;
	text-decoration:none;
	transition:0.2s;}
a:hover{
	color:#ddd;}
#clock-wrap{
	width:400px;
	height:400px;
	border:10px solid #fff;
	border-radius:50%;
	margin:80px auto 0;
	position:relative;
	box-shadow:0 0 40px rgba(0,0,0,1)}
#clock ul{
	width:400px;
	height:400px;
	position:relative;
	border-radius:50%;
	background:radial-gradient(circle at center,#667eea,#764ba2);
	box-shadow:0 0 50px rgba(0,0,0,0.5) inset; /* set inner-shadow*/
	}
#clock ul li{
	position:absolute;
	left:50%;
	margin-left:-2px;
	top:0;
	width:4px;
	height:10px;
	background:rgba(255,255,255,.5);
	transform-origin:center 200px; /* The center point of rotation of li is in the middle of the circle. */
	}
#clock li:nth-child(5n+1){ /* 5 ticks as a group, the first tick of each group should be longer. */
	height:18px;
	}
#num{
	position:absolute;
	width:360px;
	height:360px;
	left:0;
	right:0;
	top:0;
	bottom:0;
	margin:auto;
	}
#num li{
	position:absolute;
	left:50%;
	margin-left:-10px;
	top:0;
	color:rgba(255,255,255,.5);
	font:2em Arial, Helvetica, sans-serif;	
	transform-origin:center 180px;}

#hour,#min,#sec{
	background:#fff;
	position:absolute;
	left:50%;
	top:50%;
	transform-origin:bottom; /* The rotation point of the hour hand is at the bottom of itself. */
	box-shadow:0 0 6px rgba(0,0,0,.5)
	}
#hour{
	width:14px;
	height:100px;
	margin-left:-7px;
	margin-top:-100px;
	border-radius:3px;
	}
#min{
	width:10px;
	height:150px;
	margin-left:-5px;
	margin-top:-150px;
	border-radius:2px;
	}
#sec{
	width:4px;
	height:180px;
	margin-left:-2px;
	margin-top:-180px;
	border-radius:1px;
	}
#circle{
	width:40px;
	height:40px;
	border-radius:50%;
	background:#fff;
	position:absolute;
	left:50%;
	margin-left:-20px;
	top:50%;
	margin-top:-20px;
	box-shadow:0 0 20px rgba(0,0,0,.4)}
</style>

III. JavaScript コード

<script>
window.onload=function(){
	var oList=document.getElementById("list");
	var oCSS=document.getElementById("css"); //style tag can also add id attribute.
	var aNums=document.getElementById("num").getElementsByTagName("li");
	var oHour=document.getElementById("hour");
	var oMin=document.getElementById("min");
	var oSec=document.getElementById("sec");
	var aLi="";
	var sCSS="";
	for(var i=0;i<60;i++){ //loop 60 times to produce the scale values and the number of degrees each scale rotates.
		aLi+="<li></li>";
		sCSS+="#clock li:nth-child("+(i+1)+"){transform:rotate("+i*6+"deg);}"
		}
	for(var i=0;i<12;i++){
		sCSS+="#num li:nth-child("+(i+1)+"){transform:rotate("+i*30+"deg);}"
		}
	oList.innerHTML=aLi;
	oCSS.innerHTML+=sCSS; //css needs to be appended to the original css document.
	
	
	
	myTime(); //initialize the function.
	setInterval(myTime,1000); //Set the timer to execute the function every 1 second.
	function myTime(){
		var oDate=new Date();
		var iSec=oDate.getSeconds(); 
		// The number of minutes accurate to the second.
		var iMin=oDate.getMinutes()+iSec/60; 
		// The number of hours accurate to minutes and seconds. Can be more accurate when rotating.
		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)"; //The hour hand needs to be pointed to include the minutes and seconds to be accurate.
		}
	
	}
</script>

上記は、歩く2Dクロックの詳細を作成するためにCSS3使用変換であり、CSS3変換に関する詳細な情報は、スクリプトの家の他の関連記事に注意を払うしてください!.