运用CSS3的transform做的动态性数字时钟实际效果

2021-03-12 06:50 jianzhan
1. transform 与 transform-origin 应用表明
现阶段这两个特性获得了流行访问器IE,webkit,firefox,opera的适用,特性名各自为-ms-transform -webkit-transform,-moz-transform,-o-transform。将会有人会疑惑为何要加各访问器的前缀(-ms-),自己觉得将会在访问器新版本号公布时,此CSS特性都还没宣布被W3机构当规范公布吧,因此加前缀加以区别,之后全部访问器毫无疑问会统1应用transform 和trandform-origin的。

全新CSS规范参照网站:http://www.w3.org/Style/CSS/current-work
IE9开发设计人员具体指导网站:http://msdn.microsoft.com/en-us/ie/ff468705
webkit开发设计材料:http://www.webkit.org/projects/documentation/index.htmlhttp://developer.apple.com/devcenter/safari/index.action
firefox开发设计材料:https://developer.mozilla.org/En/Developer_Guide
opera开发设计材料:http://dev.opera.com/articles/view/wcl-developer-guide/
transform-origin是形变原点,也便是该元素紧紧围绕着那个点形变或转动,该特性仅有在设定了transform特性的情况下起功效,它接纳两个主要参数,它们能够是百分比,em,px等实际的值,还可以是left,center,right,或 top,center,bottom等叙述性主要参数 ;它的默认设置值是50% 50%。
top left | left top 等额的于 0 0;
top | top center | center top 等额的于 50% 0
right top | top right 等额的于 100% 0
left | left center | center left 等额的于 0 50%
center | center center 等额的于 50% 50%(默认设置值)
right | right center | center right 等额的于 100% 50%
bottom left | left bottom 等额的于 0 100%
bottom | bottom center | center bottom 等额的于 50% 100%
bottom right | right bottom 等额的于 100% 100%
transform特性完成了1些能用SVG完成的一样的作用。它能用于内联(inline)元素和块级(block)元素。它容许大家转动、放缩和挪动元素 ,他有几个特性值主要参数:
rotate(转动)容许你根据传送1个度标值来旋转1个目标;
scale是1个放缩作用,可让任1元素变的更大。它应用1个或两个正数和负数和小数做为主要参数;当应用1个主要参数时表明X轴和Y轴的放缩同样;
translate便是根据X和Y 座标再次精准定位元素,当应用1个主要参数时表明X轴和Y轴的主要参数同样;
skew歪斜(ps中的斜切),主要参数是度数,当应用1个主要参数时表明X轴和Y轴的主要参数同样;
matrix引流矩阵转换,便是根据X和Y 座标再次精准定位元素,它应用6个主要参数;
2.动态性数字时钟网页页面的HTML + CSS
HTML 编码:

拷贝编码
编码以下:

<div id="clock">
<div id="dot"></div>
<div id="second" class="needle">
<div id="second_needle">
</div>
</div>
<div id="minute" class="needle">
<div id="minute_needle">
</div>
</div>
<div id="hour" class="needle">
<div id="hour_needle">
</div>
</div>
</div>

编码中各个DIV的含意就不解释了,坚信大伙儿都看得懂。HTML還是挺简易的,起功效的还得看CSS。
有关CSS编码:

拷贝编码
编码以下:

<style type="text/css">
#clock{
width: 200px;
height: 200px;
border: 1px solid black;
border-radius: 100px;
position:relative;
margin:0 auto;
background-color:#eee;
}
#dot{
border-radius:2px;
width: 8px;
height: 8px;
position:absolute;
top: 0;
bottom: 0;
margin: auto;
left: 0;
right: 0;
background: black;
}
.needle
{
-ms-transform-origin: 50% 100%;
-webkit-transform-origin: 50% 100%;
-moz-transform-origin: 50% 100%;
-o-transform-origin: 50% 100%;
transform-origin:50% 100%;
}
#second{
position:relative;
z-index:5;
height: 80px;
width: 1px;
margin: 20px auto;
}
#second_needle{
height: 100%;
width: 100%;
position: relative;
background: green;
}
#minute{
z-index:4;
height: 60px;
width: 4px;
position: absolute;
top: 40px;
left: 0px;
right: 0px;
margin: auto;
}
#minute_needle{
height: 100%;
width: 100%;
background: blue;
}
#hour{
z-index:3;
height: 40px;
width: 8px;
position: absolute;
top: 60px;
left: 0px;
right: 0px;
margin: auto;
}
#hour_needle{
height: 100%;
width: 100%;
background: red;
}
</style>

这里表明下几个重要的CSS特性:#clock 里边的块元素的 position:absolute;随后再用top; bottom; margin; left; right; 才可以精确精准定位,各个指钟的转动原点为底部的中点:transform-origin:50% 100%;
3.网页页面的Javascript的完成
最为重要的是JS编码了:

拷贝编码
编码以下:

<script type="text/javascript">
//原始化各指钟的部位
window.onload = function(){
var date = new Date(),
second = date.getSeconds(),
minute = date.getMinutes(),
minuteDeg,
hour = date.getHours(),
hourDeg;
var secondrotate = 'rotate('+second*6+'deg)';
var scss = '-moz-transform:' + secondrotate + ';-o-transform:' + secondrotate + ';-ms-transform:' + secondrotate;
//对?于úwebkit的?浏ˉ览à器÷,要a这a样ù定¨义?
document.getElementById('second').style.cssText = scss;
document.getElementById('second').style.webkitTransform = secondrotate;
minuteDeg = minute*6 + second*6/60;
var minuterotate = 'rotate('+minuteDeg+'deg)';
var minutecss = '-moz-transform:' + minuterotate + ';-o-transform:' + minuterotate + ';-ms-transform:' + minuterotate ;
document.getElementById('minute').style.cssText = minutecss;
document.getElementById('minute').style.webkitTransform = minuterotate; //对?于úwebkit的?浏ˉ览à器÷,要a这a样ù定¨义?
if(hour>12){
hour = hour ⑴2;
}
hourDeg = hour * 30 + minute*30/60;
var hourtrotate = 'rotate('+hourDeg+'deg)';
var hcss = '-moz-transform:' + hourtrotate + ';-o-transform:' + hourtrotate + ';-ms-transform:' + hourtrotate;
document.getElementById('hour').style.cssText = hcss;
document.getElementById('hour').style.webkitTransform = hourtrotate; //对?于úwebkit的?浏ˉ览à器÷,要a这a样ù定¨义?
};
//周ü期ú性?改?变?秒?钟ó的?位?置?
setInterval(function(){
var date = new Date(),
second = date.getSeconds();
var secondrotate = 'rotate('+second*6+'deg)';
var scss = '-moz-transform:' + secondrotate + ';-o-transform:' + secondrotate + ';-ms-transform:' + secondrotate ;
document.getElementById('second').style.cssText = scss;
document.getElementById('second').style.webkitTransform = secondrotate; //对?于úwebkit的?浏ˉ览à器÷,要a这a样ù定¨义?
},1000)
//周ü期ú性?改?变?分?钟ó的?位?置?
setInterval(function(){
var date = new Date(),
second = date.getSeconds(),
minute = date.getMinutes(),
minuteDeg;
minuteDeg = minute*6 + second*6/60;
var minuterotate = 'rotate('+minuteDeg+'deg)';
var minutecss = '-moz-transform:' + minuterotate + ';-o-transform:' + minuterotate + ';-ms-transform:' + minuterotate ;
document.getElementById('minute').style.cssText = minutecss;
document.getElementById('minute').style.webkitTransform = minuterotate; //对?于úwebkit的?浏ˉ览à器÷,要a这a样ù定¨义?
},6000)
//周ü期ú性?改?变?时±钟ó的?位?置?
setInterval(function(){
var date = new Date(),
second = date.getSeconds(),
minute = date.getMinutes(),
hour = date.getHours(),
hourDeg;
if(hour>12){
hour = hour ⑴2;
}
hourDeg = hour * 30 + minute*30/60;
var hourtrotate = 'rotate('+hourDeg+'deg)';
var hcss = '-moz-transform:' + hourtrotate + ';-o-transform:' + hourtrotate + ';-ms-transform:' + hourtrotate;
document.getElementById('hour').style.cssText = hcss;
document.getElementById('hour').style.webkitTransform = hourtrotate; //对?于úwebkit的?浏ˉ览à器÷,要a这a样ù定¨义?
},360000)
</script>

请在适用CSS3的访问器中查询,如:firefox, Chrome….,但IE9看不见实际效果,当地独立运作网页页面能看到实际效果