1. 程式人生 > >Html5 Canvas 中的save 和 restore

Html5 Canvas 中的save 和 restore

最近在學習html5的canvas,對其中的save 和 restore有一些疑惑 

save是儲存一次狀態 這儲存所有的canvas 上下文屬性。例如style, lineWidth等

把這個狀態壓入一個堆疊

restore 恢復上一次save的狀態,從堆疊裡面推出一個狀態。

我弄了一個畫正方形的 效果  邊長隨著點選遞增

畫筆的顏色在2種顏色裡面迴圈交替

然後在每畫三次的時候,恢復上一次狀態

程式碼如下:

window.onload = function(){
				
				
				var Draw = function() {
				
					this.canvas = document.getElementById('canvas');
					this.storkeStyles = ['#09F','#3FE'];
					this.count = 1;
				
				
				};
			
			
				Draw.prototype = {
					
					init:function(){
						this.ctx = this.canvas.getContext('2d');
						this.ctx.lineWidth = 2;
						this.draw();
					},
					
					draw:function(){
						this.ctx.strokeRect(100 - 5*this.count,100 -5*this.count,10*this.count,10*this.count);
						this.ctx.save();
						this.count++;
						this.ctx.strokeStyle = this.storkeStyles[this.count % 2]
						
					},
					
					redraw:function(){
						this.ctx.restore();
					}
					
					
				};
				
				var draw = new Draw();
				draw.init();
				
				
				document.getElementById('draw_button').onclick = function(){draw.draw();}
				document.getElementById('redraw_button').onclick = function(){draw.redraw();}
				
			}

頁面:

<div>
				<canvas id='canvas' width='200' height='200'></canvas>
				<input type='button' value='draw' id='draw_button'/>
				<input type='button' value='redraw' id='redraw_button'/>
			</div>
 

相關推薦

canvassave()restore()方法的使用

save()和restore()方法是繪製複雜圖形必不可少的方法.它們分別是用來儲存和恢復 canvas 狀態的,都沒有引數。Canvas 狀態是以堆(stack)的方式儲存的,每一次呼叫 save 方法,當前的狀態就會被推入堆中儲存起來。這種狀態包括:當前應用的變形(即移

關於Canvassaverestore的那些事

本篇部落格主要是關於一個canvas在呼叫save和restore會產生什麼影響。android中的Canvas我們直接使用的場景並不是很多,在我的印象中,只有在自定義View,手動繪製bitmap和手動更新SurfaceView的時候會需要手動的在Canvas

Html5 Canvas save restore

最近在學習html5的canvas,對其中的save 和 restore有一些疑惑  save是儲存一次狀態 這儲存所有的canvas 上下文屬性。例如style, lineWidth等 把這個狀態壓入一個堆疊 restore 恢復上一次save的狀態,從堆疊裡面推出一個

HTML5 canvas saverestore方法講解

save()和restore()方法是繪製複雜圖形必不可少的方法.它們分別是用來儲存和恢復 canvas 狀態的,都沒有引數。Canvas 狀態是以堆(stack)的方式儲存的,每一次呼叫 save 方法,當前的狀態就會被推入堆中儲存起來。這種狀態包括:當前應用的變形(即移動,旋轉和縮放,見下): strok

html5 canvas的屬性方法詳解

建立一個Canvas畫布的方法如下 <canvas id=”canvas” width=”600” height=”400”></canvas> 可以在標籤中新增<canvas>標籤不可用時的替代文字,如下所示: <canv

canvas saverestore的作用

<canvas id="physic" width="1800" height="800" style="background: #fff;position: absolute;"></canvas> canvas是h5新增的功能,他

HTML5 | Canvas變量作用域與setInterval()方法的影響

通過 value utf 出現 close span arc shadow cli Demo - 隨機繪制圓環 實現思路: 將一個圓環的繪制分成100份,setInterval()方法定義每隔時間n繪制一段新的,每份的開始路徑都是上一次的結束路徑,實現步進繪制。 通

HTML5 Canvas繪製橢圓的幾種方法

1.canvas自帶的繪製橢圓的方法 ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise)是後來新增的, 引數的意思:(起點x.起點y,半徑x,半徑y,旋轉的角度,起始角,結果角,順時針還是逆時針)

Canvassave()與 restore()的詳細介紹

save()和restore()是用來儲存和恢復canvas狀態的,都沒有引數。 Canvas的狀態就是當前畫面應用的所有樣式和變形的一個快照。 Canvas狀態儲存在棧中,每當save()方法被呼叫後,當前的狀態就被推送到棧中儲存。一個繪畫狀態包括: 1、當前應用的變形(即移動,旋

自定義View畫布save()restore()

遇到這兩個防法正好記錄一下,有一個簡單的例子,畫一個鐘錶的刻度盤,首先畫圓,然後通過旋轉畫布畫刻度,下面主要程式碼: @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas);

HTML5 Canvas繪製線段

繪製線段呼叫lineTo()方法繪製線段。lineTo(x, y)方法把當前點和lineTo()方法指定的點(x, y)用線段連線起來。如果要繪製多條線段,可以重複呼叫該方法。第一次呼叫,當前點為子路徑的起點,以後每次呼叫,都會把上一次的終點作為本次的起點。我們使用lineT

HTML5 Canvas繪製橢圓的5種方法

1.canvas自帶的繪製橢圓的方法 ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise)是現在

RedisSAVEBGSAVE的區別

color 安裝 spa ted 數據持久化 我們 sts local 間隔 Redis的這兩個命令都是用於創建當前數據庫的備份。 因為Redis持久化選擇RDB快照模式,所以Redis並不是實時的進行數據持久化,而是有一定的時間間隔。這個時候如果我們想要手動進行一次持久化

【坑】html5-canvas使用clip摳出一個區域

本想在一個fillRect中摳出一個區域來給我用的,這個是在學clip方法的時候用到的 但是怎麼也弄不出扣的區域,程式碼如下 <!DOCTYPE html> <html> &

kvm saverestore

使用結論:可以在虛機開機狀態下(記憶體)儲存當前的虛機狀態為一個檔案   還原的時候虛機關機,然後restore回去,遇到個問題,儲存狀態後,虛機裡寫東西,然後虛機關機做restore,虛機就又問題了   所以不推薦使用save和restore到生產中 但是在測試

canvas.save()canvas.restore()作用

這裡canvas.save();和canvas.restore();是兩個相互匹配出現的,作用是用來儲存畫布的狀態和取出儲存的狀態的。這裡稍微解釋一下,   當我們對畫布進行旋轉,縮放,平移等操作的時候其實我們是想對特定的元素進行操作,比如圖片,一個矩形等,但是當你用canva

HTML5Canvas rect(), strokeRect() fillRect() 的區別

他們都接受相同的引數,見頁面表格。唯一不同的實現方式與效果方面有差異。 其中fillRect()與strokeRect() 在呼叫後會立即在畫布上畫面效果,而rect()不會立即將圖形畫出,只有在呼叫了stroke()方法之後,才會實際作用於畫布。 fillRect

HTML5開發js的創建繼承

obj 查看 技術 表示 派生 primary indexof const 優點 JavaScript對每個創建的對象都會設置一個原型,指向它的原型對象。 當我們用obj.xxx訪問一個對象的屬性時,JavaScript引擎先在當前對象上查找該屬性,如果沒有找

HTML5sessionStoragelocalStorage兩種儲存方式的使用

<head> <meta charset="utf-8"> <title>HTML5 本地儲存</title> <script type="text/javascript"> function $(id){retur

AndroidPaintCanvas的簡單使用

在 Android 中,Canvas 相當於畫布,而 Paint 相當於畫筆;那麼這兩個配合使用就可以畫出來我們想要的形狀了。 首先我們新建一個類,名字叫 MyView,重寫 onDraw() 方法,程式碼如下: @SuppressLint("AppCompatCustomView") pu