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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章