天天看點

HTML5Canvas 酷炫效果

以下是利用JavaScript調用HTML5Canvas畫布所做的效果

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>canvas</title>
    <style>body{text-align: center;background:ddd;overflow: hidden;background: #blue;}#canvas{display: inline-block;}</style>
</head>
<body>
    <canvas id="canvas"></canvas>
    <script>
        //定義畫布寬高和生成點的個數
        var WIDTH = window.innerWidth, HEIGHT = window.innerHeight, POINT = ;

        var canvas = document.getElementById('canvas');
        canvas.width = WIDTH,
        canvas.height = HEIGHT;
        var context = canvas.getContext('2d');
        context.strokeStyle = 'rgba(0,0,0,0.02)',
        context.strokeWidth = ,
        context.fillStyle = 'rgba(255,255,0,0.5)';
        var circleArr = [];

        //線條:開始xy坐标,結束xy坐标,線條透明度
        function Line (x, y, _x, _y, o) {
            this.beginX = x,
            this.beginY = y,
            this.closeX = _x,
            this.closeY = _y,
            this.o = o;
        }
        //點:圓心xy坐标,半徑,每幀移動xy的距離
        function Circle (x, y, r, moveX, moveY) {
            this.x = x,
            this.y = y,
            this.r = r,
            this.moveX = moveX,
            this.moveY = moveY;
        }
        //生成max和min之間的随機數
        function num (max, _min) {
            var min = arguments[] || ;
            return Math.floor(Math.random()*(max-min+)+min);
        }
        // 繪制原點
        function drawCricle (cxt, x, y, r, moveX, moveY) {
            var circle = new Circle(x, y, r, moveX, moveY)
            cxt.beginPath()
            cxt.arc(circle.x, circle.y, circle.r, , *Math.PI)
            cxt.closePath()
            cxt.fill();
            return circle;
        }
        //繪制線條
        function drawLine (cxt, x, y, _x, _y, o) {
            var line = new Line(x, y, _x, _y, o)
            cxt.beginPath()
            cxt.strokeStyle = 'rgba(0,0,0,'+ o +')'
            cxt.moveTo(line.beginX, line.beginY)
            cxt.lineTo(line.closeX, line.closeY)
            cxt.closePath()
            cxt.stroke();

        }
        //初始化生成原點
        function init () {
            circleArr = [];
            for (var i = ; i < POINT; i++) {
                circleArr.push(drawCricle(context, num(WIDTH), num(HEIGHT), num(, ), num(, -)/, num(, -)/));
            }
            draw();
        }

        //每幀繪制
        function draw () {
            context.clearRect(,,canvas.width, canvas.height);
            for (var i = ; i < POINT; i++) {
                drawCricle(context, circleArr[i].x, circleArr[i].y, circleArr[i].r);
            }
            for (var i = ; i < POINT; i++) {
                for (var j = ; j < POINT; j++) {
                    if (i + j < POINT) {
                        var A = Math.abs(circleArr[i+j].x - circleArr[i].x),
                            B = Math.abs(circleArr[i+j].y - circleArr[i].y);
                        var lineLength = Math.sqrt(A*A + B*B);
                        var C = /lineLength*-;
                        var lineOpacity = C >  ?  : C;
                        if (lineOpacity > ) {
                            drawLine(context, circleArr[i].x, circleArr[i].y, circleArr[i+j].x, circleArr[i+j].y, lineOpacity);
                        }
                    }
                }
            }
        }

        //調用執行
        window.onload = function () {
            init();
            setInterval(function () {
                for (var i = ; i < POINT; i++) {
                    var cir = circleArr[i];
                    cir.x += cir.moveX;
                    cir.y += cir.moveY;
                    if (cir.x > WIDTH) cir.x = ;
                    else if (cir.x < ) cir.x = WIDTH;
                    if (cir.y > HEIGHT) cir.y = ;
                    else if (cir.y < ) cir.y = HEIGHT;

                }
                draw();
            }, );
        }

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

效果如下:

HTML5Canvas 酷炫效果

繼續閱讀