CSS3+js實(shí)現(xiàn)簡(jiǎn)單的時(shí)鐘特效
來(lái)源:易賢網(wǎng) 閱讀:1989 次 日期:2015-04-14 14:52:27
溫馨提示:易賢網(wǎng)小編為您整理了“CSS3+js實(shí)現(xiàn)簡(jiǎn)單的時(shí)鐘特效”,方便廣大網(wǎng)友查閱!

學(xué)習(xí)css3ing,正在學(xué)習(xí)transfomr,突發(fā)奇想用此做個(gè)小時(shí)鐘,開(kāi)始吧:

準(zhǔn)備前期工作,把時(shí)鐘的表盤(pán),時(shí)分秒針,實(shí)時(shí)時(shí)間標(biāo)簽 的大概樣子做好,效果如圖:

名單

html代碼如下:

代碼如下:

<div class="main">

<div id="timeLabel"></div>

<div id="hour"></div>

<div id="minute"></div>

<div id="second"></div>

</div>

css 代碼如下:

代碼如下:

<style>

* {

margin: 0;

padding: 0;

}

.main {

position: relative;

margin: 100px auto;

width: 300px;

height: 300px;

border-radius: 300px;

border: 1px solid #000;

box-shadow:2px 5px;

}

#timeLabel {

position: absolute;

background-color:pink;

width:100px;

height:30px;

left:100px;

top:180px;

}

#hour {

width: 100px;

height: 10px;

background-color: red;

position:absolute;

left:150px;

top:145px;

}

#minute {

width:120px;

height:8px;

background-color:blue;

position:absolute;

left:150px;

top:146px;

}

#second {

width: 140px;

height: 4px;

background-color: green;

position: absolute;

left: 150px;

top: 148px;

}

</style>

2. 初始化默認(rèn)時(shí)間,和表盤(pán)刻度 ,效果如下:

名單2

更改后的css代碼:

代碼如下:

<style>

* {

margin: 0;

padding: 0;

}

.main {

position: relative;

margin: 100px auto;

width: 300px;

height: 300px;

border-radius: 300px;

border: 1px solid #000;

box-shadow: 2px 5px #808080;

}

#timeLabel {

position: absolute;

background-color: pink;

width: 80px;

height: 25px;

left: 110px;

top: 180px;

color: #fff;

line-height: 25px;

text-align: center;

}

#hour {

width: 100px;

height: 10px;

background-color: red;

position: absolute;

left: 150px;

top: 145px;

transform-origin: 0 50%;

}

#minute {

width: 120px;

height: 8px;

background-color: blue;

position: absolute;

left: 150px;

top: 146px;

transform-origin: 0 50%;

}

#second {

width: 140px;

height: 4px;

background-color: green;

position: absolute;

left: 150px;

top: 148px;

transform-origin: 0 50%;

}

.hourPointer, .minuterPointer, .secondPointer {

position: absolute;

transform-origin: 0 50%;

}

.hourPointer {

height: 10px;

width: 12px;

left: 150px;

top: 145px;

background-color: #f00;

z-index:3;

}

.minuterPointer {

height: 8px;

width: 10px;

left: 150px;

top: 146px;

background-color: #b6ff00;

z-index: 2;

}

.secondPointer {

height: 6px;

width: 8px;

left: 150px;

top: 147px;

background-color: #fa8;

z-index: 1;

}

</style>

初始化 js代碼:

代碼如下:

window.onload = function () {

initClock();

}

var timer = null;

function $(id) {

return document.getElementById(id)

}

function CreateKeDu(pElement, className, deg, translateWidth) {

var Pointer = document.createElement("div");

Pointer.className = className

Pointer.style.transform = "rotate(" + deg + "deg) translate(" + translateWidth + "px)";

pElement.appendChild(Pointer);

}

function initClock() {

var main = $("biaopan");

var timeLabel = $("timeLabel");

var hour = $("hour");

var minute = $("minute");

var second = $("second");

var now = new Date();

var nowHour = now.getHours();

var nowMinute = now.getMinutes();

var nowSecond = now.getSeconds();

//初始化timeLabel

timeLabel.innerHTML = nowHour + ":" + nowMinute + ":" + nowSecond;

//初始化表盤(pán)

for (var index = 0; index < 4; index++) {

CreateKeDu(main, "hourPointer", index * 90, 138);

}

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

CreateKeDu(main, "minuterPointer",index*30, 140);

}

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

CreateKeDu(main, "secondPointer", index * 6, 142);

}

//初始化時(shí)分秒針

second.style.transform = "rotate(" + (nowSecond * 6 - 90) + "deg)";

minute.style.transform = "rotate(" + (nowMinute * 6 + 1 / 10 * nowSecond - 90) + "deg)";

hour.style.transform = "rotate(" + (nowHour * 30 + 1 / 2 * nowMinute + 1 / 120 * nowSecond - 90) + "deg)";

}

3.添加定時(shí)器:

js代碼如下:

代碼如下:

//定時(shí)器

function startMove() {

clearInterval(timer);

timer = setInterval(function () {

var now = new Date();

var nowSecond = now.getSeconds();

var nowMinute = now.getMinutes();

var nowHour = now.getHours();

second.style.transform = "rotate(" + (nowSecond * 6 - 90) + "deg)";

minute.style.transform = "rotate(" + (nowMinute * 6 + 1 / 10 * nowSecond - 90) + "deg)";

hour.style.transform = "rotate(" + (nowHour * 30 + 1 / 2 * nowMinute + 1 / 120 * nowSecond - 90) + "deg)";

timeLabel.innerHTML = nowHour + ":" + nowMinute + ":" + nowSecond;

}, 1000);

}

4.使用OOP方式更改:

修改后的js代碼如下:

代碼如下:

function Clock() {

//定義屬性

this.main = this.$("biaopan");

this.timeLabel = this.$("timeLabel");

this.hour = this.$("hour");

this.minute = this.$("minute");

this.second = this.$("second");

this.nowHour = null;

this.nowMinute = null;

this.nowSecond = null;

this.timer = null;

var _this = this;

//初始化函數(shù)

var init = function () {

_this.getNowTime();

_this.initClock();

_this.InterVal();

}

init();

}

Clock.prototype.$ = function (id) {

return document.getElementById(id)

}

Clock.prototype.CreateKeDu = function (className, deg, translateWidth) {

var Pointer = document.createElement("div");

Pointer.className = className

Pointer.style.transform = "rotate(" + deg + "deg) translate(" + translateWidth + "px)";

this.main.appendChild(Pointer);

}

Clock.prototype.getNowTime = function () {

var now = new Date();

this.nowHour = now.getHours();

this.nowMinute = now.getMinutes();

this.nowSecond = now.getSeconds();

}

Clock.prototype.setPosition = function () {

this.second.style.transform = "rotate(" + (this.nowSecond * 6 - 90) + "deg)";

this.minute.style.transform = "rotate(" + (this.nowMinute * 6 + 1 / 10 * this.nowSecond - 90) + "deg)";

this.hour.style.transform = "rotate(" + (this.nowHour * 30 + 1 / 2 * this.nowMinute + 1 / 120 * this.nowSecond - 90) + "deg)";

}

Clock.prototype.initClock = function () {

//初始化timeLabel

this.timeLabel.innerHTML = this.nowHour + ":" + this.nowMinute + ":" + this.nowSecond;

//初始化表盤(pán)

for (var index = 0; index < 4; index++) {

this.CreateKeDu("hourPointer", index * 90, 138);

}

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

this.CreateKeDu("minuterPointer", index * 30, 140);

}

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

this.CreateKeDu("secondPointer", index * 6, 142);

}

this.setPosition();

}

Clock.prototype.InterVal = function () {

clearInterval(this.timer);

var _this = this;

this.timer = setInterval(function () {

_this.getNowTime();

_this.second.style.transform = "rotate(" + (_this.nowSecond * 6 - 90) + "deg)";

_this.minute.style.transform = "rotate(" + (_this.nowMinute * 6 + 1 / 10 * _this.nowSecond - 90) + "deg)";

_this.hour.style.transform = "rotate(" + (_this.nowHour * 30 + 1 / 2 * _this.nowMinute + 1 / 120 * _this.nowSecond - 90) + "deg)";

_this.timeLabel.innerHTML = _this.nowHour + ":" + _this.nowMinute + ":" + _this.nowSecond;

}, 1000);

}

最后調(diào)用如下:

代碼如下:

window.onload = function () {

new Clock();

}

最終頁(yè)面代碼:

代碼如下:

<!DOCTYPE html>

<html xmlns="<a href="

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title></title>

<style>

* {

margin: 0;

padding: 0;

}

.main {

position: relative;

margin: 100px auto;

width: 300px;

height: 300px;

border-radius: 300px;

border: 1px solid #000;

box-shadow: 2px 5px #808080;

}

#timeLabel {

position: absolute;

background-color: pink;

width: 80px;

height: 25px;

left: 110px;

top: 180px;

color: #fff;

line-height: 25px;

text-align: center;

}

#hour {

width: 100px;

height: 10px;

background-color: red;

position: absolute;

left: 150px;

top: 145px;

transform-origin: 0 50%;

}

#minute {

width: 120px;

height: 8px;

background-color: blue;

position: absolute;

left: 150px;

top: 146px;

transform-origin: 0 50%;

}

#second {

width: 140px;

height: 4px;

background-color: green;

position: absolute;

left: 150px;

top: 148px;

transform-origin: 0 50%;

}

.hourPointer, .minuterPointer, .secondPointer {

position: absolute;

transform-origin: 0 50%;

}

.hourPointer {

height: 10px;

width: 12px;

left: 150px;

top: 145px;

background-color: #f00;

z-index: 3;

}

.minuterPointer {

height: 8px;

width: 10px;

left: 150px;

top: 146px;

background-color: #b6ff00;

z-index: 2;

}

.secondPointer {

height: 6px;

width: 8px;

left: 150px;

top: 147px;

background-color: #fa8;

z-index: 1;

}

</style>

<script>

function Clock() {

//定義屬性

this.main = this.$("biaopan");

this.timeLabel = this.$("timeLabel");

this.hour = this.$("hour");

this.minute = this.$("minute");

this.second = this.$("second");

this.nowHour = null;

this.nowMinute = null;

this.nowSecond = null;

this.timer = null;

var _this = this;

//初始化函數(shù)

var init = function () {

_this.getNowTime();

_this.initClock();

_this.InterVal();

}

init();

}

Clock.prototype.$ = function (id) {

return document.getElementById(id)

}

Clock.prototype.CreateKeDu = function (className, deg, translateWidth) {

var Pointer = document.createElement("div");

Pointer.className = className

Pointer.style.transform = "rotate(" + deg + "deg) translate(" + translateWidth + "px)";

this.main.appendChild(Pointer);

}

Clock.prototype.getNowTime = function () {

var now = new Date();

this.nowHour = now.getHours();

this.nowMinute = now.getMinutes();

this.nowSecond = now.getSeconds();

}

Clock.prototype.setPosition = function () {

this.second.style.transform = "rotate(" + (this.nowSecond * 6 - 90) + "deg)";

this.minute.style.transform = "rotate(" + (this.nowMinute * 6 + 1 / 10 * this.nowSecond - 90) + "deg)";

this.hour.style.transform = "rotate(" + (this.nowHour * 30 + 1 / 2 * this.nowMinute + 1 / 120 * this.nowSecond - 90) + "deg)";

}

Clock.prototype.initClock = function () {

//初始化timeLabel

this.timeLabel.innerHTML = this.nowHour + ":" + this.nowMinute + ":" + this.nowSecond;

//初始化表盤(pán)

for (var index = 0; index < 4; index++) {

this.CreateKeDu("hourPointer", index * 90, 138);

}

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

this.CreateKeDu("minuterPointer", index * 30, 140);

}

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

this.CreateKeDu("secondPointer", index * 6, 142);

}

this.setPosition();

}

Clock.prototype.InterVal = function () {

clearInterval(this.timer);

var _this = this;

this.timer = setInterval(function () {

_this.getNowTime();

_this.second.style.transform = "rotate(" + (_this.nowSecond * 6 - 90) + "deg)";

_this.minute.style.transform = "rotate(" + (_this.nowMinute * 6 + 1 / 10 * _this.nowSecond - 90) + "deg)";

_this.hour.style.transform = "rotate(" + (_this.nowHour * 30 + 1 / 2 * _this.nowMinute + 1 / 120 * _this.nowSecond - 90) + "deg)";

_this.timeLabel.innerHTML = _this.nowHour + ":" + _this.nowMinute + ":" + _this.nowSecond;

}, 1000);

}

window.onload = function () {

new Clock();

}

</script>

</head>

<body>

<div class="main" id="biaopan">

<div id="timeLabel"></div>

<div id="hour"></div>

<div id="minute"></div>

<div id="second"></div>

</div>

</body>

</html>

總結(jié):本例中使用了css3 的transform屬性中的 rotate的旋轉(zhuǎn)效果和translate的位移效果。

以上所述就是本文的全部?jī)?nèi)容了,希望本文能夠?qū)Υ蠹覍W(xué)習(xí)CSS3有所幫助。

更多信息請(qǐng)查看IT技術(shù)專欄

更多信息請(qǐng)查看網(wǎng)頁(yè)制作
易賢網(wǎng)手機(jī)網(wǎng)站地址:CSS3+js實(shí)現(xiàn)簡(jiǎn)單的時(shí)鐘特效
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!
相關(guān)閱讀網(wǎng)頁(yè)制作

2025國(guó)考·省考課程試聽(tīng)報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)