原生js组合模式实现时钟转动

之前用“面向过程”的方式写过一个转动时钟,今天突然想要用“面向对象”的方式试一试,写完啦!

js代码:

( function( document) {
// 把document保存为局部变量
var doc = document;
// 所需元素,timer表示定时器
var ele = {
eleHour: doc. getElementsByClassName( "hour")[ 0],
eleMin: doc. getElementsByClassName( "min")[ 0],
eleSec: doc. getElementsByClassName( "sec")[ 0],
timer: null
};
// Time构造函数
function Time( hour, min, sec) {
this. hour = hour;
this. min = min;
this. sec = sec;
}
// 由于对Time原型重写,所以需要指定Time原型的constructor属性指向Time
Object. defineProperty( Time. prototype, "constructor",{
enumerable: false,
value: Time
})
// Time原型,用于保存下列方法
Time. prototype = {
// 设置时针转动的度数
setHourT : function() {
return this. hour* 30+ 0.5* this. min+ 0.5/ 60* this. sec;
},
// 设置分针转动的度数
setMinT : function() {
return this. min* 6+ 0.1* this. sec;
},
// 设置秒针转动的度数
setSecT : function() {
return this. sec* 6;
}
};
// 每隔一秒钟重新获取一次时间
ele. timer = setInterval( function() {
var nowTime = new Date(),
h = nowTime. getHours();
m = nowTime. getMinutes();
s = nowTime. getSeconds();
var time = new Time( h, m, s);
ele. eleSec. style. transform = "rotate("+ time. setSecT() + "deg)";
ele. eleMin. style. transform = "rotate("+ time. setMinT() + "deg)";
ele. eleHour. style. transform = "rotate("+ time. setHourT() + "deg)";
}, 1000)
// 清除定时器
return function() {
clearInterval( ele. timer);
}
})( document);

// 顺便复习下
// var time = new Date();
// time.getFullYear();time.getYear();
// time.getMonth();
// time.getData();
// time.getHours();
// time.getMinutes();
// time.getSeconds();
// time.getMilliseconds();

html代码:

<!DOCTYPE html >
< html lang= "en" >
< head >
< meta charset= "UTF-8" >
< meta name= "viewport" content= "width=device-width, initial-scale=1.0" >
< link rel= "stylesheet" href= "time.css" >
< title >时钟 </ title >
</ head >
< body >
< div id= "clock" >
< div class= "hms" >
<!-- 时针 -->
< div class= "hour" ></ div >
<!-- 分针 -->
< div class= "min" ></ div >
<!-- 秒针 -->
< div class= "sec" ></ div >
</ div >
</ div >
< script src= "time.js" > < / script >
</ body >
</ html >


css代码:

/* init */
html,body {
width: 100%;
height: 100%;
}
body,ul {
margin: 0;
}
ul {
padding: 0;
list-style: none;
}
/* clock */
#clock {
display: flex;
-webkit-justify-content: center;
-moz-justify-content: center;
-ms-justify-content: center;
justify-content: center;
-webkit-align-items: center;
-ms-align-items: center;
-moz-align-items: center;
align-items: center;
width: 300px;
height: 300px;
margin: 60px auto;
border-radius: 50%;
box-shadow: 0 0 15px;
}
.hms {
position: relative;
display: inline-block;
width: 30px;
height: 30px;
background-color: #333;
border-radius: 50%;
}
.hms div {
position: absolute;
bottom: 50%;
background-color: #333;
transform-origin: center bottom;
}
.hms .hour {
left: calc( 50% - 10px/ 2);
width: 10px;
height: 80px;
}
.hms .hour::after {
content: "";
position: absolute;
left: 0;
bottom: 79px;
border-width: 14px 5px;
    border-style : solid ;
    border-color: transparent transparent #333 transparent;
}
.hms .min {
left: calc( 50% - 8px/ 2);
width: 8px;
height: 110px;
transform: rotate( 15deg);
}
.hms .min::after {
content: "";
position: absolute;
left: 0;
bottom: 109px;
border-width : 12px 4px ;
    border-style: solid;
border-color : transparent transparent #333 transparent ;
}
.hms .sec {
left: calc( 50% - 6px/ 2);
width: 6px;
height: 120px;
transform: rotate( 30deg);
}
.hms .sec::after {
content: "";
position: absolute;
left: 0;
bottom: 119px;
border-width: 10px 3px;
    border-style : solid ;
    border-color: transparent transparent #333 transparent;
}

css总结:

// 1.box-shadow:IE8-不支持加兼容前缀没用
// 2.box-radius:IE8-不支持,加兼容前缀没用
// 3.flex弹性布局:IE完全不支持,加兼容前缀只能兼容到IE10
// 4.transform: IE8-不支持,加兼容前缀没用


github:   https://github.com/COMINGLIU/skills.github.io

猜你喜欢

转载自blog.csdn.net/qq_36060786/article/details/79801215
今日推荐