zoukankan      html  css  js  c++  java
  • 从零开始的HTML5之旅(四)

    HTML5 Canvas

    什么是canvas

      Canvas API是在HTML5中新增的标签,它用于在网页实时生成图像,并且可以操作图像内容,基本上是一个可以用js操作的位图。

      Canvas对象表示一个HTML画布元素canvas。Canvas对象没有自己的行为,它定义了一个API支持脚本化客户端绘图操作。

      简而言之它用于在网上绘制图形。画布是一个矩形区域,我们可以控制其中的每一个像素。canvas拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。


    浏览器支持

      canvas元素支持chrome 4.0+、IE9.0+、firefox2.0+、Safari 3.1+、opera 9.0+。

    创建canvas

    <canvas id="demo1" height="200" width="200" style="border: 1px solid red; ></canvas>
    

      这里为让画布更明显,因此加上了边框。

    绘制图像

      canvas元素本身没有绘图能力,其所有的绘制工作都是在js中完成的。

    长方形

    <script>
        var d=document.getElementById("demo1"); //获取到canvas元素
        var ct=d.getContext("2d"); //获取到CanvasRenderingContext2D对象
        ct.fillStyle="red"; //填充路径的颜色为红色
        ct.fillRect(0,20,50,100); //起始位置为0x,20y,画一个高为100,宽为50的长方形
    </script>
    


      效果如下:




      通过指定从何处开始,何处结束来绘制角。

     <div>
     <canvas id="demo2" width="200" height="200" style="border:1px solid #888888"></canvas>
     </div>
     
     var d2=document.getElementById("demo2");
     var ct2=d2.getContext("2d");
     ct2.moveTo(10,10); //将当前位置(0,0)移动到10x,10y
     ct2.lineTo(100,50); //从当前位置(10,10)画一条坐标到100x,50y的直线
     ct2.lineTo(0,100) //从当前位置(100,50)画一条坐标到0x,100y的直线
     ct2.stroke(); //绘制边框
     
    



    圆形


      通过规定尺寸、颜色、位置来绘制一个圆。


    <div>
    <canvas id="demo3"width="200" height="200" style="border:1px solid black" ></canvas>
    </div>
    
    var d3=document.getElementById("demo3");
    var ct3=d3.getContext("2d");
    ct3.fillStyle="red"; //填充红色
    ct3.beginPath(); //开始画布中一个新路径
    ct3.arc(100,100,40,0,Math.PI*2,true); //圆心为100x,100y 半径为40 弧度为0 
    //Math.PI*2 画一个圆,如果想画半圆就把Math.PI*2改成Math.PI*1
    //true是指逆时针方向画,false是顺时针
    ct3.closePath(); //关闭路径 
    ct3.fill(); //填充当前路径
    



    渐变

      绘制渐变背景。


    <div>
    <canvas id="demo4" width="200" height="200" style="border:1px solid #c3c3c3"></canvas>
    </div>
    
    var d4=document.getElementById("demo4");
    var ct4=d4.getContext("2d");
    var gkd=ct4.createLinearGradient(0,0,175,50); //创建一条起始坐标为(0,0),终点坐标为(175,50)的线性颜色渐变
    gkd.addColorStop(0,"#FF0000");  //前面的参数为浮点值
    gkd.addColorStop(1,"#00FF00");  //后面的参数是颜色的目标值
    ct4.fillStyle=gkd;
    ct4.fillRect(0,0,175,50);
    



    图像

      把图像放到画布上。

    <div>
    <canvas id="demo5" width="200" height="200" style="border:1px solid blue"></canvas>
    <!-- <img id="img1" width="180" height="180" src="https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2974207213,2775068311&fm=26&gp=0.jpg"> -->
    </div>
    
    var d5=document.getElementById("demo5");
    var ct5=d5.getContext("2d");
    // var img=document.getElementById("img1");
    var img=new Image(); //创建一个Image对象
        img.src="https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2974207213,2775068311&fm=26&gp=0.jpg"; 
    img.onload=function(){
             ct5.drawImage(img,0,0); //在一个画布上绘制图像,img是要绘制的图像,0x,0y是起始位置
        }
    




    完整代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <div>
            <canvas id="demo1" width="200" height="200" style="border: 1px solid red;"></canvas>
        </div>
        <div>
            <canvas id="demo2" width="200" height="200" style="border:1px solid #888888"></canvas>
        </div>
        <div>
            <canvas id="demo3"width="200" height="200" style="border:1px solid black" ></canvas>
        </div>
        <div>
            <canvas id="demo4" width="200" height="200" style="border:1px solid #c3c3c3"></canvas>
        </div>
        <div>
            <canvas id="demo5" width="200" height="200" style="border:1px solid blue"></canvas>
            <!-- <img id="img1" width="180" height="180" src="https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2974207213,2775068311&fm=26&gp=0.jpg"> -->
        </div>
    </body>
    </html>
    
    <script>
        //正方形
        var d=document.getElementById("demo1"); //获取到canvas元素
        var ct=d.getContext("2d");
        ct.fillStyle="red";
        ct.fillRect(0,20,50,100);
    
        //角
        var d2=document.getElementById("demo2");
        var ct2=d2.getContext("2d");
        ct2.moveTo(10,10);
        ct2.lineTo(100,50);
        ct2.lineTo(0,100)
        ct2.stroke();
    
        //圆形
        var d3=document.getElementById("demo3");
        var ct3=d3.getContext("2d");
        ct3.fillStyle="red";
        ct3.beginPath();
        ct3.arc(100,100,40,0,Math.PI*2,true);
        ct3.closePath();
        ct3.fill();
    
        //渐变
        var d4=document.getElementById("demo4");
        var ct4=d4.getContext("2d");
        var gkd=ct4.createLinearGradient(0,0,175,50); 
        gkd.addColorStop(0,"#FF0000");
        gkd.addColorStop(1,"#00FF00")
        ct4.fillStyle=gkd;
        ct4.fillRect(0,0,175,50);
    
        //图像
        var d5=document.getElementById("demo5");
        var ct5=d5.getContext("2d");
        // var img=document.getElementById("img1");
        var img=new Image();
        img.src="https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2974207213,2775068311&fm=26&gp=0.jpg";
        img.onload=function(){
             ct5.drawImage(img,0,0);
        }
    
       
        // var ct5
    </script>
    
  • 相关阅读:
    多态与异常处理课后作业
    Java接口与继承作业
    大道至简第六章随笔
    大道至简第五章随笔
    Java数组课程作业
    大道至简第四章随笔
    String课后作业
    大道至简第三章随笔
    Java语法基础动手动脑实践
    大道至简-第二章 心得体会
  • 原文地址:https://www.cnblogs.com/ODevil/p/12500387.html
Copyright © 2011-2022 走看看