首页 > 代码库 > Html5 舞动的雨伞

Html5 舞动的雨伞

HMTL5的学习断断续续,方法不用又生疏了,昨天做的一个雨伞的Demo,先看看效果

技术分享

主要是运用了中心点变换和旋转两个方法。不同的动画用定时器控制,

 

下面是全部代码:

  <canvas id="myCanve" width="1200" height="600"></canvas>    <div  id="ta"></div>    <script>        var ctx;        var everything = [];        var cwidth = 1200;        var cheight = 600;        var updowntime = 0;        var rotatetime = 0;        var my = 2;        var updown;        var rotateangle = 0;        function Umbrellas(sx, sy, fillStyle) {            this.x = sx;            this.y = sy;            this.fillStyle = fillStyle;            this.draw = drawUmbrella;            this.moveit = moveumbrella;        }        function drawUmbrella() {            //先画半圆            ctx.fillStyle = this.fillStyle;            ctx.beginPath();            ctx.arc(this.x, this.y, 30, 0, Math.PI, true);            ctx.closePath();            ctx.fill();            // ctx.save();            ctx.fillStyle = "blue";            ctx.fillRect(this.x - 1.5, this.y, 1.5, 40);//画伞柄 是一个细长的矩形            ctx.beginPath();            ctx.strokeStyle = "blue";            ctx.arc(this.x - 5, this.y + 40, 4, Math.PI, Math.PI * 2, true);//伞的钩子 是一个半圆            ctx.stroke();            ctx.closePath();        }        function moveumbrella(dx, dy) {            this.x += dx;            this.y += dy;        }        function init() {            ctx = document.getElementById("myCanve").getContext(2d);            ctx.translate(200, 300);            for (var i = 0; i < 10; i++) {                var um = new Umbrellas(i * 70, 0, "rgb(" + (30 * i) + "," + (255 - 30 * i) + ",255)");                everything.push(um);            }            updown = setInterval(change, 100);             setTimeout(function () {                 clearInterval(updown);                 ctx.translate(300,0);//改变中心点                 setInterval(rotat, 100);            }, 10000);         }        //updown          function change() {            if (updowntime % 50 == 0) {                my = -my;            }            // 清屏要关注到原中心点            clear(-200,-300);            updowntime++;                   for (var i = 0; i < everything.length; i++) {                if (i % 2 == 0) {                    everything[i].moveit(0, my);                } else {                    everything[i].moveit(0, -my);                }                everything[i].draw();            }            $("#ta").html("坐标y:" + everything[0].y + "______updowntime:" + updowntime);            //放在这才有效 在执行方法里面停止            if (updowntime == 100) {                clearInterval(updown);                //过渡方法            }        }        //选择        function rotat() {            clear(-400, -300);            rotatetime++;            for (var i = 0; i < everything.length; i++) {                ctx.save();                ctx.rotate(Math.PI * (2 / 4 + i / 4));                ctx.translate(0, rotateangle);                // 统一坐标                everything[i].x = 0;                everything[i].y = 0;                everything[i].draw();                ctx.restore();            }            rotateangle++;            $("#ta").html("角度:" + rotateangle + "   rotatetime:" + rotatetime);            if (rotateangle == 70) {                rotateangle = -rotateangle;            }        }        function clear(x,y) {            ctx.clearRect(x, y, 1200, 600);        }        window.onload = function () {            init();        }    </script>

自己觉得蛮有意思,这些小而美的东西是不是给你有所启发呢。

如果不是建立对象,则画出来的雨伞不容易控制。下面的代码就是静态的雨伞

技术分享
  function drawTop(ctx,fillStyle) {                ctx.fillStyle = fillStyle;                ctx.beginPath();                ctx.arc(0, 0, 30, 0, Math.PI, true);                ctx.closePath();                ctx.fill();            }            function drawGrip(ctx) {                ctx.save();                ctx.fillStyle = "blue";                ctx.fillRect(-1.5, 0, 1.5, 40);                ctx.beginPath();                ctx.strokeStyle = "blue";                ctx.arc(-5, 40, 4, Math.PI, Math.PI * 2, true);                ctx.stroke();                ctx.closePath();                ctx.restore();            }            function draw() {                var ctx = document.getElementById("myCanve").getContext("2d");                ctx.translate(150, 150);                for (var i = 0; i < 10; i++) {                    ctx.save();                    ctx.rotate(Math.PI * (2 / 4 + i / 4));                      ctx.translate(0, -100);                    //ctx.translate(70 * i, 0);                    drawTop(ctx, "rgb(" + (30 * i) + "," + (255 - 30 * i) + ",255)");                    drawGrip(ctx);                    ctx.restore();                }            }            window.onload=function() {                draw();            }
View Code

 

Html5 舞动的雨伞