html训练项目,前端新手项目练习之钟表

前端新手项目练习值钟表

前端新手记录自己在网络上找到的前端练习项目。

项目简介

一个简单的钟表,有刻度和数字,利用了一些CSS3特效来实现。

钟表.gif

html部分

在html中写好钟表、圆心和时分秒针,其它标签较为复杂,需通过javascript添加。

钟表

CSS部分

CSS部分使用了很多的CSS3特效,用来实现钟表并且更好看一些。

* {

margin: 0;

padding: 0;

}

.clock {

width: 400px;

height: 400px;

border: 10px solid #333;

box-shadow: 0px 0px 20px 3px #444 inset;

border-radius: 50%;

position: relative;

margin: 5px auto;

z-index: 10;

background-color: #f6f6f6;

}

/* 钟表上的数字 */

.clock-num {

width: 40px;

height: 40px;

font-size: 22px;

text-align: center;

line-height: 40px;

position: absolute;

z-index: 8;

color: #555;

font-family: fantasy; /* 字体 */

}

.em_num {

font-size: 28px;

}

.clock-line {

position: absolute;

z-index: 20;

}

.hour-line {

width: 100px;

height: 4px;

top: 198px;

left: 200px;

background-color: #000;

border-radius: 2px;

transform-origin: 0 50%;

box-shadow: 1px -3px 8px 3px #aaa;

}

.minute-line {

width: 130px;

height: 2px;

top: 199px;

left: 190px;

background-color: #000;

transform-origin: 7.692% 50%;

box-shadow: 1px -3px 8px 1px #aaa;

}

.second-line {

width: 170px;

height: 1px;

top: 199.5px;

left: 180px;

background-color: #f60;

transform-origin: 11.765% 50%;

box-shadow: 1px -3px 7px 1px #bbb;

}

.origin {

width: 20px;

height: 20px;

border-radius: 10px;

background-color: #000;

position: absolute;

top: 190px;

left: 190px;

z-index: 14;

}

/* 刻度 */

#list {

list-style: none;

position: relative;

height: 100%;

margin: 0;

padding: 0;

}

#list li {

list-style:none;

width: 2px;

height: 12px;

position: absolute;

left: 199px;

top: 4px;

transform-origin: center 196px; /* 相对元素左上角的位置 */

background-color:#555;

}

#list li:nth-child(5n+1) {

width: 4px;

height: 15px;

}

z-index属性

z-index属性设置元素的堆叠顺序。拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。比如时分秒针应该在圆心的前面。

font-family属性

font-family 规定元素的字体系列。

font-family 可以把多个字体名称作为一个“回退”系统来保存。如果浏览器不支持第一个字体,则会尝试下一个。也就是说,font-family 属性的值是用于某个元素的字体族名称或/及类族名称的一个优先表。浏览器会使用它可识别的第一个值。

有两种类型的字体系列名称:

指定的系列名称:具体字体的名称,比如:"times"、"courier"、"arial"。

通常字体系列名称:比如:"serif"、"sans-serif"、"cursive"、"fantasy"、"monospace"

box-shadow属性

box-shadow 属性向框添加一个或多个阴影。用好了这个属性可以让你的图像更加漂亮和精致。值和描述如下表所示。

描述

h-shadow

必需。水平阴影的位置,允许负值。

v-shadow

必需。垂直阴影的位置,允许负值。

blur

可选。模糊距离。

spread

可选。阴影的尺寸

color

可选。阴影的颜色。

inset

可选。将外部阴影(outset)改为内部阴影。

如果不设置阴影类型,默认为投影效果,当设置为inset时,改为内投影。X轴偏移和Y轴偏移定义阴影偏移距离,必须设置,不需要偏移可置为0.模糊距离和硬硬的尺寸和颜色均为可选值,默认是黑色实影。

transform属性

transform 属性向元素应用 2D 或 3D 转换。该属性允许我们对元素进行旋转、缩放、移动或倾斜。本项目主要用到的是2D旋转,当值设置为rotate(angle)时定义2D旋转,其中参数为旋转的角度。

transform-origin属性

该属性必须和transform属性一起使用,用来设置旋转的基点,不设置的话默认为元素中心。在2D旋转中,两个参数分别是X轴和Y轴的位置,描述如下。

描述

x-axis

定义视图被置于X轴何处,可选值:left,center,right,也可以使用数字或百分数,相对元素最左侧定位。

y-axis

定义视图被置于Y轴何处,可选值:top,center,bottom,也可以使用数字或百分数,相对元素最顶侧定位。

javascript部分

javascript部分一方面是为3个表针添加旋转函数,让其根据当前时间旋转,一方面是设置一些在CSS中设置起来比较复杂的样式。

通过本项目我们可以了解到javascript中的DOM操作。可以通过createDocument函数创建节点,然后通过appendChild将其放在某个父元素之下。还可以通过innerHTML直接在节点内部添加HTML。

window.onload = function() {

initNumXY(200, 160, 40, 40);

var hour_line = document.getElementById("hour-line");

var minute_line = document.getElementById("minute-line");

var second_line = document.getElementById("second-line");

function setTime() {

var date = new Date();

var s = date.getSeconds();

var m = date.getMinutes() + s / 60;

var h = date.getHours() + m / 60;

hour_line.style.transform = " rotate( " + (h * 30 - 90) + "deg ) ";

minute_line.style.transform = " rotate( " + (m * 6 - 90) + "deg ) ";

second_line.style.transform = " rotate( " + (s * 6 - 90 ) + "deg ) ";

}

setTime();//设置时间,不加这句开始会有一下停顿

setInterval(setTime, 1000);

//定位数字的位置,R:大圆的半径,r:数字所在位置小圆的半径,w: 数字的宽, h:数字的高

function initNumXY(R, r, w, h) {

var numXY = [

{

"left" : R + 0.5 * r - 0.5 * w,

"top" : R - 0.5 * r * 1.73205 - 0.5 * h

},

{

"left" : R + 0.5 * r * 1.73205 - 0.5 * w,

"top" : R - 0.5 * r - 0.5 * h

},

{

"left" : R + r - 0.5 * w,

"top" : R - 0.5 * h

},

{

"left" : R + 0.5 * r * 1.73205 - 0.5 * w,

"top" : R + 0.5 * r - 0.5 * h

},

{

"left" : R + 0.5 * r - 0.5 * w,

"top" : R + 0.5 * r * 1.73205 - 0.5 * h

},

{

"left" : R - 0.5 * w,

"top" : R + r - 0.5 * h

},

{

"left" : R - 0.5 * r - 0.5 * w,

"top" : R + 0.5 * r * 1.73205 - 0.5 * h

},

{

"left" : R - 0.5 * r * 1.73205 - 0.5 * w,

"top" : R + 0.5 * r - 0.5 * h

},

{

"left" : R - r - 0.5 * w,

"top" : R - 0.5 * h

},

{

"left" : R - 0.5 * r * 1.73205 - 0.5 * w,

"top" : R - 0.5 * r - 0.5 * h

},

{

"left" : R - 0.5 * r - 0.5 * w,

"top": R - 0.5 * r * 1.73205 - 0.5 * h

},

{

"left" : R - 0.5 * w,

"top" : R - r - 0.5 * h

}

];

var clock = document.getElementById("clock");

//钟表上添加数字

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

if(i % 3 == 0) {

clock.innerHTML += "

" + i + "
";

} else {

clock.innerHTML += "

" + i + "
";

}

}

var clock_num = document.getElementsByClassName("clock-num");

//定位

for(var i = 0; i < clock_num.length; i++) {

clock_num[i].style.left = numXY[i].left + 'px';

clock_num[i].style.top = numXY[i].top + 'px';

}

//钟表上添加刻度

var ul = document.createElement("ul");

ul.setAttribute("id", "list");

clock.appendChild(ul);

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

var li = document.createElement("li");

li.style.transform = "rotate( "+ i * 6 +"deg )";

ul.appendChild(li);

}

}

}

你可能感兴趣的:(html训练项目)