zoukankan      html  css  js  c++  java
  • canvas小实验

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>canvas</title>
        <style>
            canvas{vertical-align:top;}
        </style>
    </head>
    <body>
    <!-- 直线 -->
        <canvas id="canvas" width="100" height="100" style="border:1px solid red;"></canvas>
    <!-- 三角形 -->
        <canvas id="canvas2" width="100" height="100" style="border:1px solid red;"></canvas>
    <!-- 一个画布绘制两个 三角形 -->
        <canvas id="canvas3" width="300" height="300" style="border:1px solid yellow;"></canvas>
    
    <!-- 绘制矩形 -->
        <canvas id="canvas4" width="300" height="300" style="border:1px solid green;"></canvas>
    <!-- 绘制圆  或圆弧 -->
        <canvas id="canvas5" width="300" height="300" style="border:1px solid blue;"></canvas>
    <!-- 坐标变换 -->
        <canvas id="canvas6" width="300" height="300" style="border:1px solid grey;"></canvas>
    <!-- 单个实验 缩放 与旋转 -->
        <canvas id="canvas7" width="500" height="500" style="border:1px solid cyan;"></canvas>
    <!-- drawImage方法 加背景图像 -->
        <canvas id="canvas8" width="500" height="500" style="border:1px solid red;background:black;"></canvas>
    <!-- 绘制文字 -->
        <canvas id="canvas9" width="500" height="500" style="border:1px solid blue;"></canvas>
    <script>
    var canvas=document.getElementById("canvas");//获取canvas标签
    var cxt=canvas.getContext('2d');//创建canvas对象  接口  钥匙
    // canvas是基于状态的绘制
    // 绘制一条直线---------------------------------------------------
    cxt.moveTo(0,0);//起点
    cxt.lineTo(100,100);//终点
    // 设置线条样式
    cxt.strokeStyle="red";//设置线条颜色
    cxt.lineWidth="5";//设置线条粗细
    cxt.stroke();//连接(绘画)命令   stroke:轻抚
    
    
    // 绘制三角形-----------------------------------------------------
    var canvas2=document.getElementById("canvas2");
    var cxt2=canvas2.getContext('2d');
    cxt2.moveTo(50,0);
    cxt2.lineTo(0,100);
    cxt2.lineTo(100,100);
    cxt2.lineTo(50,0);
    cxt2.strokeStyle="cyan";
    cxt2.lineWidth=5;
    cxt2.fillStyle="orange";
    cxt2.fill();
    cxt2.stroke();
    
    // 在一个画布 画两个三角形--------------------------------------
    var canvas3=document.getElementById("canvas3");
    var cxt3=canvas3.getContext('2d');
    
    // 第一个三角形
    cxt3.beginPath();//开始创建路径
    cxt3.moveTo(150,0);
    cxt3.lineTo(150,80);
    cxt3.lineTo(250,80);
    // cxt3.lineTo(150,0);  可省略
    cxt3.closePath();//关闭路径
    
    cxt3.strokeStyle="yellow";//线条颜色
    cxt3.lineWidth=2;//线条宽度
    cxt3.fillStyle="green";//填充颜色
    cxt3.stroke();//绘制命令
    cxt3.fill();//填充命令
    
    // 第二个三角形
    cxt3.beginPath();//开始创建路径
    cxt3.moveTo(100,100);
    cxt3.lineTo(80,180);
    cxt3.lineTo(200,200);
    // cxt3.lineTo(100,100);   可省略                  
    cxt3.closePath();//关闭路径
    
    cxt3.strokeStyle="yellow";//线条颜色
    cxt3.lineWidth=2;//线条宽度
    cxt3.fillStyle="cyan";//填充颜色
    cxt3.stroke();//绘制命令
    cxt3.fill();//填充命令
    
    
    // 多边形
    cxt3.beginPath();//开始创建路径
    cxt3.moveTo(250,200);
    cxt3.lineTo(180,200);
    cxt3.lineTo(150,250);
    cxt3.lineTo(180,300);
    cxt3.lineTo(250,300);
    cxt3.lineTo(280,250);
    cxt3.lineTo(250,200);                 
    cxt3.closePath();//关闭路径
    
    cxt3.strokeStyle="purple";//线条颜色
    cxt3.lineWidth=2;//线条宽度
    cxt3.fillStyle="orange";//填充颜色
    cxt3.stroke();//绘制命令
    cxt3.fill();//填充命令
    
    
    
    // 绘制矩形--------------------------------------------------------
    // cxt4.rect(x,y,width,height);
    var canvas4=document.getElementById('canvas4');
    var cxt4=canvas4.getContext('2d');
    // 第一种方法
    cxt4.rect(20,20,150,100);
    
    cxt4.strokeStyle="black";
    cxt4.lineWidth=5;
    cxt4.fillStyle="orangered";
    
    cxt4.stroke();
    cxt4.fill();
    // 第二种方法
    cxt4.strokeRect(20,150,80,50);//直接绘制
    
    // 第三种方法
    cxt4.fillStyle="pink";
    cxt4.fillRect(120,150,80,50);//填充加绘制  默认填充黑色
    
    // 清空画布上的一块儿区域
    cxt4.clearRect(130,160,30,30);
    cxt4.clearRect(40,30,80,80);
    
    
    // 绘制圆   或圆弧----------------------------------------------
    // cxt.arc(x,y,radius,starAngle,endAngle,anticlockwise);
    // x,y:圆心
    // radius:半径
    // starAngle,endAngle:开始角度,与终点角度;
    // anticlockwise:顺时针(false),逆时针(true);anticlockwise:逆时针的
    var canvas5=document.getElementById('canvas5');
    var cxt5=canvas5.getContext('2d');
    
    cxt5.beginPath();//开始画路径
    cxt5.arc(50,50,50,0,Math.PI*2,false);
    cxt5.closePath();//关闭路径
    cxt5.fillStyle="red";
    cxt5.fill();
    cxt5.stroke();
    
    // ------画弧-------------------------
    cxt5.beginPath();
    cxt5.arc(150,50,50,-Math.PI*0.5,Math.PI*0.5,false);
    cxt5.closePath();
    
    cxt5.fillStyle="pink";
    cxt5.fill();
    cxt5.stroke();
    
    // 第二个弧
    cxt5.beginPath();
    cxt5.arc(50,150,50,Math.PI/4,-Math.PI*0.25,false);
    cxt5.closePath();
    
    cxt5.fillStyle="orangered";
    cxt5.fill();
    cxt5.stroke();
    // 第三个弧
    cxt5.beginPath();
    cxt5.arc(150,150,50,Math.PI/4,-Math.PI*0.25,true);
    cxt5.closePath();
    
    cxt5.fillStyle="green";
    cxt5.fill();
    cxt5.stroke();
    
    // 坐标变换
    // cxt.translate(x,y)位移
    // cxt.scale(x,y)缩放  不光图片宽高会缩放 起始坐标也会缩放
    // cxt.rotate(angle)旋转 不光图形会旋转 坐标系也会旋转
    // 解决使用多个位移后位置叠加的情况
    // cxt.save();保存
    // cxt.restore();恢复
    var canvas6=document.getElementById('canvas6');
    var cxt6=canvas6.getContext('2d');
    
    
    cxt6.fillStyle="gray";
    cxt6.save();
    cxt6.translate(50,50);//位移
    cxt6.fillRect(0,0,100,50);
    cxt6.restore();
    
    
    cxt6.save();
    cxt6.fillStyle="green";
    cxt6.translate(50,50);//相对于第一个矩形位移叠加了
    cxt6.scale(2,1);
    
    // 处理方法是用cxt.save();cxt.restore()将路径和位移包裹起来
    // 旋转同样是这样处理
    cxt6.fillRect(50,50,100,50);
    cxt6.restore();
    
    cxt6.fillStyle="red";
    cxt6.save();
    cxt6.translate(200,175);//让图片在(150,150)坐标
    // cxt6.translate(50,50);
    cxt6.rotate(30*Math.PI/180);
    cxt6.fillRect(-50,-25,100,50);//让图片中心点与原点重合
    cxt6.restore();
    
    
    // ------------------实验 旋转 与 缩放----------------------
    // 使canvas的旋转与缩放 以图片中心为基准  使效果与css3效果相同
    var canvas7=document.getElementById('canvas7');
    var cxt7=canvas7.getContext('2d');
    var deg=0;
    // cxt7.fillStyle='red';
    // cxt7.save();
    // cxt7.translate(200,150);//用位移确定 图片在画布中的位置
    // // cxt7.rotate(180*Math.PI/180);
    
    // // cxt7.scale(2,1);//此时用缩放也和css3一样了
    // cxt7.fillRect(-100,-50,200,100);//先让图片的中心与原点重合1
    // cxt7.restore();
    
    function xz(){
    
        // cxt7.clearRect(0,0,500,500);
    
        deg=deg+2;
        cxt7.clearRect(0,0,500,500)
        cxt7.beginPath();
        cxt7.save();
        cxt7.translate(200,150);
        
        cxt7.rotate(deg*Math.PI/180);
    
        console.log(deg);
        cxt7.strokeRect(-100,-50,200,100);
        cxt7.restore();
        cxt7.closePath();
        if(deg>=360){
            deg=0;
            cxt7.clearRect(0,0,500,500)
        }
    }
    setInterval(xz,40);
    
    
    // drawImage方法 加背景图像-----------------------------
    // drawImage(image,x,y)
    // drawImage(image,x,y,w,h)
    // 参数说明
    // image:img,video元素,或者javascript中的image对象,用来装载图片文件
    // x,y:绘制图像时,在画布中的起始x,y坐标
    // w,h:绘制时,设置图像的宽度和高度
    // 使用方法:
    // var img = new Image();//创建Image对象
    // img.src="img/html.jpg";//设置图像路径
    // img.onload=function(){//图像加载完之后,将图片放在canvas里面
    //         context.drawImage(img,10,10);
    // }
    
    // clip()图像裁切方法
    // 使用路径在画布上设置裁切区域
    // 调用clip()方法设置裁切区域
    
    // 例子
    var canvas8=document.getElementById('canvas8');
    var cxt8=canvas8.getContext('2d');
    var img=new Image();//创建Image对象
    img.src="img/Hydrangeas.jpg";//设置图像路径
    img.onload=function(){
        cxt8.drawImage(img,0,0,500,500)
    }
    
    // cxt8.save();加了这对标签 就切不了图了 无解
    cxt8.strokeStyle="cyan";
    cxt8.lineWidth="7";
    cxt8.arc(250,250,200,0,2*Math.PI,false);
    cxt8.stroke();
    cxt8.clip();
    // cxt8.restore();
    
    
    // -----------绘制文字----------------------------
    // font:设置文本样式
    // textAlign:水平对齐方式  left,right,center
    // textBaseline:垂直对齐方式  top,middle,bottom
    // 填充文字  fillText(text,x,y)
    // 绘制文字轮廓  strokeText(text,x,y)
    // 参数说明:
    // text:要绘制的文字
    // x,y:文字起点x,y坐标
    
    // 例子
    var canvas9=document.getElementById('canvas9');
    var cxt9=canvas9.getContext('2d');
    cxt9.font="50px 微润雅黑";
    cxt9.fillStyle="pink";
    cxt9.strokeStyle="blue";
    cxt9.textBaseline="top";//默认是底部对齐
    cxt9.textAlign="left";//默认水平对齐方式为左对齐
    cxt9.fillText('你好,欢迎光临!',100,100);
    cxt9.strokeText('哈哈哈哈',200,200);
    cxt9.strokeText('你好,欢迎光临!',105,105);
    </script>
    </body>
    </html>
  • 相关阅读:
    回调那些事儿
    v-if和v-show小对比
    导出下载功能
    vue和react
    Redis 实现抢票
    MySQL 各种连接,
    MySQL的分组,降序 实现
    MySQL 窄表转宽表
    EX: 判断密码, 判断字符必须包含大写,小写,数字,特殊字符 ,并且键盘不能连续
    hive 基础
  • 原文地址:https://www.cnblogs.com/fqh123/p/10802153.html
Copyright © 2011-2022 走看看