可直接复制粘贴运行

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>canvas</title>
</head>
<body>
    <canvas width="1000" height="1000" id="mycvs">当前浏览器不支持此控件,请更换或更新浏览器</canvas>
    <script type="text/javascript">
        var a = document.getElementById("mycvs");
        var can = a.getContext("2d");
        var beginx = -(1 / 2 * Math.PI);//起始值
        var r = 150;
        var sidex = 1 * (Math.PI / 180);//增加值
        var endx = beginx + 2 * Math.PI;//结束值
        var bendx = beginx + 2 * Math.PI;
        var aendx = beginx + Math.PI;
        var tmx = beginx;//当前值
        var t = 0;
        var rends = function () {
            if (tmx + sidex >= endx) {
                tmx = beginx;
                t = t + 1;
                endx = endx - Math.PI;
                if (t == 2) {//填充颜色并退出
                    can.save();    
                    arcs(300, 300, r, beginx, aendx, true, "black");
                    arcs(300, 225, 75, beginx, aendx,null,"black");
                    arcs(300, 375, 75, beginx, aendx, true,"white");
                    arcs(300, 375, 20, beginx, bendx, null, "black");
                    arcs(300, 225, 20, beginx, bendx, null, "white");
                    return;
                }
            } else {
                tmx += sidex;
            }
            can.clearRect(0, 0, 1000, 1000);//用clearRect()函数使图像更加清晰 也造成一笔结束后上一笔清除了
            can.lineWidth = 5;
            if (t == 0)
            {           
            can.beginPath();
            can.arc(300, 300, r, beginx, tmx);           
            can.stroke();
            } else if (t == 1) {               
                can.beginPath();
                can.arc(300, 300, r, beginx, bendx);//所以在这里我又重新画了一遍外圆
        
                can.arc(300, 225, 75, beginx, tmx);
                can.arc(300, 375, 75, beginx, tmx, true);                         
                can.stroke();             
            }
            requestAnimationFrame(rends);//这个是动画控制
               
        };

function arcs(x,y,r,begin,end,f,color) {//圆心(x,y),半径r,起始值begin,结束值end,方向f,填充颜色color
            can.beginPath();
            can.fillStyle = color;
            can.arc(x, y, r, begin, end,f);
            can.fill();
            can.stroke();
        }
        rends();

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

这个代码有点冗余,初学者请多多指教谢谢。

canvas初学 半动态画太极图的更多相关文章

  1. canvas游戏小试:画一个按方向键移动的圆点

    canvas游戏小试:画一个按方向键移动的圆点   自己对canvas,但又有一颗做游戏的心TT.然后记录一下对canvas的学习吧,用一个按方向键控制的小圆点来做练习.(编程时用了一些es6的语法) ...

  2. Vue+WebSocket+ES6+Canvas 制作「你画我猜」小游戏

    Vue+WebSocket+ES6+Canvas 制作「你画我猜」小游戏 转载 来源:jrainlau 链接:https://segmentfault.com/a/1190000005804860 项 ...

  3. OpenGL进阶演示样例1——动态画线(虚线、实线、颜色、速度等)

            用OpenGL动态绘制线段.事实上非常easy,但到如今为止.网上可參考资料并不多. 于是亲自己主动手写一个函数,方便动态绘制线段.代码例如以下: #include<GL/glu ...

  4. ARCGIS动态画点

    小马哥淡定 原文 ARCGIS动态画点 private void DrawPointOnMap(double x, double y,bool clear) { IMapControl2 pMapCt ...

  5. linux C 内存管理方式之半动态

    看到半动态申请内存,第一反应这是什么鬼? 实际上半动态内存申请很容易理解,在GNU C中使用alloca函数来实现 #include <stdlib.h> void *alloca (si ...

  6. canvas 动态画线

    <!--实现鼠标按下的时候,移动进行绘制,鼠标抬起结束绘图,用到的事件有mousedown mousemove mouseup用的的canvas api 有 beginPath moveTo l ...

  7. 第五讲:使用html5中的canvas动态画出物理学上平抛运动

    <html> <head> <title>平抛运动</title> <script src="../js/jscex.jscexRequ ...

  8. html5使用canvas动态画医学设备毫秒级数据波形图

  9. Android -- 自定义View小Demo,动态画圆(一)

    1,转载:(http://blog.csdn.NET/lmj623565791/article/details/24500107),现在如下图的效果: 由上面的效果图可以看到其实是一个在一个圆上换不同 ...

随机推荐

  1. redis入门(02)redis的常见问题

    一.常见问题 1.安装遇到/bin/sh: cc: command not found 解决办法:安装gcc yum install gcc 2.后台启动server端 2.1.问题现象 2.2.解决 ...

  2. 阿里云API网关(7)开发指南-API参考

    网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...

  3. linux centos6.8 下安装mysql 步骤

    安装环境:vmware12.centos6.8.centos中配置阿里云数据元 1.下载mysql 运行: sudo yum -y install mysql-server 如果下载失败,可以卸载重新 ...

  4. Cookie、Session登陆验证相关介绍和用法

    一.Cookie和Session 首先.HTTP协议是无状态的:所谓的无状态是指每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应直接影响,也不会直接 ...

  5. 简单的Nginx自动化安装啊脚本

    #!/bin/bash #description:Nginx installation script automatically #user:baomanji #date:2017-03-25 #ve ...

  6. 通过数据绑定控制WPF动画启动,WPF动画开始

    1.主要代码: <ControlTemplate.Triggers> <DataTrigger Binding="{Binding Open,RelativeSource= ...

  7. urllib.parse

    1 url分解 import urllib.parse result = urllib.parse.urlparse('http://www.baidu.com') print(result) 结果为 ...

  8. 【转】Impala导出查询结果到文件

    [转载出处]http://blog.csdn.net/jobschen/article/details/68942574 想用impala-shell 命令行中将查询的结果导出到本地文件,想当然的以为 ...

  9. C# webBrowser 控件赋值

    string body = PostWebRequest(txtURL.Text, textBox2.Text); if (webBrowser1.ReadyState != WebBrowserRe ...

  10. php中一些提高性能的技巧

    php中一些提高性能的技巧 tags:php性能 提高性能 php中的@ php的静态 引言:php作为一种脚本语言,本身的性能上肯定是不如c++或者java的.拥有简单易学的特性的同时,性能提升的空 ...