校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > html5如何在Canvas中實現自定義路徑動畫示例

html5如何在Canvas中實現自定義路徑動畫示例

熱門標簽:云南大理400電話申請官方 電銷機器人電話用什么卡 江蘇智能電銷機器人哪家好 四川點撥外呼系統 黃島區地圖標注 當涂高德地圖標注 南寧點撥外呼系統哪家公司做的好 成都智能外呼系統平臺 鎮江智能外呼系統有效果嗎

在最近的項目中筆者需要做一個新需求:在canvas中實現自定義的路徑動畫。這里所謂的自定義路徑不單單包括一條直線,也許是多條直線的運動組合,甚至還包含了貝塞爾曲線,因此,這個動畫也許是下面這個樣子的:

那么如何才能在canvas中實現這種動畫效果呢?其實很簡單,對于路徑的處理svg非常在行,因此在canvas中實現自定義路徑動畫,我們需要借助svg的力量。

創建Path

制作動畫前,先要拿到動畫的路徑,對此我們可以直接使用svg的path定義規則,比如我們定義了一條較為復雜的路徑(它到底長什么樣大家可以自己試試,這里就不展示了),然后,我們需要將定義好的路徑導入進一個新生成的path元素中(我們只是借助svg的api,因此并不需要將其插到頁面內)

const path = 'M0,0 C8,33.90861 25.90861,16 48,16 C70.09139,16 88,33.90861 88,56 C88,78.09139 105.90861,92 128,92 C150.09139,92 160,72 160,56 C160,40 148,24 128,24 C108,24 96,40 96,56 C96,72 105.90861,92 128,92 C154,93 168,78 168,56 C168,33.90861 185.90861,16 208,16 C230.09139,16 248,33.90861 248,56 C248,78.09139 230.09139,96 208,96 L48,96 C25.90861,96 8,78.09139 8,56 Z';

const pathElement = document.createElementNS('http://www.w3.org/2000/svg',"path"); 
pathElement.setAttributeNS(null, 'd', path);

getTotalLength與getPointAtLength

SVGPathElement提供的這兩個api很關鍵,可以說它是實現路徑動畫的最為核心的地方(在svg內實現自定義路徑動畫一般也是通過這兩個api去解決)詳情請戳:SVGPathElement MDN

getTotalLength方法可以獲取SVGPathElement的總長度

getPointAtLength方法,傳入一個長度x,將返回距離SVGPathElement起點的長度為x的終點坐標。

利用這兩個api,通過循環的方式不斷去更新canvas內所繪制的圖形坐標,即可實現路徑動畫:

const length = pathElement.getTotalLength();
const duration = 1000; // 動畫總時長
const interval = length / duration;
const canvas = document.querySelector('canvas');
const context = canvas.getContext('2d');
let time = 0, step = 0; 

const timer = setInterval(function() {
  if (time <= duration) {
    const x = parseInt(pathElement.getPointAtLength(step).x);
    const y = parseInt(pathElement.getPointAtLength(step).y);
    move(x, y);  // 更新canvas所繪制圖形的坐標
    step++;
  } else {
    clearInterval(timer)
  }
}, interval);

function move(x, y) {
   context.clearRect(0, 0, canvas.width, canvas.height);
   context.beginPath();
   context.arc(x, y, 25, 0, Math.PI*2, true);
   context.fillStyle = '#f0f';
   context.fill();
   context.closePath();
}

最后,我們把它封裝一下,即可實現一個在canvas中實現自定義動畫的簡易函數啦:

function customizePath(path, func) {
    const pathElement = document.createElementNS('http://www.w3.org/2000/svg',"path"); 
    pathElement.setAttributeNS(null, 'd', path);
      const length = pathElement.getTotalLength();
    const duration = 1000; 
    const interval = length / duration;
    let time = 0, step = 0; 
  
      const timer = setInterval(function() {
        if (time <= duration) {
              const x = parseInt(pathElement.getPointAtLength(step).x);
              const y = parseInt(pathElement.getPointAtLength(step).y);
              func(x, y);
              step++;
        } else {
              clearInterval(timer)
        }
     }, interval);
}

const path = 'M0,0 C8,33.90861 25.90861,16 48,16 C70.09139,16 88,33.90861 88,56 C88,78.09139 105.90861,92 128,92 C150.09139,92 160,72 160,56 C160,40 148,24 128,24 C108,24 96,40 96,56 C96,72 105.90861,92 128,92 C154,93 168,78 168,56 C168,33.90861 185.90861,16 208,16 C230.09139,16 248,33.90861 248,56 C248,78.09139 230.09139,96 208,96 L48,96 C25.90861,96 8,78.09139 8,56 Z';
const canvas = document.querySelector('canvas');
const context = canvas.getContext('2d');
function move(x, y) {
      context.clearRect(0, 0, canvas.width, canvas.height);
    context.beginPath();
      context.arc(x, y, 25, 0, Math.PI*2, true);
      context.fillStyle = '#f0f';
      context.fill();
      context.closePath();
}
customizePath(path, move);

實現思路大致如上所述,然而這并不是最終成果。當我們決定要在canvas制作自定義路徑動畫時,我們不僅要考慮如何實現,更要考慮性能優化,比如在這個實現思路中,我們是否可以減少不必要的渲染次數?幀率如何控制達到最優?等等。

雖然它們并不在這篇文章的討論范圍中,當也應當值得我們思考。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:廣西 南京 十堰 西寧 咸寧 淮安 酒泉 佳木斯

巨人網絡通訊聲明:本文標題《html5如何在Canvas中實現自定義路徑動畫示例》,本文關鍵詞  html5,如,何在,Canvas,中,實現,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《html5如何在Canvas中實現自定義路徑動畫示例》相關的同類信息!
  • 本頁收集關于html5如何在Canvas中實現自定義路徑動畫示例的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    在线欧美日韩精品| 91成人免费在线| 久久99精品久久久久婷婷| 亚洲一区二区四区蜜桃| 一区二区三区精品在线观看| 国产精品久久久久久久久免费丝袜| 国产日产亚洲精品系列| 国产亚洲一区二区三区四区| 中文字幕精品在线不卡| 国产精品福利一区二区| 亚洲欧洲成人av每日更新| 最新高清无码专区| 一区二区三区日韩在线观看| 天涯成人国产亚洲精品一区av| 一个色综合av| 免费人成网站在线观看欧美高清| 久久国产精品第一页| 国产不卡高清在线观看视频| 91浏览器打开| 欧美肥妇free| 日本一区二区免费在线| 亚洲色大成网站www久久九九| 亚洲精品中文在线观看| 美女诱惑一区二区| 国产成人免费在线| 欧美天堂一区二区三区| 日韩久久久精品| 国产精品久久久久久妇女6080| 一区二区在线观看av| 人人精品人人爱| 丁香六月久久综合狠狠色| 在线亚洲一区二区| 久久久久久一级片| 亚洲精品欧美二区三区中文字幕| 丝袜诱惑亚洲看片| 国产91精品免费| 欧美理论电影在线| 国产精品系列在线| 日本aⅴ免费视频一区二区三区| 成人久久久精品乱码一区二区三区 | 欧美老肥妇做.爰bbww视频| 欧美一级高清片在线观看| 亚洲欧美怡红院| 精品一区二区三区日韩| 欧美午夜精品久久久久久超碰| 欧美精品一区二区三区蜜桃视频 | www.亚洲色图| 欧美一区二区视频在线观看| 欧美精彩视频一区二区三区| 日韩精品乱码av一区二区| 成人国产精品免费网站| 精品日韩99亚洲| 天堂一区二区在线| a美女胸又www黄视频久久| 欧美tickling挠脚心丨vk| 亚洲午夜私人影院| 99国产精品久久| 欧美激情中文字幕一区二区| 美女性感视频久久| 欧美夫妻性生活| 亚洲一区二区视频在线观看| 色综合欧美在线| 国产精品电影一区二区三区| 极品少妇xxxx偷拍精品少妇| 欧美一区二区三区系列电影| 洋洋av久久久久久久一区| 暴力调教一区二区三区| 欧美高清在线精品一区| 国产在线观看免费一区| 日韩一区二区三区av| 日本三级亚洲精品| 欧美一级片免费看| 天涯成人国产亚洲精品一区av| 欧美亚一区二区| 一区二区三区小说| 在线精品视频免费播放| 一区二区三区精密机械公司| 色先锋资源久久综合| 亚洲色图欧洲色图| 欧美伊人久久大香线蕉综合69 | 国产精品国产三级国产普通话三级| 经典三级视频一区| 国产日韩欧美精品综合| 国产91精品在线观看| 中文字幕在线不卡国产视频| 一本到三区不卡视频| 亚洲精品国产精华液| 欧美丝袜丝nylons| 蜜桃视频一区二区三区| 久久久www成人免费毛片麻豆| 国产精品18久久久久久久久久久久 | 中文在线免费一区三区高中清不卡| 国产一区二区看久久| 国产免费观看久久| 91丨porny丨蝌蚪视频| 一区二区三区日本| 日韩欧美激情四射| 高清国产一区二区| 一区二区三区四区av| 欧美丰满少妇xxxbbb| 国产永久精品大片wwwapp| 国产精品麻豆欧美日韩ww| 色偷偷久久人人79超碰人人澡| 亚洲妇熟xx妇色黄| 久久综合中文字幕| 91玉足脚交白嫩脚丫在线播放| 亚洲va天堂va国产va久| 精品区一区二区| 99精品热视频| 麻豆91精品视频| 亚洲天堂2014| 精品少妇一区二区三区在线视频| 国产精品亚洲一区二区三区在线 | 色88888久久久久久影院按摩 | 欧美精品一区二区在线播放 | 国模大尺度一区二区三区| 国产精品美日韩| 51久久夜色精品国产麻豆| 风间由美一区二区三区在线观看 | 在线不卡的av| 不卡欧美aaaaa| 美女国产一区二区三区| 亚洲私人黄色宅男| 日韩欧美精品三级| 欧美三级日韩在线| 国产成人综合自拍| 青青草原综合久久大伊人精品 | 中文字幕一区二区三区在线观看| 欧美久久久久久久久| 成人一区在线看| 国产在线播放一区三区四| 亚洲成人资源在线| 亚洲人成网站在线| 日本一区二区三区久久久久久久久不 | 亚洲成人在线观看视频| 国产免费成人在线视频| 欧美mv日韩mv亚洲| 91精品国产综合久久香蕉的特点| 成人ar影院免费观看视频| 国产一区二区三区黄视频| 首页综合国产亚洲丝袜| 亚洲小少妇裸体bbw| 亚洲摸摸操操av| 亚洲欧洲日产国码二区| 国产精品久久三区| 久久精品视频在线免费观看| 26uuu欧美日本| 欧美一级黄色录像| 日韩天堂在线观看| 欧美一级淫片007| 91精品国模一区二区三区| 欧美日韩精品欧美日韩精品一综合| 91视频com| 色呦呦国产精品| 欧美视频中文一区二区三区在线观看| 97se亚洲国产综合自在线不卡| 成人国产精品免费观看动漫| 国产成人夜色高潮福利影视| 懂色av一区二区在线播放| 国产91露脸合集magnet| 成人精品视频网站| 99久久免费精品高清特色大片| 不卡免费追剧大全电视剧网站| 成人黄色一级视频| 99r国产精品| 欧美丝袜第三区| 日韩精品一区二区三区视频播放| 日韩视频国产视频| 久久久91精品国产一区二区精品| 亚洲国产成人一区二区三区| 中文字幕一区二区三区四区 | 国产精品久久久一区麻豆最新章节| 久久精品欧美一区二区三区麻豆| 国产精品区一区二区三| 亚洲视频网在线直播| 亚洲国产va精品久久久不卡综合| 日日摸夜夜添夜夜添国产精品| 久久er精品视频| 成人免费高清在线| 欧美猛男男办公室激情| 精品欧美一区二区在线观看| 中文字幕 久热精品 视频在线| 亚洲精品成人悠悠色影视| 日本特黄久久久高潮| 成人深夜视频在线观看| 欧美性xxxxx极品少妇| 精品久久久久一区| 亚洲精品乱码久久久久久| 美女在线视频一区| 一本一本大道香蕉久在线精品| 91精品国产91综合久久蜜臀| 国产视频亚洲色图| 一二三四社区欧美黄| 国产精品一区2区| 欧美男男青年gay1069videost | 亚洲欧洲精品一区二区精品久久久 | 《视频一区视频二区| 亚洲人成影院在线观看| 91福利视频久久久久| 国产一区二区三区四|