1. 程式人生 > >跟KingDZ學HTML5之七 探究Canvas之各種特效

跟KingDZ學HTML5之七 探究Canvas之各種特效

document doc 特效 方向 旋轉 element 不解釋 str 呵呵

初看到題目大家怎麽個反應啊,哇塞,這麽多啊,可是看完這節課程之後,你會發現這些功能不過如此。

1》移動 translate(x, y)

簡單的說明一下 ,X 左右偏移量 Y 上下偏移量

說白了,就是說,假如原先的坐標在 (0,0) 那麽 使用 translate(100,100) 之後,坐標就到 (100,100)這個點了 。

然後,我們首先呢,我先寫個 “王” 哈哈,俺的姓

效果圖

技術分享

哈哈。

大家可以看到,這是的坐標是以(0,0)為原點的。下面我們就想辦法,將他更改

function draw() {
            var c = document.getElementById(‘mycanvas‘);
            var cxt = c.getContext("2d");
            //cxt.save();    
            cxt.translate(90, 0);
            cxt.moveTo(0, 0);
            cxt.lineTo(200, 0);
            cxt.moveTo(100, 0);
            cxt.lineTo(100, 200);
            //cxt.restore();
            cxt.moveTo(0, 100);
            cxt.lineTo(200, 100);
            cxt.moveTo(0, 200);
            cxt.lineTo(200, 200);
            cxt.lineWidth = 2;
            cxt.stroke();
        }

看到了嗎?我們上面有一句 cxt.translate(90,0);

這個就是我們 移動了他的 原點,看效果。

技術分享

發生移動了吧。呵呵。大家註意一下,上面的我註釋掉的那兩個 方法

//cxt.save();

//cxt.restore();

然後,你可以將註視打開,看一下效果,呵呵,神馬效果,自己打開就知道了,俺在這就不解釋了,雖然他們很常用,但是,大家自己去慢慢體會吧。

2》旋轉 Rotating

rotate(angle)

這個方法只接受一個參數:旋轉的角度(angle),它是順時針方向的,以弧度為單位的值。【弧度怎麽計算,呵呵,自己看前面的教程】

技術分享

我們做出來這種效果。

function draw() {
            var c = document.getElementById(‘mycanvas‘);
            var cxt = c.getContext("2d");
            cxt.translate(100, 100);
            for (i = 1; i < 7; i++) {
                cxt.save();   //記住狀態
                cxt.fillStyle = ‘rgb(‘ + (60 * i) + ‘,‘ + (200 - 60 * i) + ‘,25)‘;  //填充隨機的顏色
                for (j = 0; j < i * 6; j++) {
                    cxt.rotate(Math.PI * 2 / (i * 6));    //旋轉角度
                    cxt.beginPath();
                    cxt.arc(0, i * 12.5, 5, 0, Math.PI * 2, true);
                    cxt.fill();
                }
                cxt.restore();  // 還原狀態
            }
        }

上面的這個例子啃個有點復雜了,下面我們實現一個相對比較簡單的例子相信大家看到就知道 這個rotate 怎麽用了
技術分享

function draw() {
            var c = document.getElementById("mycanvas");
            var ctx = c.getContext("2d");
            var rectWidth = 75;
            var rectHeight = 75;
            ctx.translate(c.width / 2, c.height / 2);
            ctx.rotate(Math.PI * 2 / 6);
            ctx.fillStyle = "red";
            ctx.fillRect(-rectWidth / 2, -rectHeight / 2, rectWidth, rectHeight);
        }

這回應該好理解了吧,ctx.rotate(Math.PI * 2 / 6); 重點就是這角度的問題。

3》縮放 Scaling

scale(x, y)

scale 方法接受兩個參數。x,y 分別是橫軸和縱軸的縮放因子,它們都必須是正值。值比 1.0 小表示縮小,比 1.0 大則表示放大,值為 1.0 時什麽效果都沒有。

function draw() {
            var c = document.getElementById("mycanvas");
            var ctx = c.getContext("2d");
            var rectWidth = 75;
            var rectHeight = 75;
            ctx.translate(c.width / 2, c.height / 2);
            ctx.scale(0.5, 0.5);
            ctx.fillStyle = "red";
            ctx.fillRect(-rectWidth / 2, -rectHeight / 2, rectWidth, rectHeight);
        }

其實這個縮小,就是類似上面的那個 移動。只不過一個是位置,一個是形狀。

跟KingDZ學HTML5之七 探究Canvas之各種特效