javascript 通过面向对象编写圆形数字时钟

本文介绍了一个使用CSS和JavaScript实现的动态时钟指针效果。通过transform属性实现了时钟指针随时间变化而旋转的效果,并讨论了在实现过程中遇到的问题及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果如图所示,代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <style>
        .hour{height: 200px;width: 200px;position: relative;top:100px;left: 100px;border-radius: 50%;
            border: 3px solid #666666;display: inline-block}
        .minute{height: 200px;width: 200px;position: relative;top:100px;left: 100px;border-radius: 50%;
            border: 3px solid #666666;display: inline-block}
        .second{height: 200px;width: 200px;position: relative;top:100px;left: 100px;border-radius: 50%;
            border: 3px solid #666666;display: inline-block}
        .innerLeft{height: 178px;width: 89px;position: absolute;top: 1px;left: 1px;border-radius: 178px 0 0 178px
                ;border-bottom: 10px solid #009bff;border-top: 10px solid #009bff;border-left: 10px solid #009bff;background: white
                ;transform-origin: 100% 50%;}
        .innerRight{height: 178px;width: 89px;position: absolute;top: 1px;right: 1px;border-radius:0 178px  178px 0
            ;border-bottom: 10px solid #009bff;border-top: 10px solid #009bff;border-right: 10px solid #009bff;background: white;transform-origin: 0 50%;
            transform: rotate(-180deg) ;}
        .cover{position: absolute;height: 200px;width: 100px;border-radius: 198px 0 0 198px;background: white;z-index: 1}
        input{position: absolute;top: 60px;left: 120px;}
        span{height: 20px;width: 80px;line-height: 20px;display: block;position: absolute;;top: 90px;
            z-index: 2; left: 60px;font-size: 16px;font-weight: bold;text-align: center}
    </style>
</head>
<body>
    <div class="hour">
        <div class="innerLeft"></div>
        <div class="cover"></div>
        <div class="innerRight"></div>
        <span></span>
    </div>
    <div class="minute">
        <div class="innerLeft"></div>
        <div class="cover"></div>
        <div class="innerRight"></div>
        <span></span>
    </div>
    <div class="second">
        <div class="innerLeft"></div>
        <div class="cover"></div>
        <div class="innerRight"></div>
        <span></span>
    </div>

    <script>
        window.onload=function(){
            function roll(progress,n) {
                innerLeft = document.querySelector('.'+this.className + ' .innerLeft');
                innerRight = document.querySelector('.'+this.className +  ' .innerRight');
                span = document.querySelector('.'+this.className + ' span');
                cover = document.querySelector('.'+this.className + ' .cover');
                span.innerHTML = progress+''+this.className;

                if (progress*n < 180) {
                    console.log(this.className);
                    cover.style.display = 'block';

                    innerLeft.style.transform = 'rotate(' + (progress*n) + "deg)";
                    innerRight.style.transform = 'rotate(' + (progress*n - 180) + 'deg)';
                }
                else{
                    console.log(this.className);
                    cover.style.display = 'none';

                    innerLeft.style.transform = 'rotate(' + (progress*n) + "deg)";
                    innerRight.style.transform = 'rotate(0deg)';
                }
            }
            var T=setInterval(function(){
                var time=new Date();
                var hours=time.getHours();
                var minutes=time.getMinutes();
                var seconds=time.getSeconds();
                var hour=document.querySelector('.hour');
                var minute=document.querySelector('.minute');
                var second=document.querySelector('.second');


                roll.call(hour,hours,30);
                roll.call(minute,minutes,6);
                roll.call(second,seconds,6);
            },1000);

        }
    </script>
</body>
</html>

在编程过程中向使用tansform 来实现动态效果,但是会出现归零时逆向,最后就没有使用,接下来还是去探索一下吧。

转载于:https://www.cnblogs.com/xueandsi/p/5968908.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值