課程
/前端開發(fā)
/Html5
/Canvas繪圖詳解
如何通過定時(shí)器實(shí)現(xiàn)星星從胖到瘦再到胖的效果?
就是好像讓星星動(dòng)起來
2018-08-23
源自:Canvas繪圖詳解 3-2
正在回答
對(duì)源代碼修改:
function drawStar(cxt,r,R,x,y,color,rot, lineWidth){
cxt.clearRect(0,0,800,800);//? ?<-------------------------在這里清除畫布
cxt.beginPath();
????for (let i = 0; i < 5; i++) {
????????cxt.lineTo(Math.cos((18 + i * 72- rot) / 180 * Math.PI) * R + x,
????????-Math.sin((18 + i * 72 - rot) / 180 * Math.PI) * R + y,
????);
????????cxt.lineTo(Math.cos((54 + i * 72 - rot) / 180 * Math.PI) * r + x,
????????-Math.sin((54 + i * 72 - rot) / 180 * Math.PI) * r + y,
}
cxt.closePath();
cxt.strokeStyle=color;
cxt.lineWidth = lineWidth;//? ?<-------------------這里添加要改變寬度的參數(shù)
cxt.stroke();
接下來定義動(dòng)畫:
function starAnimation( cxt ){? //? ?<-----------在這里定義canvas的畫布對(duì)象
var i=5;? //這里是控制動(dòng)畫的變量
var w=5;? ? //這個(gè)是要改變的寬度變量
??setInterval(function () {
????if(i>5){
????????drawStar(cxt, 200, 300, 400, 400, 'red', 30, w+=3);
????????i++;
????}else{
????????drawStar(cxt, 200, 300, 400, 400, 'red', 30, w-=3);
????}
????????if (i > 10) {
????????????i = 1;
????????}
????}, 100);
接下來執(zhí)行定義好的動(dòng)畫就OK了
starAnimation(context);? // <-----------傳入? ?var context =canvas.getContext('2d');
舉報(bào)
Canvas系列教程第二課,詳解Canvas各接口,讓同學(xué)徹底掌握Canvas繪圖
3 回答畫五角星的問題
5 回答鼠標(biāo)點(diǎn)擊在畫布上移動(dòng),隨鼠標(biāo)軌跡周圍畫星星,呵呵
4 回答為什么明明設(shè)置了繪制10棵星星,運(yùn)行之后,出現(xiàn)滿畫布的星星
2 回答為什么和老師的代碼一樣卻畫不出星星,經(jīng)測(cè)試將drawStar()里面的x,y寫成確定的數(shù)值可以畫出星星
4 回答星星閃效果
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購(gòu)課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2018-08-27
對(duì)源代碼修改:
function drawStar(cxt,r,R,x,y,color,rot, lineWidth){
cxt.clearRect(0,0,800,800);//? ?<-------------------------在這里清除畫布
cxt.beginPath();
????for (let i = 0; i < 5; i++) {
????????cxt.lineTo(Math.cos((18 + i * 72- rot) / 180 * Math.PI) * R + x,
????????-Math.sin((18 + i * 72 - rot) / 180 * Math.PI) * R + y,
????);
????????cxt.lineTo(Math.cos((54 + i * 72 - rot) / 180 * Math.PI) * r + x,
????????-Math.sin((54 + i * 72 - rot) / 180 * Math.PI) * r + y,
????);
}
cxt.closePath();
cxt.strokeStyle=color;
cxt.lineWidth = lineWidth;//? ?<-------------------這里添加要改變寬度的參數(shù)
cxt.stroke();
}
接下來定義動(dòng)畫:
function starAnimation( cxt ){? //? ?<-----------在這里定義canvas的畫布對(duì)象
var i=5;? //這里是控制動(dòng)畫的變量
var w=5;? ? //這個(gè)是要改變的寬度變量
??setInterval(function () {
????if(i>5){
????????drawStar(cxt, 200, 300, 400, 400, 'red', 30, w+=3);
????????i++;
????}else{
????????drawStar(cxt, 200, 300, 400, 400, 'red', 30, w-=3);
????????i++;
????}
????????if (i > 10) {
????????????i = 1;
????????}
????}, 100);
}
接下來執(zhí)行定義好的動(dòng)畫就OK了
starAnimation(context);? // <-----------傳入? ?var context =canvas.getContext('2d');