成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > canvas簡單連線動畫的實(shí)現(xiàn)代碼

canvas簡單連線動畫的實(shí)現(xiàn)代碼

熱門標(biāo)簽:地圖標(biāo)注軟件打印出來 惡搞電話機(jī)器人 黃石ai電銷機(jī)器人呼叫中心 高德地圖標(biāo)注商戶怎么標(biāo) 欣鼎電銷機(jī)器人 效果 智能電銷機(jī)器人被禁用了么 如何查看地圖標(biāo)注 電話機(jī)器人技術(shù) ok電銷機(jī)器人

前言:canvas動畫入門系列之簡單連線動畫。雖然簡單,但連線動畫應(yīng)用場景還挺多,因此做了個小demo,一通百通。

step1:繪制點(diǎn)

首先創(chuàng)建個標(biāo)簽<canvas id="canvas"></canvas>
設(shè)置幾個點(diǎn)的坐標(biāo)

   const points = [
        [200, 100], //上
        [300, 200], //右
        [100, 200], //左
        [200, 100], //上
        [200, 300], //下
        [100, 200], //左
        [300, 200], //右
        [200, 300]
      ];
      const canvas = document.querySelector("canvas");
      const ctx = canvas.getContext("2d");

然后把點(diǎn)給畫出來

points.forEach(([x, y]) => {
          drawDot(x, y);
        });
function drawDot(x1, y1, r) {
          ctx.save();
          ctx.beginPath(); //不寫會和線連起來
          ctx.fillStyle = "red";
          //繪制成矩形
          ctx.arc(x1, y1, r ? r : 2, 0, 2 * Math.PI);
          ctx.fill();
          ctx.restore();
        }

step2:繪制線條

我們封裝一個方法,傳入起點(diǎn)終點(diǎn),繪制一根線條

function drawLine(x1, y1, x2, y2) {
          ctx.save();
          ctx.beginPath(); //不寫每次都會重繪上次的線
          ctx.lineCap = "round";
          ctx.lineJoin = "round";
          var grd = ctx.createLinearGradient(x1, y1, x2, y2);

          ctx.moveTo(x1, y1);
          ctx.lineTo(x2, y2);
          ctx.closePath();
          ctx.strokeStyle = "rgba(255,255,255,1)";
          ctx.stroke();
          ctx.restore();
        }

step3:線條動畫

這里面需要計(jì)算兩點(diǎn)之間的斜率,然后x坐標(biāo)每次挪動±1單位,已知斜率和x偏移,即可計(jì)算出y的偏移。值得注意的是,這個坐標(biāo)系和數(shù)學(xué)中的xy坐標(biāo)系有點(diǎn)不一樣,y軸是反的。然后可以引入額外的參數(shù)speed控制速度

function lineMove(points) {
          if (points.length < 2) {
              
            return;
          }
          const [[x1, y1], [x2, y2]] = points;
          let dx = x2 - x1;
          let dy = y2 - y1;
          if (Math.abs(dx) < 1 && Math.abs(dy) < 1) {
            points = points.slice(1);
            lineMove(points);
            return;
          }
          let x = x1,
            y = y1; //線條繪制過程中的終點(diǎn)
          if (dx === 0) {
            (x = x2), (y += (speed * dy) / Math.abs(dy));
          } else if (dy === 0) {
            x += (speed * dx) / Math.abs(dx);
            y = y2;
          } else if (Math.abs(dx) >= 1) {
            let rate = dy / dx;
            x += (speed * dx) / Math.abs(dx);
            y += (speed * rate * dx) / Math.abs(dx);
          }
          drawLine(x1, y1, x, y);
          points[0] = [x, y];
          window.requestAnimationFrame(function() {
            lineMove(points);
          });
        }

主要代碼就這么多,先看效果

完整代碼

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <meta http-equiv="X-UA-Compatible" content="ie=edge" />
  <title>canvas-連線動畫</title>
</head>

<body>
  <canvas id="canvas" width="400" height="400"></canvas>
  <script>
    //起點(diǎn):10,20 終點(diǎn):150,200
    const points = [
      [200, 100], //上
      [300, 200], //右
      [100, 200], //左
      [200, 100], //上
      [200, 300], //下
      [100, 200], //左
      [300, 200], //右
      [200, 300]
    ];
    const canvas = document.querySelector("canvas");
    const ctx = canvas.getContext("2d");
    // const img = new Image();
    const speed = 10; //速度
    // img.onload = function() {
    // canvas.width = img.width;
    // canvas.height = img.height;
    animate(ctx);
    // };

    // img.src = "./imgs/demo.png";
    function animate(ctx) {
      // ctx.drawImage(img, 0, 0);
      ctx.fillRect(0, 0, canvas.width, canvas.height);
      points.forEach(([x, y]) => {
        drawDot(x, y);
      });
      lineMove(points);
    }
    function lineMove(points) {
      if (points.length < 2) {
        return;
      }
      const [[x1, y1], [x2, y2]] = points;
      let dx = x2 - x1;
      let dy = y2 - y1;
      if (Math.abs(dx) < 1 && Math.abs(dy) < 1) {
        points = points.slice(1);
        lineMove(points);
        return;
      }
      let x = x1,
        y = y1; //線條繪制過程中的終點(diǎn)
      if (dx === 0) {
        (x = x2), (y += (speed * dy) / Math.abs(dy));
      } else if (dy === 0) {
        x += (speed * dx) / Math.abs(dx);
        y = y2;
      } else if (Math.abs(dx) >= 1) {
        let rate = dy / dx;
        x += (speed * dx) / Math.abs(dx);
        y += (speed * rate * dx) / Math.abs(dx);
      }
      drawLine(x1, y1, x, y);
      points[0] = [x, y];
      window.requestAnimationFrame(function () {
        lineMove(points);
      });
    }

    function drawLine(x1, y1, x2, y2) {
      ctx.save();
      ctx.beginPath(); //不寫每次都會重繪上次的線
      ctx.lineCap = "round";
      ctx.lineJoin = "round";
      var grd = ctx.createLinearGradient(x1, y1, x2, y2);

      ctx.moveTo(x1, y1);
      ctx.lineTo(x2, y2);
      ctx.closePath();
      ctx.strokeStyle = "rgba(255,255,255,1)";
      ctx.stroke();
      ctx.restore();
    }

    function drawDot(x1, y1, r) {
      ctx.save();
      ctx.beginPath(); //不寫會和線連起來
      ctx.fillStyle = "red";
      //繪制成矩形
      ctx.arc(x1, y1, r ? r : 2, 0, 2 * Math.PI);
      ctx.fill();
      ctx.restore();
    }
  </script>
</body>

</html>

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

標(biāo)簽:中山 赤峰 萍鄉(xiāng) 聊城 金昌 阿壩 盤錦 綏化

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《canvas簡單連線動畫的實(shí)現(xiàn)代碼》,本文關(guān)鍵詞  canvas,簡單,連線,動,畫的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《canvas簡單連線動畫的實(shí)現(xiàn)代碼》相關(guān)的同類信息!
  • 本頁收集關(guān)于canvas簡單連線動畫的實(shí)現(xiàn)代碼的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    国产成人综合自拍| 黄色污网站在线观看| 在线免费国产视频| av丝袜天堂网| 在线观看免费中文字幕| 成人另类视频| 美女精品视频一区| 国产一区三区在线播放| 国精产品一区一区二区三区mba| 国产极品美女在线| 欧美另类69xxxx| 一区视频免费观看| 日韩精品一二三四区| gogogo影视剧免费观看在线观看| 成人在线免费观看一区| 国产精品日本一区二区不卡视频| 中文字幕免费看| japonensisjava老师可播放| 亚洲精品短视频| 少妇视频一区| 国产麻豆视频精品| jiujiure精品视频播放| 精品香蕉在线观看视频一| 超碰97人人射妻| 欧美精品一区男女天堂| 最近免费中文字幕mv视频| 蜜桃传媒视频麻豆第一区免费观看| 国产美女裸体无遮挡免费视频| 亚洲日韩成人| 中文字幕日本不卡| 91精品在线一区| 91短视频版在线观看www免费| 日韩福利视频网| 在线精品一区二区三区| 久久综合香蕉| 日韩视频免费观看高清在线视频| jizzjizz中国精品麻豆| 国产精品国产三级国产专区53| 亚洲手机成人高清视频| 日韩欧美黄色片| 亚洲第一精品夜夜躁人人爽| av伦理在线| 欧美中文字幕久久| 热久久天天拍国产| 精品夜夜嗨av一区二区三区| 久久伊人一区二区| 国产日产亚洲精品系列| 超免费在线视频| 久久久在线视频| 男生女生差差差的视频在线观看| 国产精品边吃奶边做爽| 一区二区三区国产| 精品国产乱码91久久久久久网站| 一区二区三区精品久久久| 国产成人福利短视频app| 三上悠亚在线观看视频| 女生裸体视频一区二区三区| 国产美女极品在线| 在线黄色国产电影| 黄色网址在线免费看| 日本欧美精品在线| 超碰精品在线观看| 国产精品日产欧美久久久久| 一区二区三区导航| 国产成人精品网站| 91超碰在线电影| 91精品久久久久久综合五月天| 亚洲综合免费视频| 欧美精品tushy高清| 无码人妻精品一区二区三区温州| 9.1片黄在线观看| 欧美毛片又粗又长又大| 欧美一区二区三区四区在线| 疯狂做受xxxⅹ高潮视频免费| 色网在线视频| 国产一区二区三区亚洲| 青娱乐国产91| 黄网视频在线观看| 日韩理论片久久| 亚洲一区亚洲二区| 欧美精品在线网站| 2019中文字幕在线免费观看| 日日摸日日碰夜夜爽av| 国产福利电影| 国产成人免费| 黄色三级高清在线播放| 韩国三级hd两男一女| 丝袜亚洲精品中文字幕一区| 亚洲精品欧美在线| 亚洲视频自拍偷拍| www.就去干.com| 四虎影院成人在线观看| 国产精品成人在线视频| 国产精品xxx电影| 欧美激情99| 久久精品国产综合| 福利片在线一区二区| 欧美日韩国产一二三区| 亚洲第一狼人社区| 国内a∨免费播放| 91中文字幕在线播放| 日本黄色动态图| 日本高清不卡一区二区三| 麻豆自创视频在线观看| 欧美三级三级三级爽爽爽| 成人黄色免费片| 99国产精品免费视频| 99国产精品国产精品毛片| 日本肉肉一区| 国产精品18久久久久久首页狼| 亚洲电影一区二区三区| 亚洲色图国产精品| 精品人妻无码一区二区三区换脸| 黄色小视频免费看| 午夜国产福利一区二区| 99re在线视频免费观看| 日韩精品久久| 国产99在线|中文| 日韩女优在线视频| 欧美毛片免费观看| 熟妇高潮一区二区三区| 久久奇米777| 成人a在线观看| 久播影院第一理论片| 亚洲综合伊人久久| 一区二区三区在线免费播放| 草莓污污视频在线观看| 五月婷婷综合在线| 99re这里有精品| 韩日在线播放| 欧美高清videos高潮hd| 国产精品一区二区三区免费| 国产一区二区色| 无码人妻精品一区二区三区夜夜嗨| 99爱免费视频| 自拍欧美一区| 精品成在人线av无码免费看| 又长又粗又大又爽| 先锋影音av资源网| 永久免费毛片在线播放| 国产一级在线观看| 欧美一区二区三区成人| 欧美日韩国产传媒| 黄色短视频在线观看| 1024精品视频| 韩国一区二区在线观看| 人妻少妇精品无码专区二区| 免费国产一区二区| 樱桃视频免费看| 欧美一区少妇| 最新天堂中文在线| 国产成人免费在线视频| 久久久影院一区二区三区| 国产精品麻豆一区二区| 最近2019中文字幕mv免费看| 国产深喉视频一区二区| 日本成人性视频| 久久电影一区| 91深夜福利| 最新四虎影在线在永久观看www| 全部免费的黄色毛片| 先锋影音av资源网| 欧美日韩亚洲色图| 天天操天天干天天操| av av在线| 丝袜美腿玉足3d专区一区| 亚州欧美精品suv| 91久久国产综合久久91猫猫| 91美女精品福利| 国产又黄又爽又猛免费app| 蜜桃福利午夜精品一区| wwwav国产| 中文字幕免费播放| 亚洲国产精选| 国产精品一级视频| 亚洲视频电影在线| 国产精品国产对白熟妇| 国产一二在线观看| 国产伦子伦对白视频| 欧美日韩国产色综合一二三四| 99热在线观看免费精品| 国产精品一区二区三区在线| 四虎国产精品免费久久5151| 亚洲成人精品综合在线| 黄页网址大全免费观看| 女人18毛片水真多18精品| 亚洲精品在线观看av| 美女搡bbb又爽又猛又黄www| 久久久久北条麻妃免费看| 国产精品天天狠天天看| 亚洲成人人体| 色影院视频在线| 色妇色综合久久夜夜| 伊人国产在线看一| 色婷婷精品久久二区二区蜜臀av| 免费污视频在线观看| 99re这里只有精品视频首页| 九色在线视频观看| 中文字幕乱码日本亚洲一区二区| 天天操夜夜操天天射| 婷婷综合亚洲| 99国产揄拍国产精品| 乱人伦视频在线| 黄页网站大全一区二区| 欧美xx在线| 日韩av第一页| 91偷拍精品一区二区三区| 成人短视频在线观看免费| 麻豆av资源| 亚洲av无码一区二区三区观看| 91精品久久久久久粉嫩| 国产在线电影| 成人性视频免费网站| 麻豆一区区三区四区产品精品蜜桃| 久久久9色精品国产一区二区三区| 久久精品人人做人人爽电影蜜月| 日本在线免费网| 国产精品久久久久久久久男| 久久久久久久中文| 在线电影福利片| 一区二区三区在线观看免费视频| 国产在线精品一区二区夜色| 久草视频免费在线播放| 成人av资源在线观看| 香蕉成人伊视频在线观看| 精品一区二区在线欧美日韩| 国产性猛交普通话对白| 久久久久久**毛片大全| 手机在线理论电影| 亚洲愉拍自拍另类高清精品| 91福利免费观看| 亚洲精华国产精华精华液网站| 久久天天躁狠狠躁夜夜躁2014| 国产精品久久久久久久天堂| 久久亚洲国产成人精品性色| 男人天堂手机在线观看| 久久看人人爽人人| 欧美日韩黄色一区二区| 欧美日韩国产不卡| av激情网站| 亚洲精品国产综合久久| 五月久久久综合一区二区小说| 91丨九色丨国产丨porny| 伊人久久五月天| www.一区二区三区| 欧美黄色一级生活片| 亚洲精品在线免费观看视频| 四虎影院成人在线观看| 91沈先生播放一区二区| 欧美成人久久久| 中文字幕一区在线| 亚洲一区二区三区乱码aⅴ蜜桃女| 人人人妻人人澡人人爽欧美一区| 中文字幕日韩经典| 欧美高清视频在线播放| 中文字幕av免费在线观看| 二区三区精品| 99这里只有久久精品视频| 天天夜碰日日摸日日澡性色av| 国产精品毛片aⅴ一区二区三区| 成人网ww555视频免费看| 免费成人av网站| 一级二级三级在线观看| 欧美日韩一区小说| 中文字幕在线看视频国产欧美在线看完整| 国精产品一区一区三区mba视频| 欧美午夜性色大片在线观看| 伊人色综合久久天天五月婷| 成人教育av在线| 一级 黄 色 片一| 国模 一区 二区 三区| 亚洲区成人777777精品| 青青国产视频| 老司机aⅴ毛片免费观看| 综合国产精品| 搞av.com| 色成人在线视频| 精品一区二区三区电影| 四季av一区二区凹凸精品| av中文字幕亚洲| www一区二区www免费| 黑森林国产精品av| 姑娘第5集在线观看免费好剧| 欧美日产一区二区三区在线观看| 国产免费1000拍拍拍| 亚洲二区在线播放| 国产有码在线一区二区视频| 伊人男人综合视频网| 成人一级片网站| 亚洲欧美日韩图片| 婷婷综合激情网| 亚洲欧洲制服丝袜| 精品国产91乱码一区二区三区| 国产麻豆一区二区三区精品| 久久免费精品视频在这里| 最近中文字幕在线6| 伊人久久综合一区二区| 99国产精品国产精品毛片| 国产精品乱码一区二区三区| 91精品久久久久久久99蜜桃| 久久久伦理片| 欧美极度另类videos高清| 天天操天天擦| 精品在线播放免费| 欧美一区二区激情视频| 六月婷婷在线视频| 欧美国产激情| 五月综合激情网| 精品国产区一区二区三区在线观看| av女优在线播放| 公共露出暴露狂另类av| 久久天堂av综合合色| 欧美一区国产二区| 欧美特黄一级大片| 深夜福利91大全| 亚洲综合久久网| 国产精品久久久久久久久久久久久久久久久| 92精品国产成人观看免费| 久久久www成人免费精品| 亚洲蜜桃精久久久久久久| 国产成人精品无码播放| 国产精品第一页在线观看| 日韩人妻精品中文字幕| 日韩在线第七页| 欧美人伦禁忌dvd放荡欲情| 无码精品一区二区三区在线| 国产日韩欧美一区二区三区乱码| 国产欧美欧洲|