您的浏览器不支持canvas 基础设置

您的浏览器不支持canvas 基础设置 评论:0

创建canvas

  <canvas id="mycanvas" class="canvas">    您的浏览器不支持canvas  </canvas>

基础设置

    <script type="text/javascript">        var canvas = document.getelementbyid('mycanvas');        var ctx = canvas.getcontext('2d');        canvas.width=100;        canvas.height=100;    </script>

画直线
moveto(x1, y1)
lineto(x2, y2)

    ctx.moveto(0, 0);    ctx.lineto(100, 100);    ctx.stroke();

画圆形
ctx.arc(x,y,radius,0,2*math.pi,true)

    ctx.beginpath();    ctx.arc(300,300,50,a的n次方0,2*math.pi,true);    ctx.strokestyle = '#000';    ctx.stroke();

画矩形
ctx.strokerect(x1, y1,x2, y2)

    ctx.strokerect(300,100,200,100);

beginpath()开始一条新路径
clopath()使当前路径闭合
不是成对出现的

      ctx.beginpath();      ctx.moveto(300, 0);      ctx.lineto(200, 100);      ctx.lineto(200, 200);      ctx.clopath();      ctx.strokestyle = '#0f0';      ctx.stroke();

设置样式

      ctx.moveto(0,0);      ctx.lineto(100,100);      ctx.lineto(100,200);      ctx.clopath();      //linewidth 设置描边的线宽      ctx.linewidth = 10;      //strokestyle 设置描边样式      ctx.strokestyle = "#f00";      ctx.stroke();      //fillstyle 设置填充样式      ctx.fillstyle = "rgba(0,255,0,0.5)";      ctx.fill();

绘制矩形与样式同步

      ctx.strokerect(100,200,100,100);      ctx.fillrect(100,200,100,100);

保存和恢复上下文环境,一般成对出现
save 保存当前绘画环境,包括变换和样式
restore 恢复当前绘画环境,包括变换和样式

   ctx.save();   ctx.restore();

图形变换

      //translate 平移变换      ctx.translate(0,100);      ctx.beginpath();      ctx.moveto(0,0);      ctx.lineto(100,100);      ctx.stroke();      //rotate 旋转变换      ctx.rotate(math.pi/4);      ctx.beginpath();      ctx.moveto(0,0);      ctx.lineto(100,100);      ctx.linewidth = 5;      ctx.strokestyle = "#f00";      ctx.stroke();      //scale 缩放变换      ctx.scale(1,0.5);      ctx.fillrect(0,-100,100,100);

线性渐变

        var lineargradient = ctx.createlineargradient(0, 0, 200, 0);        //给渐变添加颜色        lineargradient.addcolorstop(0, 'rgb(255,0,0)');        lineargradient.addcolorstop(0.3, 'rgb(0,255,0)');        lineargradient.addcolorst学历学位op(1, 'rgb(0,0,255)');        //设置渐变作为样式        ctx.fillstyle = lineargradient;        ctx.fillrect(0, 0, 200, 200);

径向渐变

        var radialgradient = ctx.createradialgradient(400, 50, 0, 400, 150, 100);        radialgradient.addcolorstop(0, 'rgb(255,255,0)');        radialgradient.addcolorstop(1, 'rgb(0,0,0)');        ctx.fillstyle = radialgradient;        ctx.beginpath();        ctx.arc(400, 150, 100, 0, math.pi * 2, true);        ctx.fill();

文字

字体若设置了居中,圆心会在文字的中间位置,所以圆心还是要根据画布大小和文字的宽度进行设置。

        var str = "hello world";        //设置文本样式,比如大小,字体        ctx.font = "50px sans-rif";        //水平对其设置,left center right        ctx.textalign = "center";        //垂直对齐设置,top middle bottom        ctx.textbaline = "top";        //填充文本        ctx.filltext(str,300,0);        //描边文本        ctx.stroketext(str,0,200);        //获取文本宽度        var width = ctx.measuretext(str).width;        console.log(width);

图片

        ctx.fillrect(0, 0, canvas.width, canvas.height);        var img = new image();        img.src = "logo.png";        //一定要在图像加载完成后的回调中绘制图像        img.onload = function () {            //在(0,0)点处绘制img图像            // ctx.drawimage(img, 0, 0);            //在(0,0)点处绘制img图像,缩放成256*80            // ctx.drawimage(img, 0, 0, 256, 80);            //获取img图像的(0,0)点处的40*40区域,绘制在(100,100)点处,缩放成80*80            ctx.drawimage(img, 0, 0, 40, 40, 100, 100, 80, 80);        }

创建图像画刷ctx.createpattern(image, type)

        ctx.fillrect(0, 0, canvas.width, canvas.height);        var img = new image();        img.src = "logo.png";        img.onload = function () {            //创建图像画刷,no-repeat,repeat-x,repeat-y,repeat            var pattern = ctx.createpattern(img, "repeat");            ctx.fillstyle = pattern;            ctx.fillrect(0, 0, canvas.width, canvas.height);        }

阴影绘制

        //阴影的x偏移        ctx.shadowofftx = 10;        //阴影的y偏移        ctx.shadowoffty = 10;        //阴影的颜色        ctx.shadowcolor = 'rgba(0, 0, 0, 0.5)';        //阴影的模糊度        ctx.shadowblur = 10;        ctx.fillstyle = 'rgba(255, 0, 0, 0.5)';        ctx.fillrect(100, 100, 100, 100);        ctx.font = "50px sans-rif";        ctx.filltext("我是小可爱",200,100);

区域剪辑

    //保存当前环境    ctx.save();    ctx.arc(300, 100, 200, 0, math.pi*2, true);    //进行区域剪辑    ctx.clip();    ctx.fillstyle = "#f00";    ctx.fillrect(100, 100, 200, 200);    //恢复环境,释放了剪辑区域的作用    ctx.restore();

绘制曲线ctx.arc(x, y, startangle, endangle ,math.pi*2, true)
最后一个参数代表是否是逆时针方向

        //绘制圆弧        ctx.arc(100, 100, 50, 0 ,math.pi*2, true);        ctx.fill();        //二次样条曲线ctx.quadraticcurveto(qcpx,qcpy,qx,qy)        ctx.beginpath();        ctx.moveto(100,355);        ctx.quadraticcurveto(265,145,380,349);        ctx.fill();        //贝塞尔曲线ctx.beziercurveto(cp1x,cp1y,cp2x,cp2y,x,y)        ctx.beginpath();        ctx.moveto(175,375);        ctx.beziercurveto(297,182,468,252,517,380);        ctx.fill();

canvas绘制曲线生成工具
两次贝塞尔曲线:
http://blogs.sitepointstatic.com/examples/tech/canvas-curves/quadratic-curve.html
三次贝塞尔曲线:
http://blogs.sitepointstatic.com/examples/tech/canvas-curves/bezier-curve.html

动画

ctx.clearrect(x, y, width, height) 清除区域,用于重新绘制

        var canvas = document.getelementbyid('mycanvas');        var ctx = canvas.getcontext('2d');        var posx = 0, posy = 0, dir = 1, ismouinrect = fal;        // 确定动画范围        canvas.onmoumove = function(e){            var moux = e.offtx;            var mouy = e.offty;            if(moux > posx && mouy <posx +50 && mouy > posy && mouy < posy+ 50){                ismouinrect = true;            }el{                ismouinrect = fal;            }        }        // 开始动画        tinterval(function() {            if(!ismouinrect){                posx += 10 * dir;            }            //clearrect清空画布的一个矩形区域            ctx.clearrect(0, 0, canvas.width, canvas.height);            ctx.fillrect(posx, posy, 50, 50);            if(posx + 50 >= canvas.width){                dir = -1;            }el if(posx <= 0){                dir = 1;            }        },100);

离屏技术
把canvas(sx,sy)处宽sw,高sy的区域,绘制到(dx,dy)处,并缩放为宽dx,高dh
ctx.drawimage(canvas,sx,sy,sw,sh,dx,dy,dw,dh)

<!doctype html><html lang="en"><head>  <meta chart="utf-8" />  <title>canvas</title>  <style type="text/css">    canvas {      border: 1px solid red;    }    #offcanvas{      display: none;    }  </style></head><body>    <canvas id="mycanvas"  width="600px" height="400px">      您的浏览器不支持canvas    </canvas>    <!--创建离屏canvas-->    <canvas id="offcanvas"  width="600px" height="400px">      您的浏览器不支持canvas    </canvas>    <script  type="text/javascript">        var canvas = document.getelementbyid('mycanvas');        var ctx = canvas.getcontext('2d');        var offcanvas = document.getelementbyid('offcanvas');        var offctx = offcanvas.getcontext('2d');        var posx = 0, posy = 0, dir = 1, ismouinrect = fal;        //把一些复杂的绘画操作,画在离屏canvas上面        var drawalot = function(){            for(var k=0; k<20; k++){                for(var i=0;i<canvas.width;i+=10){                    for(var j=0;j<canvas.height;j+=10){                        offctx.beginpath();                        offctx.arc(i,j,5,0,2*math.pi,true);                        offctx.stroke();                    }                }            }        }        canvas.onmoumove = function(e){            var moux = e.offtx;            var mouy = e.offty;            if(moux > posx && mouy <posx +50 && mouy > posy && mouy < posy + 50){                ismouinrect = true;            }el{                ismouinrect = fal;            }        }        tinterval(function() {            if(!ismouinrect){                posx += 10 * dir;            }            //clearrect清空画布的一个矩形区域            ctx.clearrect(0, 0, canvas.width, canvas.height);            // drawalot();            //真正要用到复杂的绘画的时候,直接从离屏canvas上拷贝过来            ctx.drawimage(offcanvas,0,0,offcanvas.width, offcanvas.height,0,0, canvas.width, canvas.height);            ctx.fillrect(posx, posy, 50, 50);            if(posx + 50 >= canvas.width){                dir = -1;            }el if(posx <= 0){                dir = 1;            }        },100);        drawalot();    </script></body></html>

案例:电子名片生成器

index.html

<!doctype html><html><head>  <meta chart="utf-8" />  <title>电子名片生成器</title>  <link href="style/style.css" rel="stylesheet" /></head><body>  <div class="left-div">    <div class="line">      <input id="name" type="text" placeholder="姓名"/>    </div>    <div class="line">      <input id="address" type="text" placeholder="地址"/>    </div>    <div class="line">      <input id="job" type="text" placeholder="职业"/>    </div>    <div class="line">      <input id="slogan" type="text" placeholder="口号" />    </div>    <div class="line">      <button id="generatebtn">生成名片</button>    </div>  </div>  <div class="right-div">    <canvas id="cardcanvas">      您的浏览器不支持canvas,请升级浏览器    </canvas>    <canvas id="animcanvas">      您的浏览器不支持canvas,请升级浏览器    </canvas>  </div>  <script src="script/main.js"></script></body></html>

style.css

* {  margin: 0;  padding: 0;}html, body {  height: 100%;}.left-div {  width: 30%;  height: 100%;  float: left;  background: #a4a296;}.line {  text-align: center;  margin-top: 30px;}.line:first-child {  margin-top: 200px;}.line span {  color: white;}.line input {  width: 300px;  height: 30px;  border-radius: 15px;  padding-left: 15px;  outline: none;  border: none;}.line button {  width: 100px;  height: 30px;  outline: none;  border: none;  background: #222;  color: #ddd;  cursor: pointer;  position: relative;  border-radius: 15px;}.line button:hover {  background: #000;  color: #fff;}.line button:active {  left: 1px;  top: 1px;}.right-div {  width: 70%;  height: 100%;  float: left;  background: #eee9d3;  text-align: center;  position: relative;}.right-div canvas {  position: absolute;  top: 200px;  left: 50%;  margin-left: -300px;}#cardcanvas {  display: none;}

main.js

// 创建和设置cardcanvas,该canvas作为离屏canvasvar cardcanvas = document.getelementbyid('cardcanvas');var cardctx = cardcanvas.getcontext('2d');cardctx.canvas.width = 600;cardctx.canvas.height = 100;// 加载图片var img = new image();img.src = "images/logo.png";img.onload = function() {  cardctx.drawimage(img, 10, 10);}var generatebtn = document.getelementbyid("generatebtn");generatebtn.onclick = function柴达木沙漠() {  cardctx.clearrect(0, 0, cardctx.canvas.width, cardctx.canvas.height);  // 背景的线性渐变  var lineargradient = cardctx.createlineargradient(0, 0, cardctx.canvas.width, cardctx.canvas.height);  lineargradient.addcolorstop(0.5, 'rgb(0,0,0)');  lineargradient.addcolorstop(1, 'rgb(133,133,133)');  cardctx.fillstyle = lineargradient;  cardctx.fillrect(0, 0, cardctx.canvas.width, cardctx.canvas.height);  // logo图像  cardctx.drawimage(img, 10, 10);  // 获取姓名、地址、职业,绘制,并计算长度  var name = document.getelementbyid("name").value || "请输入姓名";  var address = document.getelementbyid("address").value || "请输入地址";  var job = document.getelementbyid("job").value || "请输入职业";  var namewidth, addresswidth, jobwidth, maxwidth = 0;  cardctx.font = "bold 30px sans-rif";  cardctx.fillstyle = "#fff";  cardctx.filltext(name, 105, 35);  namewidth = cardctx.measuretext(name).width;  cardctx.font = "bold 20px sans-rif";  cardctx.filltext(address, 105, 60);  cardctx.filltext(job, 105, 85);  addresswidth = cardctx.measuretext(address).width;  jobwidth = cardctx.measuretext(job).width;  if(maxwidth < namewidth) {    maxwidth = namewidth;  }  if(maxwidth < addresswidth) {    maxwidth = addresswidth;  }  if(maxwidth < jobwidth) {    maxwidth = jobwidth;  }  // 绘制口号  var slogan = document.getelementbyid("slogan").value || "请输入口号";  cardctx.save();  // 做图形变换  cardctx.rotate(-0.1);  cardctx.translate(0, 50);  // 阴影  cardctx.shadowofftx = 10;  cardctx.shadowoffty = 10;  cardctx.shadowcolor = 'rgba(0, 0, 0, 0.5)';  cardctx.shadowblur = 1.5;  cardctx.fillstyle = "#ddd";  // 计算口号位置  var solganwidth;  solganwidth = cardctx.measuretext(slogan).width;  var offt = (cardctx.canvas.width - 115 - maxwidth - solganwidth) / 2;  cardctx.filltext(slogan, 115 + maxwidth + offt, 50);  // 画曲线  cardctx.beginpath();  cardctx.moveto(115 + maxwidth + offt, 70);  cardctx.quadraticcurveto(115 + maxwidth + offt, 50, 115 + solganwidth + maxwidth + offt, 60);  cardctx.strokestyle = "#ddd";  cardctx.stroke();  cardctx.restore();}// 触发click事件generatebtn.click();// 创建和设置animcanvas,该canvas才是真正的显示var animcanvas = document.getelementbyid('animcanvas');var animctx = animcanvas.getcontext('2d');animctx.canvas.width = 600;animctx.canvas.height = 100;var circles = [];tinterval(function() {  // 擦出画布  animctx.clearrect(0, 0, animctx.canvas.width, animctx.canvas.height);  // 把离屏canvas的内容画进来  animctx.drawimage(cardcanvas, 0, 0, animctx.canvas.width, animctx.canvas.height,    0, 0, cardctx.canvas.width, cardctx.canvas.height华人最多的国家);  // 绘制下落的圆形  for(var i=0; i<=10; i++) {    if(!circles[i]) {      circles[i] = {};      circles[i].radius = math.floor(math.random() * 5) + 1;      circles[i].y = - circles[i].radius - math.floor(math.random() * 10);      circles[i].x = i * 60 + math.floor(math.random() * 10) - 5;      circles[i].vy = math.floor(math.random() * 5) + 1;    }    animctx.beginpath();    animctx.arc(circles[i].x, circles[i].y, circles[i].radius, 0, math.pi * 2);    animctx.fillstyle = "rgba(255, 255, 255, 0.5)";    animctx.fill();    circles[i].y = circles[i].y + circles[i].vy;    if(circles[i].y > animctx.canvas.height + circles[i].radius * 2) {      circles[i] = undefined;    }  }}, 100);

案例:山中明月风景图

<!doctype html><html><head>    <meta chart="utf-8" />    <title>document</title>    <style>        canvas{background-color:#000;opacity:0.7}    </style></head><body>    <canvas id="canvas" width="720px" height="600px">您的浏览器不支持canvas</canvas>    <script>        var canvas=document.getelementbyid("canvas");        var context=canvas.getcontext("2d");   积贫积弱的意思     // 月亮绘制        context.shadowofftx=10;        context.shadowoffty=10;        context.shadowblur=5;        context.shadowcolor='rgba(255,255,255,0.2)';        context.fillstyle='yellow';        context.arc(100,100,40,0,math.pi*2,true);        context.fill();        // 文字绘制        context.beginpath();        var str='山高月小';        context.font='50px 宋体';        context.fillstyle='#fff';        context.shadowcolor='rgba(255,255,255,0.4)';        context.filltext(str,400,200);        // 山峰绘制        context.beginpath();        context.linewidth=5;        context.strokestyle='lightblue';        context.moveto(14, 600);        context.quadraticcurveto(60, 193, 123, 600);        context.stroke();        context.beginpath();        context.moveto(298, 600);        context.beziercurveto(81, 193, 73, 691, 100, 600);        context.stroke();        context.beginpath();        context.moveto(500, 600);        context.beziercurveto(451, 34, 273, 361, 298, 600);        context.stroke();        context.beginpath();        context.moveto(452, 600);        context.beziercurveto(569, 210, 695, 426, 715, 600);        context.stroke();    </script></body></html>

本文发布于:2023-04-03 10:01:21,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/22b3cafaf8573c70cd0ae0cc5d7dea3f.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:HTML5 canvas绘图基础(电子名片生成器源码).doc

本文 PDF 下载地址:HTML5 canvas绘图基础(电子名片生成器源码).pdf

上一篇:十二生肖相冲相克表,生肖相冲表
下一篇:返回列表
标签:您的   样式   不支持   图像
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图