• h5中canvas


    1》canvas是什么?

    a)是一个html5新增的标签

    b)是一个画布,可以通过js的api添加图案

    2》canvas能做什么?使用场景 应用场景:

    1》做游戏 2》画图案

    3》canvas使用

    a)  <canvas></canvas>

    b) 创建一个2d对象 getContext("2d") ps:3d需要插件的支持

    c) 画内容

    4》canvas填充

    一、有填充

    fillStyle ===》颜色
    fillRect ===》位置、大小

    二、无填充

    ****
    canvas画布的宽度和高度,一般都在js中定义,如果在css中定义宽度和高度,内部元素也会受到影响

    5》canvas画线条

    1>起始点:moveTo(x,y);
    2>结束点: lineTo(x,y);
    3>开始画:stroke()


    辅助:
    线条加粗 : 2d对象.lineWidth = 5
    线条颜色 : 2d对象.strokeStyle='red'

    填充颜色 :
    2d对象.fillStyle='red'
    2d对象.fill() ==》加入次方法才可以填充

    1》beginPath:方法开始一条路径,或重置当前的路径。

    2》closePath: 方法创建从当前点到开始点的路径。

    6》canvas画圆

    2d对象.arc()

    arc(x,y,r,sAngle,eAngle,counterclockwise);

    x:横向位置
    y:垂直位置
    r:半径
    sAngle:起始点
    eAngle:结束点
    counterclockwise:方向

    false ==>顺时针

    下面是写的几个案例

    1.太极图

    源码

    <canvas id="mycanvas"></canvas>
        <script>
            var mycanvas = document.getElementById("mycanvas");
            mycanvas.width = 500;
            mycanvas.height = 500;
            var cvs = mycanvas.getContext("2d");
            // 左边黑圆
            cvs.arc(300, 300, 150, 0, 2 * Math.PI);
            cvs.strokeStyle = "#ccc"
            cvs.stroke();
            cvs.fillStyle = "#000";
            cvs.fill();
    
            // 右边白圆
            cvs.beginPath();
            cvs.arc(300, 300, 150, 1.5 * Math.PI, 0.5 * Math.PI);
            // cvs.strokeStyle="#ccc"
            cvs.stroke();
            cvs.fillStyle = "#FFF";
            cvs.fill();
            // 上边黑圆
            cvs.beginPath();
            cvs.arc(300, 225, 75, 0, 2 * Math.PI);
            cvs.strokeStyle = "#000"
            cvs.stroke();
            cvs.fillStyle = "#000";
            cvs.fill();
            // 下边白圆
            cvs.beginPath();
            cvs.arc(300, 375, 75, 0, 2 * Math.PI);
            cvs.strokeStyle = "#fff"
            cvs.stroke();
            cvs.fillStyle = "#fff";
            cvs.fill();
    
            //上边黑圆中的白圆
            cvs.beginPath();
            cvs.arc(300, 220, 30, 0, 2 * Math.PI);
            cvs.strokeStyle = "#fff"
            cvs.stroke();
            cvs.fillStyle = "#fff";
            cvs.fill();
    
             //上边白圆中的黑圆
             cvs.beginPath();
            cvs.arc(300, 375, 30, 0, 2 * Math.PI);
            cvs.strokeStyle = "#000"
            cvs.stroke();
            cvs.fillStyle = "#000";
            cvs.fill();

    2.钟表

    源码

     <canvas id="mycanvas"></canvas>
        <script>
            var mycanvas = document.getElementById("mycanvas");
            mycanvas.width = 800;
            mycanvas.height = 500;
            var cvs = mycanvas.getContext("2d");
            // cvs.moveTo(50, 50);
            // cvs.arc(50, 50, 50, 0, 6 * Math.PI/180);
            function time(){
            //    绘制原型带刻度
            var x = 200;
            y = 200;
            r = 200;
            //获取当前时间
            date=new Date();
            hour=date.getHours();
            minutes=date.getMinutes();
           seconds=date.getSeconds();
            //给度数减去90  时针过半需要分钟/2
            var  H=(-90+hour*30+(minutes/2))*Math.PI/180;
            var M=(-90+minutes*6)*Math.PI/180;
            var S=(-90+seconds*6)*Math.PI/180;
            cvs.arc(x, y, r, 0, 360 * Math.PI / 180);
            cvs.strokeStyle = "#ccc";
            cvs.stroke();
            cvs.closePath();
            cvs.beginPath();
            //分针k刻度
            for (var i = 0; i < 60; i++) {
                cvs.moveTo(x, y);
                cvs.arc(x, y, r, i * 6 * Math.PI / 180, (i + 1) * 6 * Math.PI / 180);
            }
            cvs.strokeStyle = "#000";
            cvs.stroke();
            cvs.closePath();
            //用圆覆盖,只流短刻度
            cvs.beginPath();
            cvs.arc(x, y, r * (19 / 20), 0, 2 * Math.PI);
            cvs.fillStyle = "#fff";
            cvs.fill();
            cvs.strokeStyle = "#fff";
            cvs.stroke();
    
    
            //    时针刻度
            cvs.beginPath();
            for (var i = 0; i < 12; i++) {
                cvs.moveTo(x, y);
                cvs.arc(x, y, r, i * 30 * Math.PI / 180, (i + 1) * 30 * Math.PI / 180);
            }
            cvs.lineWidth = 3;
            cvs.strokeStyle = "#000";
            cvs.stroke();
    
            //用圆覆盖,只流短刻度
            cvs.beginPath();
            cvs.arc(x, y, r * (18 / 20), 0, 2 * Math.PI);
            cvs.fillStyle = "#fff";
            cvs.fill();
            cvs.strokeStyle = "#fff";
            cvs.stroke();
    
    
            //时针
            cvs.beginPath();
    
            cvs.moveTo(x, y);
            cvs.arc(x, y, r * (8 / 20), H, H);
    
            cvs.lineWidth =5;
            cvs.strokeStyle = "#000";
            cvs.stroke();
    
    
            // 分针
            cvs.beginPath();
    
            cvs.moveTo(x, y);
            cvs.arc(x, y, r * (13 / 20), M, M);
    
            cvs.lineWidth = 3;
            cvs.strokeStyle = "#000";
            cvs.stroke();
            //秒针
            cvs.beginPath();
    
            cvs.moveTo(x, y);
            cvs.arc(x, y, r * (17 / 20), S, S);
    
            cvs.lineWidth = 1;
            cvs.strokeStyle = "#000";
            cvs.stroke();
        }
         time();
         setInterval(time,1000)

    3.折线图

    源码

    <canvas id="mycanvas" width="700" height="500"></canvas>
        <script>
            function lineChart(obj, dom) {
                var cvs = dom.getContext("2d");
                width = dom.width;
                height = dom.height;
                data = obj;
                len = data.x.length;
                //间隔宽
                stepwidth = (width - 80) / (len - 1);
                //间隔高
                stepheight = (height - 80) / (data.y.length - 1);
                move = [40, 40];
                line = [40, height - 40];
                //竖线
                for (var i = 0; i < len; i++) {
                    cvs.beginPath();
                    cvs.fillText(data.x[i], line[0] - 13, line[1] + 20);
                    cvs.moveTo(move[0], move[1]);
                    cvs.lineTo(line[0], line[1]);
                    move[0] += stepwidth;
                    line[0] += stepwidth;
                    cvs.stroke();
                }
                //单位
                cvs.fillText(data.yuninit, 40, 30);
                //横线
                var start = [40, 40];
                var end = [width - 40, 40]
                for (var i = 0; i < data.y.length; i++) {
                    cvs.beginPath();
                    cvs.fillText(data.y[i], start[0] - 20, (height - 40) - (i * stepheight));
                    cvs.moveTo(start[0], start[1]);
                    cvs.lineTo(end[0], end[1]);
                    start[1] += stepheight;
                    end[1] += stepheight;
                    cvs.stroke();
                }
                //折线
                for (var i = 0; i < data.line.length; i++) {
    
                    var item = data.line[i].data;
                  
                        cvs.strokeStyle = data.line[i].color;
                    for (var j = 0; j < item.length; j++) {
                        cvs.beginPath();
                        cvs.moveTo(40 + j * stepwidth, height - (height - 80) * (item[j] / data.y[data.y.length - 1]) - 40);
                        cvs.lineTo(40 + (j + 1) * stepwidth, height - (height - 80) * (item[j + 1] / data.y[data.y.length -
                            1]) - 40);
                            cvs.stroke();
                        //点呈圆形
                       cvs.beginPath();
                        cvs.arc(40 + j * stepwidth, height - (height - 80) * (item[j] / data.y[data.y.length - 1]) - 40, 5,
                            0, 2 * Math.PI);
                        cvs.fillStyle = "#fff";
                        cvs.fill();
                        cvs.stroke();
                    }
    
                    
                }
    
            }
            new lineChart({
                x: ["1月", "2月", "3月", "4月", "5月", "6月"],
                y: [0, 50, 100, 150, 200, 250, 300],
                yuninit: "万元",
                line: [{
                        color: "red",
                        data: [50, 80, 100, 300, 270, 160]
                    },
                    {
                        color: "blue",
                        data: [30, 90, 150, 280, 170, 120]
                    },
                ]
    
            }, document.getElementById("mycanvas"))
  • 相关阅读:
    [Agc029D]Grid game_贪心
    [Agc029C]Lexicographic constraints_进制_二分答案_贪心
    [Agc029B]Powers of two_贪心_树形dp
    [Agc029A]Irreversible operation_逆序对
    [LuoguP1074]靶形数独_搜索
    umi react处理接口请求慢的问题
    typescript-类型
    bizcharts画图遇到的几个问题
    webpack 热更新原理
    webpack配置
  • 原文地址:https://www.cnblogs.com/cyhsmile/p/12669808.html
Copyright © 2020-2023  润新知