canvas抖音八卦时钟,轻喷

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>八卦时钟</title>
        <style>
            *{margin:0;padding:0}
            #canvas{background-color:#fff;display: block;}
        </style>
    </head>
    <body>
        <canvas id="canvas" ></canvas>
    </body>
    <script src="jquery-3.1.1.min.js"></script>
    <script>
        var number=["一","二","三","四","五","六","七","八","九","十","十一","十二","十三","十四","十五","十六","十七","十八","十九","二十","二十一","二十二","二十三","二十四","二十五","二十六","二十七","二十八","二十九","三十","三十一",
        "三十二","三十三","三十四","三十五","三十六","三十七","三十八","三十九","四十","四十一","四十二","四十三","四十四","四十五","四十六","四十七","四十八","四十九","五十","五十一","五十二","五十三","五十四","五十五","五十六","五十七","五十八","五十九","零"]
        
            var ri_zong,myDate,n,y,r,z,h,m,s,fun_mouth,fun_ri,fun_zhou,fun_shi,fun_fen,fun_miao
            function gettime(){
                myDate=new Date()
                n=myDate.getFullYear()
                y=myDate.getMonth()+1
                r=myDate.getDate()
                z=myDate.getDay()
                h=myDate.getHours()
                m=myDate.getMinutes()
                s=myDate.getSeconds()
                
                fun_mouth=-myDate.getMonth()
                fun_ri=-myDate.getDate()+1
                fun_zhou=-myDate.getDay()+1
                fun_shi=-myDate.getHours()+1
                fun_fen=-myDate.getMinutes()+1
                fun_miao=-myDate.getSeconds()+1
            }
            gettime()
        if(y==1||y==3||y==5||y==7||y==8||y==10||y==12){
                ri_zong=31
        }else if(y==2){
            if(n%4==0){
                ri_zong=29
            }else{
                ri_zong=28
            }
        }else{
                ri_zong=30
        }
        
        
        // 初始化
        const ctx=document.getElementById("canvas").getContext("2d");
        var scr_h=document.documentElement.clientHeight;
        var scr_w=document.documentElement.clientWidth;
        
        $("#canvas").attr("height",scr_h)
        $("#canvas").attr("width",scr_h)
        $("#canvas").css({"margin-left":(scr_w-scr_h)/2+"px"})
        
        ctx.translate(scr_h/2,scr_h/2)
        ctx.font="12px Arial";
        
        // 月
        
        function yue(n,x,z){
            if(n==0){
                ctx.font="normal small-caps bold 10px arial";
            }else{
                ctx.font="normal small-caps normal 10px arial ";
            }
            ctx.rotate(z*(360/12)*Math.PI/180);
            ctx.rotate(30*Math.PI/180);
            ctx.fillText("            "+x+"月",0,0);
            ctx.rotate(-z*(360/12)*Math.PI/180);
        }
        
        
        // 日
        function ri(n,x,z){
            if(n==0){
                ctx.font="normal small-caps bold 10px arial";
            }else{
                ctx.font="normal small-caps normal 10px arial ";
            }
            ctx.rotate(z*(360/ri_zong)*Math.PI/180);
            ctx.rotate((360/ri_zong)*Math.PI/180);
            ctx.fillText("                          "+x+"日",0,0);
            ctx.rotate(-z*(360/ri_zong)*Math.PI/180);
        }
        
        // 周
        function zhou(n,x,z){
            if(n==0){
                ctx.font="normal small-caps bold 10px arial";
            }else{
                ctx.font="normal small-caps normal 10px arial ";
            }
            if(x=="七"){
                x="日"
            }
            ctx.rotate(z*(360/7)*Math.PI/180);
            ctx.rotate((360/7)*Math.PI/180);
            ctx.fillText("                                           "+"周"+x,0,0);
            ctx.rotate(-z*(360/7)*Math.PI/180);
        }
        
        // 时
        function shi(n,x,z){
            if(n==0){
                ctx.font="normal small-caps bold 10px arial";
            }else{
                ctx.font="normal small-caps normal 10px arial ";
            }
            ctx.rotate(z*(360/24)*Math.PI/180);
            ctx.rotate((360/24)*Math.PI/180);
            ctx.fillText("                                                         "+x+"点",0,0);
            ctx.rotate(-z*(360/24)*Math.PI/180);
        }
        
        
        // 分
        function fen(n,x,z){
            if(n==0){
                ctx.font="normal small-caps bold 10px arial";
            }else{
                ctx.font="normal small-caps normal 10px arial ";
            }
            ctx.rotate(z*(360/60)*Math.PI/180);
            ctx.rotate((360/60)*Math.PI/180);
            ctx.fillText("                                                                        "+x+"分",0,0);
            ctx.rotate(-z*(360/60)*Math.PI/180);
        }
        
        // 秒
        function miao(n,x,z){
            if(n==0){
                // ctx.fillStyle="#fff"
                ctx.font="normal small-caps bold 10px arial";
            }else{
                // ctx.fillStyle="#000"
                ctx.font="normal small-caps normal 10px arial ";
            }
            ctx.rotate(z*(360/60)*Math.PI/180);
            ctx.rotate((360/60)*Math.PI/180);
            ctx.fillText("                                                                                          "+x+"秒",0,0);
            ctx.rotate(-z*(360/60)*Math.PI/180);
        }
        
        setInterval(function(){
            ctx.clearRect(-scr_h/2,-scr_h/2,scr_h,scr_h)
            gettime()
            
            for(let i=fun_mouth;i<12+fun_mouth;i++){
                yue(i*(-30),number[i-fun_mouth],fun_mouth-1)
            }
            console.log(ri_zong)
            for(let i=fun_ri;i<ri_zong+fun_ri;i++){
                ri(i*(-360/ri_zong),number[i-fun_ri],fun_ri-1)
            }
            for(let i=fun_zhou;i<7+fun_zhou;i++){
                zhou(i*(-360/7),number[i-fun_zhou],fun_zhou-1)
            }
            for(let i=fun_shi;i<24+fun_shi;i++){
                shi(i*(-360/24),number[i-fun_shi],fun_shi-1)
            }
            for(let i=fun_fen;i<60+fun_fen;i++){
                fen(i*(-360/60),number[i-fun_fen],fun_fen-1)
            }
            for(let i=fun_miao;i<60+fun_miao;i++){
                miao(i*(-360/60),number[i-fun_miao],fun_miao-1)
            }
        },1000)
        
        
        
    </script>
</html>

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: HTML制作罗盘时钟可以通过以下步骤实现: 1. 首先,在HTML文档中增加一个canvas标签,设定其宽度和高度。 2. 在JavaScript中编写函数来绘制罗盘外框和表盘刻度。罗盘外框可以使用arc()方法绘制,表盘刻度可以使用rotate()方法旋转canvas并使用线条或文字绘制。 3. 编写函数来计算罗盘指针的位置,可以使用Date对象获取当前时间,通过计算角度来确定指针位置。 4. 定时调用指针位置计算函数并清除canvas,重新绘制罗盘外框和表盘刻度,以及指针位置。 5. 可以添加CSS样式来美化罗盘时钟的外观,例如设置背景颜色、字体样式和字号等。 通过以上步骤,我们可以实现一个简单的罗盘时钟效果。随着对canvas和JavaScript的深入理解,还可以添加更多自定义功能,例如设置动态背景、添加闹钟功能等,以适应不同的需求。 ### 回答2: HTML制作罗盘时钟的主要思路是将罗盘时钟分为两个部分:一个是罗盘指针,另一个是时钟刻度。其中罗盘指针包括罗盘底盘和指针本身,时钟刻度则是在罗盘底盘外部绕行的刻度线。 首先,我们需要将罗盘时钟放置在一个html页面中的canvas元素上,这个canvas元素作为整个罗盘的基座,罗盘指针和时钟刻度都是在这个canvas元素上进行绘制的。 接着,我们需要用JavaScript代码来控制罗盘指针和时钟刻度的运动。具体地,我们可以定义一个函数用于获取当前时间,并将其转换为具体的度数。这个度数可以用来控制罗盘指针和时钟刻度的旋转。 然后,我们可以使用canvas元素提供的API来绘制罗盘底盘、指针和刻度线。对于罗盘底盘和指针,我们可以分别使用canvas的圆形和路径绘制方法来实现。对于刻度线,我们可以使用canvas的线性绘制方法,通过旋转画布的方式让刻度线绕着罗盘底盘外部旋转。 最后,我们需要使用定时器来控制罗盘指针和时钟刻度的持续运动。在每个定时周期内,我们可以调用前面定义的时间获取函数,计算出新的罗盘指针和时钟刻度应该旋转的度数,并通过canvas的API来重新绘制罗盘时钟即可。 综上所述,通过HTML和JavaScript的结合,我们可以实现罗盘时钟的制作。这不仅可以作为一个有趣的网页小玩意儿来提升页面的趣味性,还可以为我们展示HTML和JavaScript的动态图像处理能力。 ### 回答3: 罗盘时钟是一款很有趣的应用,许多人都想学习如何制作它。HTML是一种非常适合制作网页的语言,它可以将网页中的内容和效果呈现得十分生动。下面我将详细介绍一下HTML制作罗盘时钟的步骤。 首先,我们需要新建一个HTML文件,并在文件中添加必要的HTML代码。接着,我们需要定义页面中的样式,包括字体、颜色、大小等等。然后,我们需要添加JS代码实现罗盘的效果。在JS中,我们需要计算罗盘指针的角度,以及每秒钟指针需要旋转的角度。 在计算角度时,我们需要使用Math库中的sin和cos函数,以及一个时间变量。通过不断更新时间变量,我们可以得到一个不断变化的角度值,并将其应用于罗盘指针。在每秒钟定时器中,我们需要更新罗盘指针的旋转角度,并将其应用于页面元素。 最后,为了让罗盘时钟更加生动,我们还可以添加动画效果和效。 总体来说,制作罗盘时钟需要掌握HTML、CSS和JavaScript的基础知识,需要花费一定的时间和精力。但是,一旦制作完成,可以得到一个非常有趣的网页应用,让人们可以在休闲时间里玩耍和娱乐。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值