html5 canvas动画之彩色画笔

liujieheng 2014-03-31

来源:flash,as,js兴趣爱好者html5 canvas动画之彩色画笔     html5 canvas动画之彩色画笔

<!--代码开始-->

 

 

    <!DOCTYPE html>

 

    <html xmlns="http://www.w3.org/1999/xhtml" lang="en">

 

    <head>

 

    <title>html5超炫动画</title>

 

    <script type="text/javascript">

 

     

 

    /*

 

    Breathing Galaxies (1020 bytes)

 

    --------------------------------

 

    window.onload=function(){C=Math.cos;S=Math.sin;U=0;w=window;j=document;d=j.getElementById("c");c=d.getContext("2d");W=d.width=w.innerWidth;H=d.height=w.innerHeight;c.fillRect(0,0,W,H);c.globalCompositeOperation="lighter";c.lineWidth=0.2;c.lineCap="miter";var e=0,h=0;d.onmousemove=function(k){if(window.T){if(D==9){D=Math.random()*15;f(1)}clearTimeout(T)}X=k.pageX;Y=k.pageY;a=0;b=0;A=X,B=Y;R=(k.pageX/W*999>>0)/999;r=(k.pageY/H*999>>0)/999;U=k.pageX/H*360>>0;D=9;g=360*Math.PI/180;T=setInterval(f=function(l){c.save();c.globalCompositeOperation="source-over";if(!l){c.fillStyle="rgba(0,0,0,0.01)";c.fillRect(0,0,W,H)}c.restore();i=25;while(i--){c.beginPath();if(D>450||e){if(!e){e=1}if(D<0.1){e=0}h-=g;D-=0.1}if(!e){h+=g;D+=0.1}q=(R/r-1)*h;x=(R-r)*C(h)+D*C(q)+(A+(X-A)*(i/25))+(r-R);y=(R-r)*S(h)-D*S(q)+(B+(Y-B)*(i/25));if(a){c.moveTo(a,b);c.lineTo(x,y)}c.strokeStyle="hsla("+(U%360)+",100%,50%,0.75)";c.stroke();a=x;b=y}U-=0.5;A=X;B=Y},16)};j.onkeydown=function(k){a=b=0;R+=0.05};d.onmousemove({pageX:300,pageY:290})};

 

     

 

    */

 

     

 

    window.onload = function () {

 

    C = Math.cos; // cache Math objects

 

    S = Math.sin;

 

    U = 0;

 

    w = window;

 

    j = document;

 

    d = j.getElementById("c");

 

    c = d.getContext("2d");

 

    W = d.width = w.innerWidth;

 

    H = d.height = w.innerHeight;

 

    c.fillRect(0, 0, W, H); // resize <canvas> and draw black rect (default)

 

    c.globalCompositeOperation = "lighter"; // switch to additive color application

 

    c.lineWidth = 0.2;

 

    c.lineCap = "round";

 

    var bool = 0, 

 

    t = 0; // theta

 

    d.onmousemove = function (e) {

 

    if(window.T) {

 

    if(D==9) { D=Math.random()*15; f(1); }

 

    clearTimeout(T);

 

    }

 

    X = e.pageX; // grab mouse pixel coords

 

    Y = e.pageY;

 

    a=0; // previous coord.x

 

    b=0; // previous coord.y 

 

    A = X, // original coord.x

 

    B = Y; // original coord.y

 

    R=(e.pageX/W * 999>>0)/999;

 

    r=(e.pageY/H * 999>>0)/999;

 

    U=e.pageX/H * 360 >>0;

 

    D=9;

 

    g = 360 * Math.PI / 180;

 

    T = setInterval(f = function (e) { // start looping spectrum

 

    c.save();

 

    c.globalCompositeOperation = "source-over"; // switch to additive color application

 

    if(e!=1) {

 

    c.fillStyle = "rgba(0,0,0,0.02)";

 

    c.fillRect(0, 0, W, H); // resize <canvas> and draw black rect (default)

 

    }

 

    c.restore();

 

    i = 25; while(i --) {

 

    c.beginPath();

 

    if(D > 450 || bool) { // decrease diameter

 

    if(!bool) { // has hit maximum

 

    bool = 1;

 

    }

 

    if(D < 0.1) { // has hit minimum

 

    bool = 0;

 

    }

 

    t -= g; // decrease theta

 

    D -= 0.1; // decrease size

 

    }

 

    if(!bool) {

 

    t += g; // increase theta

 

    D += 0.1; // increase size

 

    }

 

    q = (R / r - 1) * t; // create hypotrochoid from current mouse position, and setup variables (see: http://en.wikipedia.org/wiki/Hypotrochoid)

 

    x = (R - r) * C(t) + D * C(q) + (A + (X - A) * (i / 25)) + (r - R); // center on xy coords

 

    y = (R - r) * S(t) - D * S(q) + (B + (Y - B) * (i / 25));

 

    if (a) { // draw once two points are set

 

    c.moveTo(a, b);

 

    c.lineTo(x, y)

 

    }

 

    c.strokeStyle = "hsla(" + (U % 360) + ",100%,50%,0.75)"; // draw rainbow hypotrochoid

 

    c.stroke();

 

    a = x; // set previous coord.x

 

    b = y; // set previous coord.y

 

    }

 

    U -= 0.5; // increment hue

 

    A = X; // set original coord.x

 

    B = Y; // set original coord.y

 

    }, 16);

 

    }

 

    j.onkeydown = function(e) { a=b=0; R += 0.05 }

 

    d.onmousemove({pageX:300, pageY:290})

 

    }

 

     

 

    </script>

 

    <style>

 

    body { margin: 0; overflow: hidden; }

 

    div { padding: 1px 5px; background: #333; position: absolute; z-index: 2; color: #555; font-family: arial; }

 

    a { color: #ccf }

 

    a:hover { color: #ff0000 }

 

    </style>

 

    <script type="text/javascript">

 

     

 

    var _gaq = _gaq || [];

 

    _gaq.push(['_setAccount', 'UA-400768-7']);

 

    _gaq.push(['_trackPageview']);

 

     

 

    (function() {

 

    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;

 

    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';

 

    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);

 

    })();

 

     

 

    </script>

 

    </head>

 

    <body>

 

    <div><a href="http://mudcu.be/">mudcu.be</a> &rsaquo; <a href="http://mudcu.be/journal/">journal</a> &rsaquo; <a href="http://mudcube7.blogspot.com/2010/08/what-can-1kb-of-javascript-do.html">JS1k: What can 1kb of Javascript do?</a></div>

 

    <div id="text"></div>

 

    <canvas id="c"></canvas>

 

    </body>

 

    </html>

Global site tag (gtag.js) - Google Analytics