canvas画布修改时钟:实现给定输入,跳转到指定时刻

本篇博客是在参考博客:https://blog.csdn.net/u012468376/article/details/73350998时钟案例源代码的基础上进行修改的。

目的想实现的功能是:实现给定输入,跳转到指定时刻。(只是跳转到指定时刻,不会自动以这个时刻为起始点进行像钟表一样自己旋转)

还面临的问题:

1、当按钮按下实现第一次跳转后,再输入不同的值,钟表指针直接跳转,不再受按钮的控制!

2、输入范围没有设置范围限制,只是提醒在哪个范围内进行输入!

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Canvas</title>
    <style>
        canvas {
            display:block;
            margin: 200px auto;
        }
        
        input{
            position:fixed;
            top:1cm;
            left:1cm;
        }
        
        
        p.hour{
            position:fixed;
            top:0.5cm;
            left:1cm;
        }
        input.hour{
            position:fixed;
            top:1cm;
            left:4cm;
        }
        p.minute{
            position:fixed;
            top:1.5cm;
            left:1cm;
        }
        input.minute{
            position:fixed;
            top:2cm;
            left:4cm;
        }
        p.second{
            position:fixed;
            top:2.5cm;
            left:1cm;
        }
        input.second{
            position:fixed;
            top:3cm;
            left:4cm;
        }
        input.but1{
            position:fixed;
            top:4cm;
            left:1cm;
        }
        button.but2{
            position:fixed;
            top:4cm;
            left:4cm;
        }
        p.xianshi{
            position:fixed;
            top:5cm;
            left:1cm;
        }    
    </style>
    </head>

<body>
<canvas id="solar" weight="300" height="300" ></canvas>
<p class="hour">时(0-11):</p>
<input type="number" id="myDate1" value="00" class="hour">
<p class="minute">分(0-59):</p>
<input type="number" id="myDate2" value="00" class="minute">
<p class="second">秒(0-59):</p>
<input type="number" id="myDate3" value="00" class="second">

<input type = "submit" class="but1" onclick="myFunction(this)" value="试一下"></input>

<button class="but2" onclick="back(this)">返回</button>

<p class="xianshi" id="demo"></p>

<script>
    //尝试用一下表单
    /*
    <form action="myfunction()">
    时(0-11):<input type="text" class="hour"   name="hour" value="00"><br>
    分(0-59):<input type="text" class="minute" name="minute" value="00"><br>
    秒(0-59):<input type="text" class="second" name="second" value="00"><br>
    <input type="submit" value="提交">
    <input type = "reset" value="重置输入" ></input>
    </form>
    */
    var flag = false;
    function myFunction(obj) {
        let h = document.getElementById("myDate1").value;
        let m = document.getElementById("myDate2").value;
        let s = document.getElementById("myDate3").value;
        document.getElementById("demo").innerHTML = h+'时'+m+'分'+s+'秒';
        window.flag = true;
        //document.getElementById("demo").innerHTML = h+'&nbsp;&nbsp;'+m+'&nbsp;&nbsp;'+s;
        
    }
    function back(obj){
        window.flag = false;
    }
    
    init();
    function init(){
        let canvas = document.querySelector("#solar");
        let ctx = canvas.getContext("2d");
        draw(ctx);
    }
    
    function draw(ctx){
        requestAnimationFrame(function step(){
            drawDial(ctx);//绘制表盘
            drawAllHands(ctx);//绘制指针(时针、分针、秒针)    
            requestAnimationFrame(step);
        });    
    }

    function drawAllHands(ctx){
        if(window.flag){
            
            var h = document.getElementById("myDate1").value;
            var m = document.getElementById("myDate2").value;
            var s = document.getElementById("myDate3").value; 
        }
        else{
            var time = new Date();
        
            var s = time.getSeconds();
            var m = time.getMinutes();
            var h = time.getHours();
            
        }
        
        /*let time = new Date();
        
        let s = time.getSeconds();
        let m = time.getMinutes();
        let h = time.getHours();*/
        
        let pi = Math.PI;
        let secondAngle = pi / 180 * 6 * s;
        let minuteAngle = pi / 180 * 6 * m + secondAngle / 60;
        let hourAngle = pi / 180 * 30 * h + minuteAngle / 12;
        
        drawHand(hourAngle, 60, 6, "red", ctx);
        drawHand(minuteAngle, 106, 4, "green", ctx);
        drawHand(secondAngle, 129, 2, "blue", ctx);
        
    }
    
    function drawHand(angle, len, width, color,ctx){
        ctx.save();
        ctx.translate(150,150);
        ctx.rotate(-Math.PI / 2 + angle);
        ctx.beginPath();
        ctx.moveTo(-4,0);
        ctx.lineTo(len,0);
        ctx.lineWidth = width;
        ctx.strokeStyle = color;
        ctx.lineCap = "round";//线条末端以圆形结束
        ctx.stroke();
        ctx.closePath();
        ctx.restore();
        }
 
    function drawDial(ctx){
        let pi = Math.PI;
        
        ctx.clearRect(0,0,300,300);
        ctx.save();
        
        ctx.translate(150,150); //用来移动 canvas 的原点到指定的位置
        ctx.beginPath();
        ctx.arc(0,0,148,0,2*pi); //画圆弧或圆
        ctx.stroke();            
        ctx.closePath();
        
        for(let i = 0; i < 60; i++){
            ctx.save();
            ctx.rotate( -pi / 2 + i * pi / 30);//旋转坐标轴:这个方法只接受一个参数:旋转的角度(angle),它是顺时针方向的,以弧度为单位的值。旋转的中心是坐标原点。
            ctx.beginPath();
            ctx.moveTo(100,0);
            ctx.lineTo(140,0);
            ctx.lineWidth = i % 5 ? 2 :4;
            ctx.strokeStyle= i % 5 ? "blue" : "red";
            ctx.stroke();
            ctx.closePath();
            ctx.restore();
        }
        ctx.restore();
    }
</script>
</body>
</html>

参考博客:https://blog.csdn.net/u012468376/article/details/73350998

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值