国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

canvas離屏、旋轉(zhuǎn)效果實(shí)踐——旋轉(zhuǎn)的雪花

maochunguang / 2364人閱讀

摘要:另外這里循環(huán)中用到了的旋轉(zhuǎn)效果,所以我們可以很輕易的畫(huà)出條有角度的線。效果見(jiàn)文章開(kāi)頭的效果展示鏈接

效果展示
理論基礎(chǔ)——“常見(jiàn)的canvas優(yōu)化——模糊問(wèn)題、旋轉(zhuǎn)效果”

用離屏canvas畫(huà)基礎(chǔ)部分

1、封裝畫(huà)線函數(shù)

function drawLine(ctx,x1,y1,x2,y2,color){
  ctx.save();
  ctx.beginPath();
  ctx.strokeStyle = color;
  ctx.lineTo(x1, y1);
  ctx.lineTo(x2, y2);
  ctx.stroke();
  ctx.restore();
}

2、畫(huà)雪花的六條線

function canvasSingleSnow(snowSize){
  var singleSnow = document.createElement("canvas");
  var ctxSingle = singleSnow.getContext("2d");
  singleSnow.setAttribute("width", snowSize * 2);
  singleSnow.setAttribute("height", snowSize * 2);
  ctxSingle.translate(snowSize, snowSize);//定位原點(diǎn)到畫(huà)布中心
  for(var i = 0; i < 6; i++){//畫(huà)六條線
    ctxSingle.save();
    ctxSingle.rotate(Math.PI*2 * i/6);
    drawLine(ctxSingle, 0, 0, snowSize, 0,"#656565");
    ctxSingle.restore();
  }
  return singleSnow;
}

首先這里用到了離屏canvas,我們通過(guò)傳參的方式確定離屏canvas的尺寸,是為了盡可能避免canvas圖案縮放導(dǎo)致的顯示效果問(wèn)題。

另外這里for循環(huán)中用到了canvas的旋轉(zhuǎn)效果,所以我們可以很輕易的畫(huà)出6條有角度的線。效果如下圖所示

3、畫(huà)出完整的雪花

function drawCanvasSnow(centerSnow){
  var canvasSnow = document.createElement("canvas");
  var ctxSnow = canvasSnow.getContext("2d");
  canvasSnow.setAttribute("width", centerSnow * 2);
  canvasSnow.setAttribute("height", centerSnow * 2);
  //畫(huà)一個(gè)大雪花
  var bigSnow = canvasSingleSnow(centerSnow);
  ctxSnow.drawImage(bigSnow, 0, 0, bigSnow.width, bigSnow.height,
    0, 0, centerSnow * 2, centerSnow * 2);
  //畫(huà)六個(gè)小雪花
  var smallSnow = canvasSingleSnow(centerSnow/3);
  var sizeSnow = centerSnow * 3/5;//小雪花的尺寸(直徑)
  var rSnow = centerSnow - sizeSnow/2;//小雪花的位置(離大雪花中心的距離)
  for(var i = 0; i < 6; i++){
    ctxSnow.save();
    ctxSnow.translate(centerSnow, centerSnow);
    ctxSnow.rotate(Math.PI*2 * i/6);
    ctxSnow.drawImage(smallSnow, 0, 0, smallSnow.width, smallSnow.height,
      rSnow - sizeSnow/2, -sizeSnow/2, sizeSnow, sizeSnow);
    ctxSnow.restore();
  }
  return canvasSnow;
}

上述代碼中尺寸部分說(shuō)明:小雪花的尺寸比大雪花小,用比例可以方便縮放;小雪花的位置則固定在大雪花六條線的端點(diǎn)處。效果如下圖所示

將離屏canvas作為資源畫(huà)到實(shí)際顯示的canvas上

1、封裝一個(gè)根據(jù)旋轉(zhuǎn)加載離屏canvas的函數(shù)

//r為雪花圖案中心距畫(huà)布中心的距離
//angle為雪花圖案在畫(huà)布上的安放角度
//size為雪花圖案的顯示尺寸
function drawSnowAngle(ctx,r,angle,size){
  ctx.save();
  ctx.rotate(Math.PI*2 * angle);
  drawLine(ctx,0,0,r,0,"#656565");
  ctx.drawImage(canvasSnow, 0, 0, canvasSnow.width, canvasSnow.height,
    r - size/2, -size/2, size, size);
  ctx.restore();
}

2、可以將離屏canvas畫(huà)的雪花圖案畫(huà)到實(shí)際顯示的canvas上了

//center為實(shí)際顯示canvas的畫(huà)布中心(半徑)
//rSnow為雪花圖案的半徑
drawSnowAngle(ctx, center - rSnow, i/snowNum, rSnow * 2);

3、加上動(dòng)態(tài)旋轉(zhuǎn)效果

var snowNum = 1;
var isAdd = true;
var loop = setInterval("drawCanvas()", 10);//定時(shí)器,每10ms繪制一次
function drawCanvas(){
  //設(shè)置旋轉(zhuǎn)效果
  if(snowNum >= 18){isAdd = false;}//最大個(gè)數(shù)為18
  else if(snowNum <= 1){isAdd = true;}//最小個(gè)數(shù)為1
  if(isAdd){snowNum += snowNum/200;}//達(dá)到最大后開(kāi)始遞減
  else{snowNum -= snowNum/100;}//達(dá)到最少后開(kāi)始遞增
  //畫(huà)圖
  var rSnow = center/2 * (snowNum - 6)/6;//設(shè)置雪花圖案顯示尺寸
  canvasSnow = drawCanvasSnow(rSnow);//畫(huà)出離屏雪花圖案
  ctx.clearRect(-center, -center, center * 2, center * 2);//清除畫(huà)布
  for(var i = 0; i < snowNum; i++){//開(kāi)始畫(huà)圖
    drawSnowAngle(ctx, center - rSnow, i/snowNum, rSnow * 2);
  }
}

旋轉(zhuǎn)的雪花就這樣完成了。效果見(jiàn)文章開(kāi)頭的效果展示鏈接

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/82971.html

相關(guān)文章

  • 常見(jiàn)canvas優(yōu)化——模糊問(wèn)題、旋轉(zhuǎn)效果

    摘要:常見(jiàn)優(yōu)化方案模糊問(wèn)題旋轉(zhuǎn)效果離屏自定義圖片尺寸實(shí)踐離屏旋轉(zhuǎn)效果實(shí)踐旋轉(zhuǎn)的雪花更新關(guān)于模糊問(wèn)題前幾天研究的時(shí)候剛好趕上作者發(fā)布新版本,發(fā)現(xiàn)新版本截屏出來(lái)的效果比我對(duì)舊版本處理后畫(huà)布尺寸都設(shè)為倍的效果更好。 canvas常見(jiàn)優(yōu)化方案——模糊問(wèn)題、旋轉(zhuǎn)效果、離屏、自定義圖片尺寸 實(shí)踐demo——canvas離屏、旋轉(zhuǎn)效果實(shí)踐——旋轉(zhuǎn)的雪花 2017-12-18 16:27:35更新關(guān)于模糊問(wèn)...

    jindong 評(píng)論0 收藏0
  • canvas入門(mén)里,你沒(méi)注意到那些知識(shí)

    摘要:但需要注意的是,需在使用前調(diào)用。當(dāng)然,你愿意的話也可以兩者結(jié)合著用。繪制圖像相信很多入門(mén)的,都看不到這個(gè)地方,不就是繪制圖像的嘛,啊不準(zhǔn)確,是繪制圖形的。明確的說(shuō),是指圍繞原點(diǎn)圖像旋轉(zhuǎn)弧度。 前言 本文寫(xiě)在七月底,進(jìn)來(lái)不加班就整理了一下,一些非常基礎(chǔ)的知識(shí),對(duì)于canvas剛?cè)腴T(mén)的人來(lái)說(shuō),值得閱讀一下。 來(lái)個(gè)氣勢(shì)如虹的開(kāi)頭 與看各種文章相比,我更喜歡數(shù)學(xué)里的邏輯;與學(xué)習(xí)各種日新月異的框...

    tuniutech 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<