使用原生JS编写时钟

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>钟表</title>
    <style type="text/css">
        /*钟表圆圈的样式*/
        .circle {
            position: relative;
            margin: 150px auto;
            width: 200px;
            height: 200px;
            border: 2px solid black;
            border-radius: 100px;
        }
        /*时针*/
        #hour {
            position: absolute;
            top: 97px;
            left: 97px;
            width: 6px;
            height: 60px;
            background-color: blue;
            -webkit-transform-origin: 50% 0%;
            -moz-transform-origin: 50% 0%;
            -ms-transform-origin: 50% 0%;
            -o-transform-origin: 50% 0%;
            transform-origin: 50% 0%;
        }
        /*分针*/
        #min {
            position: absolute;
            top: 98px;
            left: 98px;
            width: 4px;
            height: 80px;
            background-color: forestgreen;
            -webkit-transform-origin: 50% 0%;
            -moz-transform-origin: 50% 0%;
            -ms-transform-origin: 50% 0%;
            -o-transform-origin: 50% 0%;
            transform-origin: 50% 0%;
        }
        /*秒针*/
        #sec {
            position: absolute;
            top: 99px;
            left: 99px;
            width: 2px;
            height: 90px;
            background-color: chocolate;
            -webkit-transform-origin: 50% 0%;
            -moz-transform-origin: 50% 0%;
            -ms-transform-origin: 50% 0%;
            -o-transform-origin: 50% 0%;
            transform-origin: 50% 0%;
        }
        /*钟表中心圆点*/
        #point {
            position: absolute;
            z-index: 1;
            top: 90px;
            left: 90px;
            width: 20px;
            height: 20px;
            background-color: black;
            border-radius: 10px;
        }
        /*钟表刻度*/
        ul li {
            list-style: none;
            position: absolute;
            top: 100px;
            left: 99px;
            width: 2px;
            height: 97px;
            border-bottom: 4px solid black;
            -webkit-transform-origin: 50% 0%;
            -moz-transform-origin: 50% 0%;
            -ms-transform-origin: 50% 0%;
            -o-transform-origin: 50% 0%;
            transform-origin: 50% 0%;
        }
        /*钟表小时刻度,就是长一点的那个刻度*/
        ul li.lang {
            height: 93px;
            border-bottom: 8px solid black;
        }
    </style>
</head>
<body>
    <div class="circle">
        <div id="point"></div>
        <div id="hour"></div>
        <div id="min"></div>
        <div id="sec"></div>
        <ul>

        </ul>
    </div>

</body>
<script type="text/javascript">

//    分别获取时针,分针,秒针和刻度的父元素ul
    var hour=document.getElementById("hour");
    var min=document.getElementById("min");
    var sec=document.getElementById("sec");
    var oul=document.getElementsByTagName("ul")[0];

//      动态创建60个li表示钟表刻度并添加到父元素ul内
    var olis="";
    for (var i=0;i<60;i++){
        olis+="<li></li>";
    }
    oul.innerHTML=olis;
//        获取创建好的每一个li
    var oLis=document.getElementsByTagName("li");
    for(var i=0;i<60;i++){
//        每隔五个就有一个小时刻度,让它获取lang这个样式
        if(i%5==0){
            oLis[i].className="lang";
        }
//        整圆360度,每一个刻度是6度,让第i个li旋转6i度
        oLis[i].style.transform="rotateZ("+i*6+"deg)";
    }

    var timer = null;

    function run(){

        //每次执行前关闭并清除之前的定时器,节约性能
        clearTimeout(timer);
        timer = null;

        var nowDate=new Date;
        //但是如果当前时间是12点半,时针不应该是直直的指向12点,应该是在12和1之间,
        //所以就需要把当前多出的分钟数/60换算成小时数加起来,下面在计算角度的时候也就可以对应上了。
        //分针同样如此
        var s=nowDate.getSeconds();
        sec.style.transform="rotateZ("+(s*6+180)+"deg)";
        sec.style.webkitTransform="rotateZ("+(s*6+180)+"deg)";
        sec.style.oTransform="rotateZ("+(s*6+180)+"deg)";
        sec.style.msTransform="rotateZ("+(s*6+180)+"deg)";
        sec.style.mozTransform="rotateZ("+(s*6+180)+"deg)";
        //得到每一秒的旋转角度(每一秒是走6度)
        var m=nowDate.getMinutes()+s/60;
        min.style.transform="rotateZ("+(m*6+180)+"deg)";
        min.style.oTransform="rotateZ("+(m*6+180)+"deg)";
        min.style.webkitTransform="rotateZ("+(m*6+180)+"deg)";
        min.style.msTransform="rotateZ("+(m*6+180)+"deg)";
        min.style.mozTransform="rotateZ("+(m*6+180)+"deg)";
        //得到每一分钟走的角度 每一小时之间是30 / 一小时中间有5个格 =30/5=6度
        //每小时走360/12=30度
        var h=nowDate.getHours()+m/60;
        hour.style.transform="rotateZ("+(h*30+180)+"deg)";
        hour.style.oTransform="rotateZ("+(h*30+180)+"deg)";
        hour.style.msTransform="rotateZ("+(h*30+180)+"deg)";
        hour.style.mozTransform="rotateZ("+(h*30+180)+"deg)";
        hour.style.webkitTransform="rotateZ("+(h*30+180)+"deg)";
        //开启定时器,每一秒自动走
        var timer=window.setTimeout(run,1000);
    }
    //执行函数
    run();
</script>
</html>
时间: 2024-10-05 20:36:32

使用原生JS编写时钟的相关文章

原生JS编写图片切换效果和点击按钮的样式变化

这两天更进一步的了解了JS,老师让我们用原生的js编写图片切换和改变点击按钮样式,就是让我们学会怎么去把一个问题拆分,怎么将一个大问题拆分成许多的小问题,再用函数封装起来.比如一个点击按钮,让其点击时背景色发生改变,点击另一个时,上一个按钮要变回原来本有的颜色:这个问题用jquery,一行代码就搞定,但是用原生js就得分三个部分来考虑: 1.添加改变背景的样式. 2.怎么获取到除了当前点击的按钮以外其他的兄弟节点. 3.怎么去除按钮的样式属性. 也讲了事件委托,实现了可以删除新添加的元素的功能.

原生js之道——原生js编写类选择器

一.类选择器的概念 类选择器,就是通过class属性获取节点.比如一个html结构中,有三个p标签都具有class="red"的属性,那么类选择器返回的就是这三个p标签. 在jquery中,我们可以很方便的通过$(".red")这种方式按照类获取节点.但是在原生的javascript中,有getElementById(按照id属性获取元素).getElementsByTagName(按照标签名获取元素)等方法,但是并没有类选择器相关方法.因此,编写原生js实现类选择

常见6种原生js编写Tab切换(1)

第一种方法为 for循环套for循环,遍历 简单的布局: 三个切换按钮li,和三个div块. <ul> <li>111</li> <li>222</li> <li>333</li> </ul>  <div style=background:red;></div> <div style=background:blue;></div> <div style=ba

原生JS编写了个简易进度条,还请各位前辈指教~

刚开始学习JS不久,以及第一次来到博客园,第一次进行分享博文... 噢,不对,不能说是分享,而是学习请教,请前辈多多指教,各个方面都可以~ 感谢您的路过~ <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> .boxs{width:800px;marg

原生js编写设为首页兼容ie、火狐和谷歌

1 //设为首页 2 //<a href="javascript:void(0);" onclick="SetHome(this,window.location)">设为首页</a> 3 function SetHome(obj, url) { 4 try { 5 obj.style.behavior = 'url(#default#homepage)'; 6 obj.setHomePage(url); 7 } catch (e) { 8 i

原生js格式化json工具

json格式化小工具,原生js编写,直接上代码: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>原生js格式化json的方法</title> 6 <script> 7 //格式化代码函数,已经用原生方式写好了不需要改动,直接引用就好 8 var formatJson =

原生js实现的3个小特效(时钟、轮播图、选项卡)

时钟: <p id="timeTxt"></p>  //将获取到的时间显示在timeTxt这里面        <button onclick="startTime()">关闭</button>        <!--时钟-->        function startTime(){  //创建startTime()函数            var today=new Date();  //定义一个对象

canvas :原生javascript编写动态时钟

canvas :原生javascript编写动态时钟 此时针是以画布的中心为圆心: g.translate(width/2,width/2); 此函数是将画布的原点移到(width/2,width/2) 绘制表盘 function jiang(){ r = width/2 g.clearRect(0, 0, 600, 600); g.save(); g.translate(r, r); g.rotate(-Math.PI / 2); //分钟刻度线 for(var i = 0; i < 60;

Java学习总计(二十六)——JavaScript正则表达式,Js表单验证,原生js+css页面时钟

一.JavaScript正则表达式1.exec检索字符串中指定的值,返回找到的值,并确定其位置2.test检索字符串中指定的值,返回true或false3.正则表达式对象的创建:(1)方式一:Var rgex=new RegExp("[0-9]","模式");(2)方式二:简便写法,用双斜杠//把正则表达式的内容括起来例1(正则创建,使用test()方法): <!DOCTYPE html> <html> <head> <me