首先:save是保存當(dāng)前狀態(tài),restore是返回上一次保存的狀態(tài)。
站在用戶的角度思考問題,與客戶深入溝通,找到惠來網(wǎng)站設(shè)計與惠來網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站設(shè)計、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名注冊、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋惠來地區(qū)。
你畫出"文字1",后旋轉(zhuǎn),后返回(相當(dāng)于沒有旋轉(zhuǎn)),最后才畫"文字2",所以兩次文字都不旋轉(zhuǎn)。
其次:rotate()的參數(shù)不是角度制,而是弧度制(Maht.PI相當(dāng)于180度)。
所以要旋轉(zhuǎn)30角度必須這樣寫c.rotate(Math.PI/6);
再次:旋轉(zhuǎn)之后的方向都發(fā)生了改變。
就是說如果你先在x=200,y=200的地方畫了東西,然后旋轉(zhuǎn)30度,然后在x=200,y=200的地方畫了另一個東西,這兩個東西將不在同一個地方。(可以想象畫畫得人繞著坐標(biāo)原點旋轉(zhuǎn)了30度,而畫布位置沒變)
最后:附上能看見效果的代碼。
!DOCTYPE HTML
html
headtitlecanvas/titlemeta charset="utf-8" //head
body
canvas id="canvas" width="600"height="400" style="border:1px solid black"
pYour browserdoes not support the canvas element!/p
/canvas
script type="text/javascript"
var canvas =document.getElementById("canvas");
var c =canvas.getContext("2d");
c.fillStyle = '#000000';
c.font = 'bold 16px verdana';
c.fillText("文字1",200,30);
c.save();
c.rotate(Math.PI/6);
c.fillText("文字2",200,30);
c.restore();
/script
/body
/html
首先是HTML代碼,非常簡單,列出我們需要渲染的文字:
div?class="foo"
span?class="letter"?data-letter="A"A/span
span?class="letter"?data-letter="B"B/span
span?class="letter"?data-letter="C"C/span
span?class="letter"?data-letter="D"D/span
span?class="letter"?data-letter="E"E/span
span?class="letter"?data-letter="F"F/span
span?class="letter"?data-letter="G"G/span
span?class="letter"?data-letter="H"H/span
span?class="letter"?data-letter="I"I/span
span?class="letter"?data-letter="L"L/span
span?class="letter"?data-letter="M"M/span
span?class="letter"?data-letter="N"N/span
span?class="letter"?data-letter="O"O/span
span?class="letter"?data-letter="P"P/span
span?class="letter"?data-letter="Q"Q/span
span?class="letter"?data-letter="R"R/span
span?class="letter"?data-letter="S"S/span
span?class="letter"?data-letter="T"T/span
span?class="letter"?data-letter="U"U/span
span?class="letter"?data-letter="V"V/span
span?class="letter"?data-letter="Z"Z/span
/div
CSS3
.letter{
display:?inline-block;
font-weight:?900;
font-size:?8em;
margin:?0.2em;
position:?relative;
color:?#00B4F1;
transform-style:?preserve-3d;
perspective:?400;
z-index:?1;
}
這樣我們就讓這些字母安安靜靜的排列起來,并有了自己的背景顏色,等待強大的CSS3來渲染。
接下來我們要讓文字在鼠標(biāo)滑過的時候產(chǎn)生翻轉(zhuǎn)傾斜的動畫。
.letter:before,?.letter:after{
position:absolute;
content:?attr(data-letter);
transform-origin:?top?left;
top:0;
left:0;
}
.letter,?.letter:before,?.letter:after{
transition:?all?0.3s?ease-in-out;
}
.letter:before{
color:?#fff;
text-shadow:
-1px?0px?1px?rgba(255,255,255,.8),
1px?0px?1px?rgba(0,0,0,.8);
z-index:?3;
transform:
rotateX(0deg)
rotateY(-15deg)
rotateZ(0deg);
}
.letter:after{
color:?rgba(0,0,0,.11);
z-index:2;
transform:
scale(1.08,1)
rotateX(0deg)
rotateY(0deg)
rotateZ(0deg)
skew(0deg,1deg);
}
.letter:hover:before{
color:?#fafafa;
transform:
rotateX(0deg)
rotateY(-40deg)
rotateZ(0deg);
}
.letter:hover:after{
transform:
scale(1.08,1)
rotateX(0deg)
rotateY(40deg)
rotateZ(0deg)
skew(0deg,22deg);
}
有,不過這個"時代"還需要等待,因為所有瀏覽器還沒有真正的支持,可以用的有ie9以上、Chrome以及Safari、火狐等支持html5的瀏覽器,一下是針對body對應(yīng)的代碼:
body{
-webkit-transform:?scaleX(-1);?/*webkit內(nèi)核的,比如chrome等*/
-moz-transform:scaleX(-1);/*火狐的*/
}
你可以試一試,瀏覽器需要完全支持,總有那么一天的事,還需等待。
你這也許需要CSS3的3D屬性,甚至是WebGL…
參考一下吧:
HTML范例ie.microsoft.com/testdrive
開發(fā)者文檔msdn.microsoft.com/zh-cn/library/ie/hh673529.aspx
html5中引入3d模型的方法是借助第三方PlayCanvas插件來完成的。
比如可以用以下方法實現(xiàn)圖片的360度旋轉(zhuǎn):
代碼示例:
var render, loop, t, dt, //定義變量
DEG2RAD = Math.PI / 180, //角度轉(zhuǎn)弧度
cvs = document.querySelector('canvas'), //創(chuàng)建canvas
ctx = cvs.getContext('2d'),//繪制2d圖形上下文
teddy = new Image(), //創(chuàng)建圖像
heart = new Image(), //創(chuàng)建圖像中心
angle = 0,//初始化角度為0
reqAnimFrame =
window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.msRequestAnimationFrame ||
window.oRequestAnimationFrame;
//創(chuàng)建動畫幀
cvs.width = 400;
cvs.height = 200;
teddy.src = 'xxx.jpg';
heart.src = 'yyy.jpg';
//開始渲染
render = function (timestamp) {
dt = timestamp - t;
t = timestamp;
// cavas設(shè)置為白色
ctx.fillStyle = "rgb(255,255,255)";
ctx.fillRect(0, 0, cvs.width, cvs.height);
// 繪制中心
ctx.drawImage(heart, -20, -120);
// 繪制teddy
ctx.save();
ctx.translate(cvs.width/2, cvs.height/2); // 移動鼠標(biāo)到畫布中心
ctx.rotate(DEG2RAD * angle); // 旋轉(zhuǎn)畫布
ctx.drawImage(teddy, -teddy.width/2, -teddy.height/2); // 繪制中心圖片
angle += dt / 16.67 * 6; // increment angle ~ 360 deg/sec
ctx.restore();
};
loop = function (timestamp) {
reqAnimFrame(loop);
render(timestamp);
};
t = Date.now();
loop(t);