canvas window.requestAnimationFrame

畫同心圓的方法插掂!

var canvas = document.getElementById("myCanvas");

var context = canvas.getContext("2d");

var btn = document.getElementById("btn");

var per=Math.PI/12;

var r=150;

var num=0;

//把坐標(biāo)的中心移動到中點,

context.translate(200,200)

function move(){

//開始畫圓

context.beginPath();

context.strokeStyle='red';

context.lineWidth=5;

context.arc(0,0,r,0,Math.PI/12)

context.stroke()

context.rotate(per)

num++;

if(num>72){

r-=20;

num=0;

console.log("hellow")

}

if(r>20){

window.requestAnimationFrame(move)

}

}

move()



三角形 原理 圓周運動

var canvas = document.getElementById("myCanvas");

var context = canvas.getContext("2d");

var btn = document.getElementById("btn");

//定義一個變量保存動畫的返回值

var result = null;

//獲取轉(zhuǎn)動的圓的圓心的xx、yy坐標(biāo)的函數(shù)盯仪,傳入的參數(shù)是圍繞的中心點的x、y坐標(biāo)叉抡,轉(zhuǎn)動的半徑痊班,每次轉(zhuǎn)動的角度

function getXY(x, y, r, per) {

var xx = x + Math.cos(per) * r;

var yy = y - Math.sin(per) * r;

return [xx, yy];

}

//定義轉(zhuǎn)的角度的初始值

var per = Math.PI / 12

//封裝動畫的函數(shù)

function move() {

//清理畫布

context.clearRect(0, 0, canvas.width, canvas.height)

context.beginPath();

var res = getXY(200, 200, 150, per);

context.fillStyle = "red";

var c=20

//畫外面轉(zhuǎn)動的圓

context.arc(res[0], res[1], 20, 0, Math.PI * 2);

context.fill();

//增加轉(zhuǎn)動的角度

per += Math.PI / 48;

//執(zhí)行動畫

result = window.requestAnimationFrame(move);

}

move();

//點擊停止動畫

btn.onclick = function() {

//阻止動畫執(zhí)行

window.cancelAnimationFrame(result);

}


面向?qū)ο竺嗥#瑔蝹€球星碰撞

var context = canvas.getContext("2d");

//圓是一個類,就是對象只有一個臣疑,就是圓

function Circle(x, y, r, speedX, speedY, color) {

//所有的屬性

this.r = r;

this.x = x;

this.speedX = speedX;

this.speedY = speedY;

this.y = y;

this.color = color;

context.beginPath();

context.fillStyle = "green";

context.arc(this.x, this.y, this.r, 0, Math.PI * 2);

context.fill();

}

//在原型上寫方法盔憨,

//第一個方法,畫圓

Circle.prototype.draw = function() {

context.beginPath();

context.fillStyle = this.color;

context.arc(this.x, this.y, this.r, 0, Math.PI * 2);

context.fill();

}

//第二個方法讯沈,運動

Circle.prototype.move = function() {

//這里改變x遞加的值,可以改變運動速度

this.x += this.speedX;

this.y += this.speedY;

if(this.x >= canvas.width - this.r || this.x <= this.r) {

this.speedX *= -1;

}

if(this.y >= canvas.height - this.r || this.y <= this.r) {

this.speedY *= -1;

}

}

function rand(min,max){

return parseInt(Math.random()*(max-min)+min+1)

}

var r=rand(10,100);

var x= rand(r,canvas.width-r);

var y=rand(r,canvas.height-r);

var color="rgb("+rand(0,255)+","+rand(0,255)+","+rand(0,255)+")"

var newCircle = new Circle(x, y,r, 2,2 ,color);

moveCircle();

//定義一個執(zhí)行動畫的函數(shù)

function moveCircle() {

//先清理畫布

context.clearRect(0, 0, canvas.width, canvas.height);

//調(diào)用畫圓的函數(shù)

newCircle.draw();

//調(diào)用運動的函數(shù)

newCircle.move();

//執(zhí)行動畫

window.requestAnimationFrame(moveCircle);

}



碰撞

var canvas = document.getElementById("myCanvas");

var context = canvas.getContext("2d");

//圓是一個類郁岩,就是對象只有一個,就是圓

function Circle(x, y, r, speedX, speedY, color) {

//所有的屬性

this.r = r;

this.x = x;

this.speedX = speedX;

this.speedY = speedY;

this.y = y;

this.color = color;

context.beginPath();

context.fillStyle = "green";

context.arc(this.x, this.y, this.r, 0, Math.PI * 2);

context.fill();

}

//在原型上寫方法芙盘,

//第一個方法驯用,畫圓

Circle.prototype.draw = function() {

context.beginPath();

context.fillStyle = this.color;

context.arc(this.x, this.y, this.r, 0, Math.PI * 2);

context.fill();

}

//第二個方法,運動

Circle.prototype.move = function() {

//這里改變x遞加的值,可以改變運動速度

this.x += this.speedX;

this.y += this.speedY;

if(this.x >= canvas.width - this.r || this.x <= this.r) {

this.speedX *= -1;

}

if(this.y >= canvas.height - this.r || this.y <= this.r) {

this.speedY *= -1;

}

}

function rand(min,max){

return parseInt(Math.random()*(max-min)+min+1)

}

var r=rand(10,100);

var x= rand(r,canvas.width-r);

var y=rand(r,canvas.height-r);

var color="rgb("+rand(0,255)+","+rand(0,255)+","+rand(0,255)+")"

var newCircle = new Circle(x, y,r, 2,2 ,color);

moveCircle();

//定義一個執(zhí)行動畫的函數(shù)

function moveCircle() {

//先清理畫布

context.clearRect(0, 0, canvas.width, canvas.height);

//調(diào)用畫圓的函數(shù)

newCircle.draw();

//調(diào)用運動的函數(shù)

newCircle.move();

//執(zhí)行動畫

window.requestAnimationFrame(moveCircle);

}


多圓運動

var canvas = document.getElementById("myCanvas");

var context = canvas.getContext("2d");

//圓是一個類儒老,就是對象只有一個蝴乔,就是圓

function Circle(x, y, r, speedX, speedY, color) {

//所有的屬性

this.r = r;

this.x = x;

this.speedX = speedX;

this.speedY = speedY;

this.y = y;

this.color = color;

context.beginPath();

context.fillStyle = "green";

context.arc(this.x, this.y, this.r, 0, Math.PI * 2);

context.fill();

}

//在原型上寫方法,

//第一個方法驮樊,畫圓

Circle.prototype.draw = function() {

context.beginPath();

context.fillStyle = this.color;

context.arc(this.x, this.y, this.r, 0, Math.PI * 2);

context.fill();

}

//第二個方法薇正,運動

Circle.prototype.move = function() {

//這里改變x遞加的值,可以改變運動速度

this.x += this.speedX;

this.y += this.speedY;

if(this.x >= canvas.width - this.r || this.x <= this.r) {

this.speedX *= -1;

}

if(this.y >= canvas.height - this.r || this.y <= this.r) {

this.speedY *= -1;

}

}

function rand(min, max) {

return parseInt(Math.random() * (max - min) + min + 1)

}

var arr=[];

for(i = 0; i < 100; i++) {

var r = rand(10, 50);

var x = rand(r, canvas.width - r);

var y = rand(r, canvas.height - r);

var speedx=rand(1,10);

var speedy=rand(1,10)

var color = "rgb(" + rand(0, 255) + "," + rand(0, 255) + "," + rand(0, 255) + ")"

//實例化

var newCircle = new Circle(x, y, r, speedx, speedy, color);

//插入保存的數(shù)組!

arr.push(newCircle);

}

//執(zhí)行

moveCircle();

//定義一個執(zhí)行動畫的函數(shù)

function moveCircle() {

//先清理畫布

context.clearRect(0, 0, canvas.width, canvas.height);

for(var i=0;i


自由落體

var canvas = document.getElementById("myCanvas");

var context = canvas.getContext("2d");

var y = 0;

var lastTime;

//構(gòu)造函數(shù)

function Rect(x, y, w, h, speedY) {

this.x = x;

this.y = y;

this.w = w;

this.h = h;

this.speedY = speedY;

}

//原型里面加方法

Rect.prototype.draw = function() {

context.beginPath();

context.fillStyle = "red";

context.fillRect(this.x, this.y, this.w, this.h);

}

Rect.prototype.move = function() {

//涌動的時間

var nowTime=new Date();

//時間差

var t=nowTime-lastTime;

//移動后的距離囚衔!

// 自由落體公式

var distance=9.8*t*t/2/283460;

this.y += distance;

//判斷停止條件

if(this.y > (canvas.height - this.h)) {

this.y = canvas.height - this.h;

}

window.requestAnimationFrame(move);

}

var newRect = new Rect(200, 0, 50, 50, 2);

newRect.draw();

//移動

function move() {

context.clearRect(0, 0, canvas.width, canvas.height);

newRect.draw();

newRect.move();

}

canvas.onclick = function() {

lastTime=new Date();

move();

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挖腰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子练湿,更是在濱河造成了極大的恐慌猴仑,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肥哎,死亡現(xiàn)場離奇詭異辽俗,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)篡诽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門崖飘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人杈女,你說我怎么就攤上這事朱浴。” “怎么了达椰?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵翰蠢,是天一觀的道長。 經(jīng)常有香客問我啰劲,道長躏筏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任呈枉,我火速辦了婚禮趁尼,結(jié)果婚禮上埃碱,老公的妹妹穿的比我還像新娘。我一直安慰自己酥泞,他們只是感情好砚殿,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著芝囤,像睡著了一般似炎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上悯姊,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天羡藐,我揣著相機(jī)與錄音,去河邊找鬼悯许。 笑死仆嗦,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的先壕。 我是一名探鬼主播瘩扼,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼垃僚!你這毒婦竟也來了集绰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤谆棺,失蹤者是張志新(化名)和其女友劉穎栽燕,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體改淑,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡纫谅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了溅固。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡兰珍,死狀恐怖侍郭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情掠河,我是刑警寧澤亮元,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站唠摹,受9級特大地震影響爆捞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜勾拉,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一煮甥、第九天 我趴在偏房一處隱蔽的房頂上張望盗温。 院中可真熱鬧,春花似錦成肘、人聲如沸卖局。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽砚偶。三九已至,卻和暖如春洒闸,著一層夾襖步出監(jiān)牢的瞬間染坯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工丘逸, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留单鹿,地道東北人。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓鸣个,卻偏偏與公主長得像羞反,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子囤萤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 一:canvas簡介 1.1什么是canvas昼窗? ①:canvas是HTML5提供的一種新標(biāo)簽 ②:HTML5 ...
    GreenHand1閱讀 4,674評論 2 32
  • 一、圖形的組合方式 globalAlpha是一個介于0和1之間的值(包括0和1)涛舍,用于指定所有繪制的透明度澄惊。默認(rèn)值...
    空谷悠閱讀 1,256評論 0 0
  • ¥開啟¥ 【iAPP實現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 6,365評論 0 17
  • 看了一遍申肖克的救贖 記住了一句話大概的意思是你既然已經(jīng)走了那么遠(yuǎn)來了 那就再前進(jìn)一點富雅。高考的腳步越來越近 黑板上...
    _鹿的角閱讀 271評論 0 1
  • 觀影人與制片方中没佑,往往存在著那種不可調(diào)和的矛盾毕贼。 簡單的說,是觀眾不能完整地表達(dá)出自己想要什么蛤奢,制片方無法推測觀眾...
    青柯_閱讀 156評論 0 0