流星雨

这是我在一个网站上看到的一个html5的画布特效“流星雨”,不是我原创的。

//--

感想:如此酷毙的样式,我想分享给大家。你们值得拥有!!!

--//

主体部分:

<!DOCTYPE html >
<html lang="zh-CN">

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

        <title>流星雨</title>

        <meta http-equiv="content-language" content="zh-CN">
    </head>

    <body onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle=&#39;rgba(0,0,0,&#39;+opacity+&#39;)&#39;" onmouseup="context.fillStyle=&#39;rgb(0,0,0)&#39;">

        <canvas id="starfield" style="position: absolute; background-color: rgb(0, 0, 0);" width="1440" height="774"></canvas>

        <div id="adsense" style="position: absolute; display: block; left: 356px; top: 759px; width: 728px; height: 15px; background-color: transparent;">

        </div>

    </body>

</html>

 

 

样式部分:

 

<style type="text/css">
            body {
                margin: 0;
                padding: 0;
                background-color: #000000;
                font-size: 0;
                overflow: hidden
            }
            
            div {
                margin: 0;
                padding: 0;
                position: absolute;
                font-size: 0;
                overflow: hidden
            }
            
            canvas {
                background-color: #000000;
                overflow: hidden
            }
        </style>

 

js代码部分:

    <script type="text/javascript">
            function $i(id) {
                return document.getElementById(id);
            }

            function $r(parent, child) {
                (document.getElementById(parent)).removeChild(document.getElementById(child));
            }

            function $t(name) {
                return document.getElementsByTagName(name);
            }

            function $c(code) {
                return String.fromCharCode(code);
            }

            function $h(value) {
                return ('0' + Math.max(0, Math.min(255, Math.round(value))).toString(16)).slice(-2);
            }

            function _i(id, value) {
                $t('div')[id].innerHTML += value;
            }

            function _h(value) {
                return !hires ? value : Math.round(value / 2);
            }

            function get_screen_size()

            {

                var w = document.documentElement.clientWidth;

                var h = document.documentElement.clientHeight;

                return Array(w, h);

            }

            var url = document.location.href;

            var flag = true;

            var test = true;

            var n = parseInt((url.indexOf('n=') != -1) ? url.substring(url.indexOf('n=') + 2, ((url.substring(url.indexOf('n=') + 2, url.length)).indexOf('&') != -1) ? url.indexOf('n=') + 2 + (url.substring(url.indexOf('n=') + 2, url.length)).indexOf('&') : url.length) : 512);

            var w = 0;

            var h = 0;

            var x = 0;

            var y = 0;

            var z = 0;

            var star_color_ratio = 0;

            var star_x_save, star_y_save;

            var star_ratio = 256;

            var star_speed = 4;

            var star_speed_save = 0;

            var star = new Array(n);

            var color;

            var opacity = 0.1;

            var cursor_x = 0;

            var cursor_y = 0;

            var mouse_x = 0;

            var mouse_y = 0;

            var canvas_x = 0;

            var canvas_y = 0;

            var canvas_w = 0;

            var canvas_h = 0;

            var context;

            var key;

            var ctrl;

            var timeout;

            var fps = 0;

            function init()

            {

                var a = 0;

                for (var i = 0; i < n; i++)

                {

                    star[i] = new Array(5);

                    star[i][0] = Math.random() * w * 2 - x * 2;

                    star[i][1] = Math.random() * h * 2 - y * 2;

                    star[i][2] = Math.round(Math.random() * z);

                    star[i][3] = 0;

                    star[i][4] = 0;

                }

                var starfield = $i('starfield');

                starfield.style.position = 'absolute';

                starfield.width = w;

                starfield.height = h;

                context = starfield.getContext('2d');

                context.fillStyle = 'rgb(0,0,0)';

                context.strokeStyle = 'rgb(255,255,255)';

                var adsense = $i('adsense');

                adsense.style.left = Math.round((w - 728) / 2) + 'px';

                adsense.style.top = (h - 15) + 'px';

                adsense.style.width = 728 + 'px';

                adsense.style.height = 15 + 'px';

                adsense.style.display = 'block';

            }

            function anim()

            {

                mouse_x = cursor_x - x;

                mouse_y = cursor_y - y;

                context.fillRect(0, 0, w, h);

                for (var i = 0; i < n; i++)

                {

                    test = true;

                    star_x_save = star[i][3];

                    star_y_save = star[i][4];

                    star[i][0] += mouse_x >> 4;
                    if (star[i][0] > x << 1) {
                        star[i][0] -= w << 1;
                        test = false;
                    }
                    if (star[i][0] < -x << 1) {
                        star[i][0] += w << 1;
                        test = false;
                    }

                    star[i][1] += mouse_y >> 4;
                    if (star[i][1] > y << 1) {
                        star[i][1] -= h << 1;
                        test = false;
                    }
                    if (star[i][1] < -y << 1) {
                        star[i][1] += h << 1;
                        test = false;
                    }

                    star[i][2] -= star_speed;
                    if (star[i][2] > z) {
                        star[i][2] -= z;
                        test = false;
                    }
                    if (star[i][2] < 0) {
                        star[i][2] += z;
                        test = false;
                    }

                    star[i][3] = x + (star[i][0] / star[i][2]) * star_ratio;

                    star[i][4] = y + (star[i][1] / star[i][2]) * star_ratio;

                    if (star_x_save > 0 && star_x_save < w && star_y_save > 0 && star_y_save < h && test)

                    {

                        context.lineWidth = (1 - star_color_ratio * star[i][2]) * 2;

                        context.beginPath();

                        context.moveTo(star_x_save, star_y_save);

                        context.lineTo(star[i][3], star[i][4]);

                        context.stroke();

                        context.closePath();

                    }

                }

                timeout = setTimeout('anim()', fps);

            }

            function move(evt)

            {

                evt = evt || event;

                cursor_x = evt.pageX - canvas_x;

                cursor_y = evt.pageY - canvas_y;

            }

            function key_manager(evt)

            {

                evt = evt || event;

                key = evt.which || evt.keyCode;

                switch (key)

                {

                    case 27:

                        flag = flag ? false : true;

                        if (flag)

                        {

                            timeout = setTimeout('anim()', fps);

                        } else

                        {

                            clearTimeout(timeout);

                        }

                        break;

                    case 32:

                        star_speed_save = (star_speed != 0) ? star_speed : star_speed_save;

                        star_speed = (star_speed != 0) ? 0 : star_speed_save;

                        break;

                    case 13:

                        context.fillStyle = 'rgba(0,0,0,' + opacity + ')';

                        break;

                }

                top.status = 'key=' + ((key < 100) ? '0' : '') + ((key < 10) ? '0' : '') + key;

            }

            function release()

            {

                switch (key)

                {

                    case 13:

                        context.fillStyle = 'rgb(0,0,0)';

                        break;

                }

            }

            function mouse_wheel(evt)

            {

                evt = evt || event;

                var delta = 0;

                if (evt.wheelDelta)

                {

                    delta = evt.wheelDelta / 120;

                } else if (evt.detail)

                {

                    delta = -evt.detail / 3;

                }

                star_speed += (delta >= 0) ? -0.2 : 0.2;

                if (evt.preventDefault) evt.preventDefault();

            }

            function start()

            {

                resize();

                anim();

            }

            function resize()

            {

                w = parseInt((url.indexOf('w=') != -1) ? url.substring(url.indexOf('w=') + 2, ((url.substring(url.indexOf('w=') + 2, url.length)).indexOf('&') != -1) ? url.indexOf('w=') + 2 + (url.substring(url.indexOf('w=') + 2, url.length)).indexOf('&') : url.length) : get_screen_size()[0]);

                h = parseInt((url.indexOf('h=') != -1) ? url.substring(url.indexOf('h=') + 2, ((url.substring(url.indexOf('h=') + 2, url.length)).indexOf('&') != -1) ? url.indexOf('h=') + 2 + (url.substring(url.indexOf('h=') + 2, url.length)).indexOf('&') : url.length) : get_screen_size()[1]);

                x = Math.round(w / 2);

                y = Math.round(h / 2);

                z = (w + h) / 2;

                star_color_ratio = 1 / z;

                cursor_x = x;

                cursor_y = y;

                init();

            }

            document.onmousemove = move;

            document.onkeypress = key_manager;

            document.onkeyup = release;

            document.onmousewheel = mouse_wheel;
            if (window.addEventListener) window.addEventListener('DOMMouseScroll', mouse_wheel, false);
        </script>

 

posted @ 2016-06-27 14:57  时光之梦  阅读(60)  评论(0)    收藏  举报