昔有石碣村七星聚义,今有Canvas八星聚义。动态效果是,八颗星以等速螺线慢慢向中心聚集,最后汇聚成一颗。

效果:

代码:

<!DOCTYPE html>
<html lang="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<head>
     <title>八星聚义</title>
    </head>

     <body onload="draw()">
        <canvas id="myCanvus" width="400px" height="400px" style="border:1px dashed black;">
            出现文字表示你的浏览器不支持HTML5
        </canvas>
     </body>
</html>
<script type="text/javascript">
<!--
function draw(){
        var canvas=document.getElementById('myCanvus');
        canvas.height=;
        canvas.width=;
        var context=canvas.getContext('2d');

        context.translate(,);// 原点移到中央

        ){
            setInterval(function(){ run(context); }, );
        }
};

;// 角度
;// 与圆心的举例

function run(context){
        context.clearRect(-,-,,);// 清除图案

        context.strokeStyle = "black";

        // 横轴
        context.beginPath();
        context.moveTo(-, );
        context.lineTo(,);
        context.stroke();
        context.closePath();

       // 纵轴
        context.beginPath();
        context.moveTo(, );
        context.lineTo(,-);
        context.stroke();
        context.closePath();

        // 大圈
        context.strokeStyle='black';
        context.beginPath();
        context.arc(,,,,*Math.PI,false);
        context.closePath();
        context.stroke();

        // 小圈
        context.strokeStyle='black';
        context.beginPath();
        context.arc(,,,,*Math.PI,false);
        context.closePath();
        context.stroke();

        ){
            delta+=;// 角度每次加十
            distance-=0.4;// 举例每次减去十

            ;i<;i++){
                context.save();

                context.rotate(getRad(i*));
                context.translate(distance*Math.sin(getRad(delta)),distance*Math.cos(getRad(delta)));

                context.save();
                context.rotate(getRad(-i*));
                drawFiveStar(context,,,,getColor(i));
                context.restore();

                context.restore();
            }

        }else{
            distance=;
            delta=;

            context.save();
            context.translate(distance*Math.sin(getRad(delta)),distance*Math.cos(getRad(delta)));

            drawFiveStar(context,,,,'black');

            context.restore();
        }
}

// 角度得到弧度
function getRad(degree){
        *Math.PI;
}

// 得到颜色
function getColor(index){
    ){
        return "red";
    }){
        return "navy";
    }){
        return "green";
    }){
        return "yellow";
    }){
        return "pink";
    }){
        return "orange";
    }){
        return "olive";
    }){
        return "rose";
    }
}

// 绘制五角星,多角星都可以由这个方法变化而来
function drawFiveStar(context,x,y,r,color){
    context.strokeStyle = color;
    context.fillStyle = color;

    context.translate(x,y);

    ;i<;i++){
        context.save();
        context.rotate(getRad(/*i));

        context.beginPath();
        context.moveTo(, -r);
        context.lineTo(-Math.tan(getRad())*r, );
        context.lineTo(Math.tan(getRad())*r,);
        context.lineTo(, -r);
        context.fill();
        context.stroke();
        context.closePath();
        context.restore();
    }
}

//-->
</script>

HTML5 Canvas 八星聚义动态效果的更多相关文章

  1. HTML5 Canvas 六角光阑动态效果

    光阑是光具组件中光学元件的边缘.框架或特别设置的带孔屏障,本人实现了结构比较简单的六角光阑,效果有点像宇航员在徐徐张开的飞船舷窗中看到逐渐完整的地球,下面四张图可以感受一下. 当然看动态效果才能真正体 ...

  2. HTML5 Canvas 绘制澳大利亚国旗

    代码: <!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Type ...

  3. HTML5 Canvas 绘制新西兰国旗

    代码: <!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Type ...

  4. HTML5 CANVAS 实现图片压缩和裁切

    原文地址:http://leonshi.com/2015/10/31/html5-canvas-image-compress-crop/?utm_source=tuicool&utm_medi ...

  5. HTML5 Canvas,WebGL,CSS Shaders,GLSL的暧昧关系

    一.前面的所以然 技术的发展日新月异,说不定回家钓几天鱼,就出来个新东西了.新事物新技术发展的初期,你无法预见其未来之趋势,生命诚可贵,没有必要花过多时间深入研究这些新东西,不过,知道了大概,了解个全 ...

  6. HTML5 Canvas,WebGL,CSS Shaders,GLSL的暧昧关系 【转】

    HTML5 Canvas,WebGL,CSS Shaders,GLSL的暧昧关系 这篇文章发布于 2011年10月10日,星期一,17:14,归类于 canvas相关. 阅读 58013 次, 今日 ...

  7. HTML5 Canvas 绘制英国国旗

    代码: <!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Type ...

  8. HTML5 程序设计 - 使用HTML5 Canvas API

    请你跟着本篇示例代码实现每个示例,30分钟后,你会高喊:“HTML5 Canvas?!在哥面前,那都不是事儿!” 呵呵.不要被滚动条吓到,很多都是代码和图片.我没有分开写,不过上面给大家提供了目录,方 ...

  9. 赠书:HTML5 Canvas 2d 编程必读的两本经典

    赠书:HTML5 Canvas 2d 编程必读的两本经典 这两年多一直在和HTML5 Canvas 打交道,也带领团队开发了世界首款基于HTML5 Canvas 的演示文档工具---AxeSlide( ...

随机推荐

  1. Linux常用命令与基本概念

    复制 文件的复制 cp 源文件 目标文件 文件夹的复制 cp -r 源文件夹 目标文件夹 删除 删除文件 rm 文件名 删除文件夹 rm -rf 文件夹 查看文件类型 file 文件名 压缩与解压 z ...

  2. PHP网站提交表单如何实现验证码验证功能

    很多小伙伴在原生网站时候都会遇到很多意料之外的情况发生,也有不少小伙伴在初学程序代码的时候可能会因为一个小小的逗号隐藏在几百行,几千行的代码中出错常见的在提交表单中很多事需要验证码验证,那么如何来实现 ...

  3. 树的合并 connect

    树的合并 connect 题目描述 话说moreD经过不懈努力,终于背完了循环整数,也终于完成了他的蛋糕大餐. 但是不幸的是,moreD得到了诅咒,受到诅咒的原因至今无人知晓. moreD在发觉自己得 ...

  4. iOS - 倒计时封装

    +(NSString *)countdownStartTime:(NSString *)startTime{ NSString *TIME = [startTime substringToIndex: ...

  5. 不用框架使用ajax 纯js使用ajax post,get范例及其区别

    原文发布时间为:2009-11-15 -- 来源于本人的百度文章 [由搬家工具导入] 不用框架使用ajax 纯js使用ajax post,get范例及其区别 ===================== ...

  6. AVRStudio 6 添加调试功能

    下载这个文件并安装就可以了:http://avr-jungo-usb.software.informer.com/download/ 具体可以看这个贴子:http://electronics.stac ...

  7. 2017-2018 ACM-ICPC, NEERC, Southern Subregional Contest I. Photo Processing

    题目链接 题意 将一个升序排好的数列切成若干段,要求每段的长度\(\gt k\),对每一段中最大值与最小值的差取个最大值,问这个最大值最小是多少. 思路 二分答案 怎么check呢? dp一下. d[ ...

  8. 【XPButton类】美化MFC button (转)

    从网上找到别人写的一个XPButton类,利用XPButton类实现XP风格的按钮.百度一下即可找到这个类,接下来具体的步骤如下: 1.创建基于对话框的MFC工程假设命名为:XPButtonTest, ...

  9. Linux signal 那些事儿 (3)【转】

    转自:http://blog.chinaunix.net/uid-24774106-id-4065797.html 这篇博客,想集中在signal 与线程的关系上,顺带介绍内核signal相关的结构. ...

  10. 802.11 MAC层

    1. 介绍 本文主要介绍了802.11 MAC层 2. 访问机制 CSMA/CA:  Carrier Sense Multiple Access with Collision Avoidance Wi ...