分形时钟运动轨迹效果

代码语言:html

所属分类:视觉差异

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en">
<head>
   
<meta charset="UTF-8">

   
<script>
        window
.requestAnimFrame = (function() {
           
return (
                window
.requestAnimationFrame ||
                window
.webkitRequestAnimationFrame ||
                window
.mozRequestAnimationFrame ||
                window
.oRequestAnimationFrame ||
                window
.msRequestAnimationFrame ||
               
function(callback) {
                    window
.setTimeout(callback);
               
}
           
);
       
});

       
function init(elemid) {
            let canvas
= document.getElementById(elemid),
            c
= canvas.getContext("2d"),
            w
= (canvas.width = window.innerWidth),
            h
= (canvas.height = window.innerHeight);
            c
.fillStyle = "rgba(30,30,30,1)";
            c
.fillRect(0, 0, w, h);
           
return {
                c
: c,
                canvas
: canvas
           
};
       
}
   
</script>
   
<style>
        body
,
        html
{
           
margin: 0px;
           
padding: 0px;
           
position: fixed;
           
background: rgb(30,30,30);
       
}

        canvas
{}
   
</style>

</head>
<body translate="no">
   
<canvas id="canvas"></canvas>

   
<script>
        window.onload = function () {
            let c = init("canvas").c,
            canvas = init("canvas").canvas,
            w = canvas.width = window.innerWidth,
            h = canvas.height = window.innerHeight,
            mouse = {
                x: w / 2,
                y: h / 2
            },
            last_mouse = {};

            //initiation
            let date = new Date(),
            H = date.getHours() % 12,
            M = date.getMinutes(),
            s = date.getSeconds(),
            m = date.getMilliseconds() / 1000,
            htime = s + M * 60 + H * 60 * 60 + m,
            mtime = s + M * 60 + m,
            stime = s + m,
            mstime = m,
            hang = 2 * Math.PI / (12 * 60 * 60 / htime),
            mang = 2 * Math.PI / (60 * 60 / mtime),
            sang = 2 * Math.PI / (60 / stime),
            msang = 2 * Math.PI / (1 / mstime),
            tstring = "" + H + ":" + M + ":" + s,
            ch = 0,
            cM = 90,
            cs = 180,
            cms = 270,
            harr = [],
            sc = 10,
            maxit = 6,
            gr = 2 / (1 + Math.sqrt(5));

            function showdate(x, y, l, b, a, it, color, al) {

                c.globalAlpha = al;
                c.beginPath();
                c.arc(x + l * Math.cos(a), y + l * Math.sin(a), b, 0, 2 * Math.PI);
                c.fillStyle = color;
                c.fill();

                c.beginPath();
                c.lineTo(x, y);
                c.lineTo(x + l * Math.cos(a), y + l * Math.sin(a));
                c.strokeStyle = color;
                c.lineWidth = gr * b;
                c.stroke();
                c.lineCap = "round";
                c.globalAlpha = 1;
                if (it < maxit) {
                    showdate(x + l * Math.cos(a), y + l * Math.sin(a), gr * l, gr * b, a + hang, it + 1, "hsla(" + ch + ",100%,50%," + (1 - it * 1 / maxit) + ")", al);
                    showdate(x + l * Math.cos(a), y + l * Math.sin(a), gr * l, gr * b, a + mang, it + 1, "hsla(" + cM + ".........完整代码请登录后点击上方下载按钮下载查看

网友评论0