淺談時鐘的生成(js手寫簡潔代碼)
在生成時鐘的過程中自己想到布置表盤的寫法由這么幾種:
當(dāng)然利用那種模式都可以實(shí)現(xiàn),所以我們要用一個最好理解,代碼有相對簡便的方法實(shí)現(xiàn)
1、利用三角函數(shù)
用js在三角函數(shù)布置表盤的過程中有遇見到這種情況:是在表盤的刻度處,利用三角函數(shù)計(jì)算具體的值時不能得到整數(shù),需要向上或者向下取整,這樣無形中就會存在些許偏差,而且這樣的偏差難利用樣式來調(diào)整到位,即使最終效果都可以實(shí)現(xiàn),但是細(xì)微處的縫隙和角度的偏差都會影響整體的視覺體驗(yàn),作為一名程序開發(fā)人員,這樣的視覺體驗(yàn)很難讓別人認(rèn)可,放棄。
2、利用遮罩層
js利用遮罩層,主要還是在表盤的刻度處,表盤的刻度有長和短,每5個刻度都有一根較長的刻度,這樣我們利用遮罩層遮住的刻度的長短都是一致的,很難繼續(xù)調(diào)整其余的刻度所以也放棄。
3、利用定位以及(父子級關(guān)系)(推薦)
利用定位以及父子級關(guān)系的方法我覺得最好理解和上手,在這里為大家分享一下。下面是實(shí)現(xiàn)代碼:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style media="screen">
* {
margin: 0;
padding: 0;
}
#clock {
width: 600px;
height: 600px;
border: 4px solid lightgray;
margin: auto;
position: relative;
border-radius: 50%;
}
#scale {
width: 20px;
height: 100%;
position: absolute;
left: 50%;
margin-left: -10px;
/*background: green;*/
}
#point {
width: 4px;
height: 10px;
background: lightgray;
margin: auto;
}
#number {
width: 20px;
height: 20px;
margin-top: 5px;
/*background: red;*/
font-size: 20px;
text-align: center;
line-height: 20px;
}
#hour {
width: 12px;
height: 180px;
background: red;
border-radius: 6px;
transform-origin: 50% 150px;
position: absolute;
top: 150px;
left: 50%;
margin-left: -6px;
}
#minute {
width: 8px;
height: 250px;
background: orange;
position: absolute;
border-radius: 4px;
transform-origin: 50% 200px;
top: 100px;
left: 50%;
margin-left: -4px;
}
#second {
width: 4px;
height: 360px;
background: red;
border-radius: 2px;
position: absolute;
top: 0;
left: 50%;
margin-left: -2px;
transform-origin: 50% 300px;
z-index: 100;
}
</style>
</head>
<body>
<div id="clock">
<div id="hour">
</div>
<div id="minute">
</div>
<div id="second">
</div>
</div>
</body>
<script type="text/javascript">
var clock = document.getElementById('clock');
var hour = document.getElementById('hour');
var minute = document.getElementById('minute');
var second = document.getElementById('second');
function surface() {
var currentDate = new Date();
var hours = currentDate.getHours();
var minutes = currentDate.getMinutes();
var seconds = currentDate.getSeconds();
seconds = hours * 3600 + minutes * 60 + seconds;
hour.style.transform = 'rotate('+seconds / 120+'deg)';
minute.style.transform = 'rotate('+seconds * 0.1+'deg)';
second.style.transform = 'rotate('+seconds * 6+'deg)';
}
setInterval('surface()', 1000);
for (var i = 1; i < 61; i++) {
var scale = document.createElement('div');
scale.id = 'scale';
scale.style.transform = 'rotate('+i * 6+'deg)';
clock.appendChild(scale);
var point = document.createElement('div');
point.id = 'point';
scale.appendChild(point);
var number = document.createElement('div');
number.id = 'number';
number.style.transform = 'rotate(-'+i * 6+'deg)'
if (i % 5 == 0) {
number.innerHTML = i / 5;
point.style.height = '15px';
}
scale.appendChild(number);
}
</script>
</html>
校正中需要注意:
1、以下是分步實(shí)現(xiàn)的效果圖,最后做到細(xì)節(jié)處緊密貼合,不用其他的方法在對她進(jìn)行微調(diào),當(dāng)樣式布局全部完成之后就可以獲取當(dāng)前的時間加以校正,在校正的過程中有這樣一個問題,希望大家能注意: 時針的轉(zhuǎn)動角度不能以小時為單位來計(jì)算,例如:9:58 這時的時針指的位置是9,當(dāng)10 :00 時,時針以下跳轉(zhuǎn)到10的位置,所以時針的角度要以分鐘或者秒來計(jì)算,分針的角度跳轉(zhuǎn)要以分鐘或者秒來計(jì)算,秒針就是每秒跳轉(zhuǎn)6度。
2、還有一點(diǎn)要注意,三個指針的轉(zhuǎn)動圓心問題,利用transform-origin 來定指針轉(zhuǎn)動點(diǎn)一定要定準(zhǔn)






以上這篇淺談時鐘的生成(js手寫簡潔代碼)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
微信小程序?qū)崿F(xiàn)側(cè)邊欄二級聯(lián)動
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)側(cè)邊欄二級聯(lián)動,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-07-07
JavaScript循環(huán)鏈表實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于JavaScript循環(huán)鏈表實(shí)現(xiàn)的相關(guān)資料,循環(huán)鏈表和單向鏈表很相似,唯一的區(qū)別是循環(huán)鏈表的尾節(jié)點(diǎn)是指向頭節(jié)點(diǎn)的,需要的朋友可以參考下2023-07-07
JS實(shí)現(xiàn)從對象獲取對象中單個鍵值的方法示例
這篇文章主要介紹了JS實(shí)現(xiàn)從對象獲取對象中單個鍵值的方法,涉及javascript數(shù)組對象遍歷、事件監(jiān)聽、處理等相關(guān)操作技巧,需要的朋友可以參考下2019-06-06
js觸發(fā)asp.net的Button的Onclick事件應(yīng)用
由于asp.net采用的是事件驅(qū)動模式,所以默認(rèn)用戶按回車并沒有觸發(fā)按鈕的onclick事件。用戶按回車也不是沒有提交表單,通過httpwath可以看到,實(shí)際上頁面表單是提交到了form下的action頁面,只不過沒有觸發(fā)onclick事件而已,感興趣的朋友可以了解下,或許對你有所幫助2013-02-02
javascript實(shí)現(xiàn)日期時間動態(tài)顯示示例代碼
這篇文章主要介紹了javascript實(shí)現(xiàn)日期時間動態(tài)顯示示例代碼,頁面動態(tài)顯示時間變化的方法有很多,本文為大家介紹下使用javascript的具體實(shí)現(xiàn),感興趣的朋友可以參考一下2015-09-09

