Web前端-html 5—CANVAS、环形进度条

环形进度条

   var mycanvas = document.querySelector("#tag");
    var ctx = mycanvas.getContext("2d");
    ctx.lineWidth = 20;
    ctx.lineCap = "round";
    ctx.textAlign = "center";
    ctx.textBaseline = "middle";
    ctx.font = "30px '宋体'";
    var num  = 0;

    //问题: 当 进度条转360度的时候  要清除定时器 不在会值文本
    var time = setInterval(function () {

        // if(num==360){
        //     clearInterval(time)
        // }


        ctx.beginPath();
        ctx.arc(250, 250, 200, 0, Math.PI/180*(num++));
        ctx.stroke();
        ctx.beginPath();
        ctx.clearRect(200,200,100,100);
        ctx.fillText(num , 250,250);
        console.log(num);
        if(num==360){
                clearInterval(time)
            }


        }, 10)

canvas线性渐变

tx.createLinearGradient(x0,y0,x1,y1);
//添加的是线性的渐变
//1,创建一条具有渐变的线   第一个点的座标   第二个点座标
//没有角度,两点确定一条直线此时就已经绘制出现了角度
// ctx.createLinearGradient(x0,y0,x1,y1);
var lg=ctx.createLinearGradient(0,0,500,0);
//2给这条渐变线上色  0~1   1相当于100%
lg.addColorStop(0,"#f00");
lg.addColorStop(.5,"#f0f");
lg.addColorStop(1,"#ff0");

//3将该渐变线设置给对应的样式
ctx.fillStyle = lg;
ctx.fillRect(0, 0, 500, 500);

canvas径向渐变

rg=ctx.createRadialGradient(x,y,r,x1,y1,r1);

    var mycanvas = document.querySelector("canvas");
    var ctx = mycanvas.getContext("2d");

//    径向渐变  内圆弧 到外圆弧之间的颜色递变
    var rg=ctx.createRadialGradient(250,250,100,250,250,200);  //同心圆
//     var rg=ctx.createRadialGradient(20,250,10,250,250,200);
    rg.addColorStop(0,"#f00");
    rg.addColorStop(1,"#0ff");

    ctx.fillStyle = rg;
    ctx.fillRect(0,0,500,500);

无渐变色

     var lg = ctx.createLinearGradient(0,0,0,500);
      lg.addColorStop(.5,"#f00");
      lg.addColorStop(.5,"#0ff");
      ctx.fillStyle = lg;
      ctx.fillRect(0,0,500,500);

阴影效果

添加阴影效果 没有有连写  阴影色   模糊度   偏移量 x,y
<script>
    var mycanvas = document.querySelector("canvas");
    var ctx = mycanvas.getContext("2d");

    //添加阴影效果 没有有连写  阴影色   模糊度   偏移量 x,y
     ctx.shadowColor = "yellow";
     ctx.shadowBlur = 5;
     ctx.shadowOffsetX = 10;
     ctx.shadowOffsetY = 8;


    ctx.fillStyle = "cyan";
    // ctx.fillRect(200,200,100,150);
    ctx.font = "bold 50px '宋体'";
    ctx.fillText(" 你  好  ",100,100);
</script>

图片的使用

图片的使用          从canvas 那里开始会值图片
在使用图资源的时候有可能图片资源根本就没有加载成功,那么此时你在绘制的时候则会没有将图片绘制成功,在使用图片的时候一定要确保图片资源已经加载成功之后再绘制

1、   ctx.drawImage(图片的对象,x,y)

页面中有img

var myimg = document.querySelector("img");
myimg.onload = function () {
      ctx.drawImage(myimg,0,0);
  };

 页面没有就创建

创建一个image对象  并且给该image对象 添加资源

  //创建一个image对象  并且给该image对象 添加资源
     var  myimg = new Image();
     myimg.src = "a.jpg";

     console.log(myimg);


     myimg.onload = function () {
          ctx.drawImage(myimg,0,0);
      };

2、ctx.drawImage(图片对象,x,y,w,h);  可以调节大小

等比缩放  100/x=50/y

设置绘制的图形大小    img的W/100 = img的H/?    ? =
  var  myimg = new Image();
    myimg.src = "lmx.jpg";
    myimg.onload = function () {
         // ctx.drawImage(myimg,0,0,100,500); //有可能会让图片失真变形
         ctx.drawImage(myimg,0,0,100,500);//让图片等比缩放
     };

 图片剪切

图片资源   原图截取点 (x,y) 截图原图的大小(w,h),在canvas的那个点开始绘制(x,y) ,在画布上会值多大(w,h)
    var mycanvas = document.querySelector("canvas");
     var ctx = mycanvas.getContext("2d");

//    绘制图片到canvas上
      var img = new Image();
      // img.src = "a.jpg";
      img.src = "b.png";
//      确保图片已经被加载
      img.onload = function () {
          //此时的this ===img对象  才能这么写
          // ctx.drawImage(this,100,100);
          // ctx.drawImage(img,100,100);

          // ctx.drawImage(this,0,0,40,65,100,100,40,65);
          // ctx.drawImage(this,0,0,160,65,100,100,40,65);
          // ctx.drawImage(this,0,0,160,65,100,100,160,65);
          ctx.drawImage(this,0,0,160,65,100,100,320,130);

      }

 帧动画

<body>
<canvas width="500" height="500" style="border: 1px solid #000;">请更新您的浏览器</canvas>


<script>
     var mycanvas = document.querySelector("canvas");
     var ctx = mycanvas.getContext("2d");

      var img = new Image();
      img.src = "b.png";
      img.onload = function () {
          // ctx.drawImage(this,0,0,40,65,100,100,80,130)
          var count = 0;
          // (count++)*40
          var tiems = setInterval(function () {
              // console.log(this);
              //注意此时就不能再用this 因为this 此时代表的是windows对象
              // ctx.drawImage(this,0,0,40,65,100,100,80,130)

              //在绘制之前要先清除数据
              // ctx.clearRect(0,0,500,500);
              // ctx.drawImage(img,(count++)*40,0,40,65,100,100,80,130)

          //    当想要获取一个到另一个数之间重复的时候  %
          //     console.log((count++) % 4);
              ctx.clearRect(0,0,500,500);
              var tag=(count++) % 4;
              ctx.drawImage(img,tag*40,0,40,65,100,50+count,80,130)
          },10)
      }
</script>
</body>

canvas位移

定义转换  将0,0定平移到哪里
     ctx.translate(x,y)
     ctx.translate(200,200);
  ctx.translate(200,200);
    ctx.beginPath();
    ctx.fillStyle = "red";
    ctx.fillRect(0, 0, 150, 100);
    ctx.beginPath();
    ctx.fillStyle = "rgba(0,255,0,0.5)";
    ctx.fillRect(-200, -200, 150, 100);

canvas缩放

ctx.scale(x,y);
ctx.scale(2,1);
 ctx.scale(2,1);
    ctx.strokeStyle = "yellow";
    ctx.moveTo(10, 10);
    ctx.lineTo(150, 10);
    ctx.stroke();
    ctx.fillStyle = "rgba(255,0,0,0.5)";
    ctx.fillRect(20, 20, 150, 100);

canvas旋转

ctx.rotate(-Math.PI/180*30);
在0,0 将x轴y轴旋转
<canvas width="1000" height="600" style="border: 1px solid #000;">请更新您的浏览器</canvas>
<script>
    var mycanvas = document.querySelector("canvas");
    var ctx = mycanvas.getContext("2d");

    ctx.beginPath();
    ctx.fillStyle = "rgba(255,0,0,0.5)";
    ctx.fillRect(20, 20, 150, 100);


    ctx.rotate(-Math.PI/180*30);
    ctx.beginPath();
    ctx.fillStyle = "rgba(0,255,0,0.2)";
    ctx.fillRect(20, 20, 170, 100);
</script>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章