canvas繪制的直線動畫
更新時間:2017年01月23日 10:16:57 作者:webLS
本文主要分享了canvas繪制的直線動畫的示例代碼。具有很好的參考價值,下面跟著小編一起來看下吧
話不多說,請看代碼:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>first line</title> <style type="text/css"> body{ background: #456E89; } .canvas { height: 300px; width: 300px; margin: 0 auto; font-family: arial; } </style> </head> <body> <div class="canvas"> <canvas id="cvs" width="300" height="300"></canvas> </div> <script type="text/javascript"> var cvs = document.getElementById("cvs").getContext("2d"); function Anim(opt) { //初始化值 this.opt = opt; } //node 表示畫布節(jié)點 //staX 表示開始x坐標 //staY 表示開始y坐標 //len表示終點坐標, //timing表示運行的間隔時間, //num表示坐標增長的大小 //direc表示判斷繪制線條的方向,false表示X軸,ture表示Y軸 //lw表示線寬的大小 //color 表示繪制線條顏色 Anim.prototype.draw = function() { //繪制直線的線條 var opt = this.opt; //設(shè)置對象的屬性 var adx = opt.staX; var ady = opt.staY; var that = { x: opt.staX, y: opt.staY }; var Time = setInterval(function() { opt.direc //判斷繪制方向 ? opt.len > ady ? ady += opt.num : ady -= opt.num : opt.len > adx ? adx += opt.num : adx -= opt.num; if(adx == opt.len || ady == opt.len) { //停止循環(huán) clearInterval(Time); } opt.Node.beginPath(); // 開始繪制線條 opt.Node.moveTo(that.x, that.y); opt.Node.lineTo(adx, ady); opt.Node.lineWidth = opt.lw || 1; opt.Node.strokeStyle = opt.color; opt.Node.stroke(); }, opt.timing); }; Anim.prototype.txt = function(opc) {//繪制文字 cvs.beginPath(); cvs.fillStyle = "rgba(255,255,255,"+opc+")"; cvs.font = "200px arial"; cvs.fillText("L", 100, 200); }; var line1 = new Anim({ //實例 Node: cvs, color: "#fff", staX: 114, staY: 58, len: 134, timing: 50, num: 1, direc: false, lw: 2 }); line1.draw(); //執(zhí)行繪制 var line2 = new Anim({ Node: cvs, color: "#fff", staX: 115, staY: 58, len: 200, timing: 20, num: 1, direc: true, lw: 2 }); line2.draw(); var line3 = new Anim({ Node: cvs, color: "#fff", staX: 133, staY: 184, len: 58, timing: 20, num: 1, direc: true, lw: 2 }); line3.draw(); var line4 = new Anim({ Node: cvs, color: "#fff", staX: 132, staY: 184, len: 203, timing: 35, num: 1, direc: false, lw: 2 }); line4.draw(); var line5 = new Anim({ Node: cvs, color: "#fff", staX: 203, staY: 199, len: 115, timing: 35, num: 1, direc: false, lw: 2 }); line5.draw(); var line6 = new Anim({ Node: cvs, color: "#fff", staX: 203, staY: 199, len: 184, timing: 50, num: 1, direc: true, lw: 2 }); line6.draw(); var test = new Anim();//繪制文字實例 setTimeout(function () { var num = 0; var times = setInterval(function () { num++; var t = num/100; if(t === 1){ clearInterval(times); } test.txt(t); },50) },3000) </script> </body> </html>
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
您可能感興趣的文章:
相關(guān)文章
ES6中async函數(shù)與await表達式的基本用法舉例
async和await是我們進行Promise時的一個語法糖,async/await為了讓我們書寫代碼時更加流暢,增強了代碼的可讀性,下面這篇文章主要給大家介紹了關(guān)于ES6中async函數(shù)與await表達式的基本用法,需要的朋友可以參考下2022-07-07使用PBFunc在Powerbuilder中支付寶當面付款功能
這篇文章主要介紹了使用PBFunc在Powerbuilder中支付寶當面付款功能的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-10-10微信小程序onLaunch異步,首頁onLoad先執(zhí)行?
這篇文章主要介紹了微信小程序onLaunch異步,首頁onLoad先執(zhí)行? 文章底部給大家介紹了小程序_onLaunch異步回調(diào)數(shù)據(jù)加載問題的兩種解決方案,需要的朋友可以參考下2018-09-09window.open以post方式將內(nèi)容提交到新窗口
最近在做web項目,碰到需要跨頁面?zhèn)鬟f參數(shù)的功能,就是那種需要把當前頁面的內(nèi)容帶到新開的子窗體中,以前的做法是傳一個id過去,然后在新窗口中去讀數(shù)據(jù)庫的內(nèi)容;比較有意思的是直接通過調(diào)用form的submit方法不能觸發(fā)onsubmit事件,查看了幫助文檔,必須手動的觸發(fā),否則只能看到頁面刷新而沒有打開新窗口2012-12-12JavaScript判斷是否為數(shù)字的4種方法及效率比較
這篇文章主要介紹了JavaScript判斷是否為數(shù)字的4種方法及效率比較,本文直接給出判斷方法實現(xiàn)代碼及運行效率效果圖,方便大家選擇使用,需要的朋友可以參考下2015-04-04javaScript產(chǎn)生隨機數(shù)的用法小結(jié)
這篇文章主要介紹了javaScript產(chǎn)生隨機數(shù)的用法小結(jié),包括JavaScript Math.random()內(nèi)置函數(shù) ,Js 隨機數(shù)產(chǎn)生6位數(shù)字的代碼,需要的朋友可以參考下2018-04-04Android 自定義view仿微信相機單擊拍照長按錄視頻按鈕
這篇文章主要介紹了Android 自定義view仿微信相機單擊拍照長按錄視頻按鈕,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下2019-07-07