zoukankan      html  css  js  c++  java
  • 3.标签篇:canvas

    # 3.标签篇:canvas

     
    - 1. 语义化标签
    都是块盒
    <header></header>:页头
    <footer></footer>:页脚
    <nav></nav>:导航
     
    <article></article>:用于文章,可以直接被引用拿走的
    <section></section>:用于段落
     
    <aside></aside>:侧边栏
     
    - 2. canvas
     
    <canvas></canvas>
    ```html
    <style>
        #can{
            500px;
            height:300px;
            border:1px solid black;
        }
    </style>
    <!--canvas的大小要在行间样式上写width和height-->
    <canvas id="can" width="500px" height="300px"><canvas>
    <script>
        var canvas = document.getElementById("can");
        var ctx = canvas.getContext("2d");//获得画笔
        //画一条线
        ctx.lineWidth = 10;//设置线的粗细
        ctx.moveTo(100, 100);//起点
        ctx.lineTo(200, 100);//终点
        ctx.lineTo(200, 200);//终点
        //ctx.closePath();//之前的线是连续的,就可以闭合起点和最后一个终点
        //ctx.fill();//未闭合区域填充色彩
        ctx.stroke();//展示画出的效果
        
        ctx.beginPath();//重现开启一个新路径
        ctx.lineWidth = 5;//设置线的粗细
        ctx.moveTo(200, 200);//起点
        ctx.lineTo(300, 300);//终点
        ctx.stroke();
    </script>
     
    <script>
        var canvas = document.getElementById("can");
        var ctx = canvas.getContext("2d");//获得画笔
        //画一个矩形,方式一
        ctx.rect(100, 100, 200, 100);//给出矩形起点的坐标和长与宽
        ctx.fill();
        ctx.stroke();
     
        //画一个矩形,方式二
        ctx.strokeRect(100, 100, 200, 100);
     
        //画一个矩形,方式三
        ctx.strokeRect(100, 100, 200, 100);
    </script>
     
    <script>
        //写一个下落的矩形
        var canvas = document.getElementById("can");
        var ctx = canvas.getContext("2d");//获得画笔
     
        var height = 100;
        var timer = setInterval(function(){
            ctx.clearRect(0, 0, 500, 300);//清除画布矩形区域上,原来画的图案
            ctx.strokeRect(100, height, 50, 50);
            height += 2;
        }, 1000 / 30);
    </script>
     
    <script>
        //画圆,圆心(x, y), 半径r, 弧度(起始弧度, 结束弧度), 方向(顺时针或逆时针)
        //弧度从0开始,右手边水平方向位置
        //弧度以圆周长计算,其中Math.PI代表圆周率π
        //顺时针为0,逆时针为1
        var canvas = document.getElementById("can");
        var ctx = canvas.getContext("2d");//获得画笔
        //画一个圆
        //arc(圆心x, 圆心y, 半径r, 起始弧度, 结束弧度, 方向)
        ctx.arc(100, 100, 50, 0, Math.PI/2, 0);
        ctx.lineTo(100,100);
        ctx.closePath();
        ctx.stroke();
    </script>
     
    <script>
        var canvas = document.getElementById("can");
        var ctx = canvas.getContext("2d");//获得画笔
        //画一个圆角矩形
        ctx.moveTo(100, 110);//起点A
        //arcTo(矩形拐角B点x, 矩形拐角B点y, 弧形方向C点x, 弧形方向C点y, 弧形像素)
        ctx.arcTo(100, 200, 200, 200, 10);
        ctx.arcTo(200, 200, 100, 200, 10);
        ctx.arcTo(200, 100, 100, 100, 10);
        ctx.arcTo(100, 100, 100, 200, 10);
        ctx.fill();
        ctx.stroke();
    </script>
     
    <script>
        var canvas = document.getElementById("can");
        var ctx = canvas.getContext("2d");//获得画笔
        //画二次贝塞尔曲线
        ctx.beginPath();
        ctx.moveTo(100, 100);//起点A
        
        //quadraticCurveTo二次贝塞尔曲线的其他两个点坐标
        ctx.quadraticCurveTo(200, 200, 300, 100);
        ctx.stroke();
     
        //画三次贝塞尔曲线
        ctx.beginPath();
        ctx.moveTo(100, 100);//起点A
        
        //bezierCurveTo三次贝塞尔曲线的其他三个点坐标
        ctx.bezierCurveTo(200, 200, 300, 100, 400, 200);
        ctx.stroke();
     
        //画一个宽500,高300的波浪
        var width = 500;
        var height = 300;
        var num = 0;
        var offset = 0;
        setInterval(function(){
            ctx.clearRect(0, 0, 500, 300);
            ctx.beginPath();
            ctx.moveTo(0, height / 2);//起点A
            
            //quadraticCurveTo二次贝塞尔曲线的其他二个点坐标
            ctx.quadraticCurveTo(width/4 + offset - 500, height/2 + Math.sin(num)* 100, width/2 + offset - 500, height/2 + Math.sin(num)* 100);
            ctx.quadraticCurveTo(width/4*3 + offset - 500, height/2 - Math.sin(num)* 100, width + offset - 500, height/2 - Math.sin(num)* 100);
     
            //quadraticCurveTo二次贝塞尔曲线的其他二个点坐标
            ctx.quadraticCurveTo(width/4 + offset, height/2 + Math.sin(num)* 100, width/2 + offset, height/2 + Math.sin(num)* 100);
            ctx.quadraticCurveTo(width/4*3 + offset, height/2 - Math.sin(num)* 100, width + offset, height/2 - Math.sin(num)* 100);
            ctx.stroke();
            offset += 5;
            offset %= 500;
            num += 0.02;
        }, 1000/30);
    </script>
     
    <script>
        var canvas = document.getElementById("can");
        var ctx = canvas.getContext("2d");//获得画笔
        //坐标系原点默认是画布的左上角
        //旋转
        ctx.beginPath();
        ctx.translate(100, 100);//坐标系原点平移到100,100
        ctx.rotate(Math.PI / 6);//根据坐标系原点进行旋转
        ctx.moveTo(0, 0);//起点A
        ctx.lineTo(100, 0);
        ctx.stroke();
    </script>
     
    <script>
        var canvas = document.getElementById("can");
        var ctx = canvas.getContext("2d");//获得画笔
        
        ctx.beginPath();
        ctx.scale(2, 1);//缩放
        ctx.strokeRect(100, 100, 100, 100);
    </script>
     
    <script>
        var canvas = document.getElementById("can");
        var ctx = canvas.getContext("2d");//获得画笔
        //改变坐标系的状态后,怎样变回原来的坐标状态
        ctx.save();//首先保存原坐标系的状态,可以保存坐标系的平移,缩放,旋转数据
        ctx.translate(100, 100);//坐标系原点平移
        ctx.rotate(Math.PI/4);//旋转
     
        ctx.beginPath();
        ctx.strokeRect(0, 0, 100, 50);
     
        ctx.beginPath();
        ctx.restore();//恢复原坐标系的状态
        ctx.strokeRect(200, 0, 100, 50);
    </script>
     
    <script>
        //记住:纹理的填充都是以坐标系原点进行填充的,所以填充之前,看是否需要改变坐标系原点
        //canvas背景填充
        var canvas = document.getElementById("can");
        var ctx = canvas.getContext("2d");//获得画笔
     
        var img = new Image();
        img.src = "./good.png";
        img.onload = function(){
            ctx.beginPath();
            ctx.translate(100, 100);//改变坐标系原点
            var bg = ctx.createPattern(img, "no-repeat");//为画填充纹理
            ctx.fillStyle = bg;//换背景
            ctx.fillRect(100, 100, 200, 100);
        };
    </script>
     
    <script>
        //canvas线性渐变,线性渐变的起点是坐标系原点
        var canvas = document.getElementById("can");
        var ctx = canvas.getContext("2d");//获得画笔
     
        ctx.beginPath();
        var bg = ctx.createLinearGradient(0, 0, 200, 0);//渐变的两点的坐标
        bg.addColorStop(0, "white");//添加关键点,第一个参数只能0-1
        bg.addColorStop(0.5, "blue");
        bg.addColorStop(1, "black");
        ctx.fillStyle = bg;
        ctx.fillRect(0, 0, 200, 100);
    </script>
     
    <script>
        //canvas辐射渐变,辐射渐变的起点是坐标系原点
        var canvas = document.getElementById("can");
        var ctx = canvas.getContext("2d");//获得画笔
     
        ctx.beginPath();
        var bg = ctx.createRadialGradient(100, 100, 30, 100, 100, 100);//渐变的圆心坐标x1,y1,半径r1;圆心坐标x2,y2,半径r2;
        bg.addColorStop(0, "white");//添加关键点,第一个参数只能0-1
        bg.addColorStop(0.5, "black");
        bg.addColorStop(1, "white");
        ctx.fillStyle = bg;
        ctx.fillRect(0, 0, 200, 200);
    </script>
     
    <script>
        //给矩形添加阴影
        var canvas = document.getElementById("can");
        var ctx = canvas.getContext("2d");//获得画笔
     
        ctx.beginPath();
        ctx.shadowColor = "blue";//添加阴影颜色
        ctx.shadowBlur = 20;//添加阴影半径
        ctx.shadowOffsetX = 15;//横坐标的阴影向右平移15px
        ctx.shadowOffsetY = 15;//纵坐标的阴影向右平移15px
        ctx.strokeRect(0, 0, 200, 200);
    </script>
     
    <script>
        //绘制文字
        var canvas = document.getElementById("can");
        var ctx = canvas.getContext("2d");//获得画笔
     
        ctx.beginPath();
        ctx.strokeRect(0, 0, 200, 200);
        ctx.fillStyle = "red";
        ctx.font = "30px Georgia";//字体大小,字体
     
        ctx.strokeText("panda", 200, 100);//回执的文字,横坐标,纵坐标。对文字描边,产生空心文字
        ctx.fillText("panda", 200, 300);//回执的文字,横坐标,纵坐标。对文字填充,产生实心文字,可以改变文字颜色
    </script>
     
    <script>
        //线端样式
        var canvas = document.getElementById("can");
        var ctx = canvas.getContext("2d");//获得画笔
     
        ctx.beginPath();
        ctx.lineWidth = 15;
        ctx.moveTo(100, 100);
        ctx.lineTo(200, 100);
        //ctx.lineCap = "square";//线两端的样式。butt:原封不动;squre:方形;round:半圆;
        ctx.lineTo(100, 150);
        //ctx.lineJoin = "round";//两条线交汇的样式。round:圆角;bevel:截断;miter:尖锐(设置为miter有一个miterLimit属性,防止过分尖锐);
        //ctx.miterLimit = 5;//两条线交汇,限制交汇的长度
        ctx.stroke();
    </script>
    ```
     
    以上是markdown格式的笔记
  • 相关阅读:
    制作IOS 后台极光推送时,遇到的小问题
    如何实现IOS_SearchBar搜索栏及关键字高亮
    使用WKWebView替换UIWebView,并且配置网页打电话功能
    [Creating an image format with an unknown type is an error] on cordova, ios 10
    面向对象语言还需要指针么?
    推荐一个简单好用的接口——字典序列化
    ITTC数据挖掘系统(六)批量任务,数据查看器和自由文档
    java的LINQ :Linq4j简明介绍
    别语言之争了,最牛逼的语言不是.NET,也不是JAVA!
    ITTC数据挖掘平台介绍(五) 数据导入导出向导和报告生成
  • 原文地址:https://www.cnblogs.com/lanshanxiao/p/12969545.html
Copyright © 2011-2022 走看看