zoukankan      html  css  js  c++  java
  • canvas绘制线和矩形

    ###canvas绘制矩形
    HTML中的元素canvas只支持一种原生的图形绘制:矩形。所有其他的图形的绘制都至少需要生成一条路径

    1.绘制矩形
    canvas提供了三种方法绘制矩形:
    ---->绘制一个填充的矩形(填充色默认为黑色)
    fillRect(x, y, width, height)
    ---->绘制一个矩形的边框(默认边框为:一像素实心黑色)
    strokeRect(x, y, width, height)
    ---->清除指定矩形区域,让清除部分完全透明。
    clearRect(x, y, width, height)

    x与y指定了在canvas画布上所绘制的矩形的左上角(相对于原点)的坐标。
    width和height设置矩形的尺寸。(存在边框的话,边框会在width上占据一个边框的宽度,height同理)

    2.strokeRect时,边框像素渲染问题
    按理渲染出的边框应该是1px的,
    canvas在渲染矩形边框时,边框宽度是平均分在偏移位置的两侧。
    context.strokeRect(10,10,50,50)
    :边框会渲染在10.5 和 9.5之间,浏览器是不会让一个像素只用自己的一半的
    相当于边框会渲染在9到11之间
    context.strokeRect(10.5,10.5,50,50)
    :边框会渲染在10到11之间

    3.添加样式和颜色
    fillStyle :设置图形的填充颜色。


    strokeStyle :设置图形轮廓的颜色。
    默认情况下,线条和填充颜色都是黑色(CSS 颜色值 #000000)
    lineWidth : 这个属性设置当前绘线的粗细。属性值必须为正数。
    描述线段宽度的数字。 0、 负数、 Infinity 和 NaN 会被忽略。
    默认值是1.0。

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <style type="text/css">
             
        
             html,body{
                    height: 100%;
                    overflow: hidden;
                    
                }
                body{
                    background: greenyellow;
                }
              #test{
                   position: absolute;
                   top: 0;
                   left: 0;
                   right: 0;
                   bottom:0;
                   margin: auto;
               background: gray;
    
                  
              }
            </style>
        </head>
        <body>
            <canvas id="test" width="300" height="300">
                <span>您的浏览器不支持画布元素 请您换成萌萌的谷歌</span>
            </canvas>
        </body>
          <script type="text/javascript">
              window.onload=function(){
              
                var canvas = document.querySelector("#test");
    
              
              
                if(canvas.getContext){
                    
           
                    var ctx=canvas.getContext("2d");
                        
                    //设置图形的填充颜色               
                        ctx.fillStyle = "blue";
                        //实心矩形
                    ctx.fillRect(0,0,100,100)
                    //设置图形轮廓的颜色
                     ctx.strokeStyle = "blue";
                    //带边框的矩形  
                    // 100    : 99.5 --- 100.5(99-101)
                    // 100.5: 100  --- 101 
                    ctx.strokeRect(100.5,100.5,100,100)
                    
    //                清除指定矩形区域,让清除部分完全透明
    //                ctx.clearRect(50,50,100,100)
                    
                }
              }
    
          </script>
    </html>
    View Code
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <style type="text/css">
                *{
                    margin: 0;
                    padding: 0;
                }
                html,body{
                    height: 100%;
                    overflow: hidden;
                }
                body{
                    background: pink;
                }
                #test{
                    background: gray;
                    position: absolute;
                    left: 0;
                    top: 0;
                    right: 0;
                    bottom: 0;
                    margin: auto;
                }
            </style>
        </head>
        <body>
            <canvas id="test" width="300" height="300">
                <span>您的浏览器不支持画布元素 请您换成萌萌的谷歌</span>
            </canvas>
        </body>
        <script type="text/javascript">
            window.onload=function(){
                //querySelector身上有坑
                //拿到画布
                var canvas = document.querySelector("#test");
                if(canvas.getContext){
                    var ctx = canvas.getContext("2d");
    //                设置图形轮廓的颜色。
                    ctx.strokeStyle="pink";
    //                设置图形的填充颜色。
                    ctx.fillStyle="green";
    //                   覆盖渲染
                    ctx.lineWidth=10;
                    
                    ctx.moveTo(100,100);
                    ctx.lineTo(50,200);
                    ctx.lineTo(150,80);
                    ctx.lineTo(150,100);
                        
    //                ctx.moveTo(200,200);
                    ctx.lineTo(200,200);
                    ctx.lineTo(200,300);
                    //描边的线
                    ctx.stroke();
                    
                }
            }
            
            
        </script>
    </html>
    View Code


    4.lineWidth & 覆盖渲染

    <script type="text/javascript">
            window.onload=function(){
                //querySelector身上有坑
                //拿到画布
                var canvas = document.querySelector("#test");
                if(canvas.getContext){
                    var ctx = canvas.getContext("2d");
    //                设置图形轮廓的颜色。
                    ctx.strokeStyle="pink";
    //                设置图形的填充颜色。
                    ctx.fillStyle="green";
    //                   覆盖渲染
                    ctx.lineWidth=10;
                    
                    ctx.moveTo(100,100);
                    ctx.lineTo(50,200);
                    ctx.lineTo(150,80);
                    ctx.lineTo(150,100);
                        
    //                ctx.moveTo(200,200);
                    ctx.lineTo(200,200);
                    ctx.lineTo(200,300);
                    //描边的线
                    ctx.stroke();
                    
                }
            }
            
            
        </script>



    5.lineJoin
    设定线条与线条间接合处的样式(默认是 miter)
    round : 圆角
    bevel : 斜角
    miter : 直角

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 交换Easy
    Java实现 蓝桥杯VIP 算法提高 多项式输出
    Java实现 蓝桥杯VIP 算法提高 多项式输出
    Java实现 蓝桥杯VIP 算法提高 多项式输出
    Java实现 蓝桥杯VIP 算法提高 多项式输出
    Java实现 蓝桥杯VIP 算法提高 多项式输出
    Java实现 蓝桥杯VIP 算法训练 矩阵乘方
    QT中给各控件增加背景图片(可缩放可旋转)的几种方法
    回调函数实现类似QT中信号机制
    std::string的Copy-on-Write:不如想象中美好(VC不使用这种方式,而使用对小字符串更友好的SSO实现)
  • 原文地址:https://www.cnblogs.com/hack-ing/p/11821485.html
Copyright © 2011-2022 走看看