css动态时间,利用CSS3的transform做的动态时钟效果

1. transform 与 transform-origin 使用说明

目前这两个属性得到了主流浏览器IE,webkit,firefox,opera的支持,属性名分别为-ms-transform -webkit-transform,-moz-transform,-o-transform。可能有人会疑问为什么要加各浏览器的前缀(-ms-),本人认为可能在浏览器新版本发布时,此CSS属性还没有正式被W3组织当标准发布吧,所以加前缀加以区分,以后所有浏览器肯定会统一使用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.html,http://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属性实现了一些可用SVG实现的同样的功能。它可用于内联(inline)元素和块级(block)元素。它允许我们旋转、缩放和移动元素 ,他有几个属性值参数:

rotate(旋转)允许你通过传递一个度数值来转动一个对象;

scale是一个缩放功能,可以让任一元素变的更大。它使用一个或者两个正数和负数以及小数作为参数;当使用一个参数时表示X轴和Y轴的缩放相同;

translate就是基于X和Y 坐标重新定位元素,当使用一个参数时表示X轴和Y轴的参数相同;

skew倾斜(ps中的斜切),参数是度数,当使用一个参数时表示X轴和Y轴的参数相同;

matrix矩阵变换,就是基于X和Y 坐标重新定位元素,它使用6个参数;

2.动态时钟页面的HTML + CSS

HTML 代码:

复制代码代码如下:

代码中各个DIV的含义就不解释了,相信大家都看得懂。HTML还是挺简单的,起作用的还得看CSS。

相关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;

}

这里说明下几个关键的CSS属性:#clock 里面的块元素的 position:absolute;然后再用top; bottom; margin; left; right; 才能准确定位,各个指钟的旋转原点为底部的中点:transform-origin:50% 100%;

3.页面的Javascript的实现

最为关键的是JS代码了:

复制代码代码如下:

//初始化各指钟的位置

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 -12;

}

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 -12;

}

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)

请在支持CSS3的浏览器中查看,如:firefox, Chrome….,但IE9看不到效果,本地单独运行页面能看到效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值