javascript結(jié)合canvas實現(xiàn)圖片旋轉(zhuǎn)效果
我們在微博上可以對圖片進行向左轉(zhuǎn)向右轉(zhuǎn)等旋轉(zhuǎn)操作,讓用戶可以從不同的視角欣賞圖片效果。本文將結(jié)合實例為您講解如何使用Javascript結(jié)合相關(guān)技術(shù)來實現(xiàn)圖片的旋轉(zhuǎn)效果。我們使用HTML5的canvas標(biāo)簽可對圖片進行旋轉(zhuǎn)操作,對于ie6,7,8不支持HTML5的瀏覽器,我們使用IE特有的濾鏡效果來實現(xiàn)圖片旋轉(zhuǎn)。
HTML
我們在頁面中放置一張圖片,在圖片的上方放置兩個按鈕,通過onclick事件調(diào)用rotate()函數(shù)來控制圖片向左向右旋轉(zhuǎn)。
<div id="tool">
<a href="#" id="arr_left" onclick="rotate('myimg','left')">向左</a>
<a href="#" id="arr_right" onclick="rotate('myimg','right')">向右</a>
</div>
<div id="img">
<img src="demo.jpg" width="460" height="305" alt="" id="myimg" />
</div>
Javascript
function rotate(obj,arr){
var img = document.getElementById(obj);
if(!img || !arr) return false;
var n = img.getAttribute('step');
if(n== null) n=0;
if(arr=='left'){
(n==0)? n=3:n--;
}else if(arr=='right'){
(n==3)? n=0:n++;
}
img.setAttribute('step',n);
...
}
我們寫了個自定義函數(shù)rotate(),其中參數(shù)obj表示要旋轉(zhuǎn)的圖片對象的id,參數(shù)arr表示旋轉(zhuǎn)方向,固定兩個值:left(向左)和right(向右)。我們設(shè)置變量n是為了記錄上下左右四種旋轉(zhuǎn)狀態(tài),點擊旋轉(zhuǎn)按鈕時可以保證持續(xù)的旋轉(zhuǎn)的狀態(tài),即每次旋轉(zhuǎn)是在上次旋轉(zhuǎn)操作后的基礎(chǔ)上再次旋轉(zhuǎn)。
然后,我們要根據(jù)瀏覽器的不同進行不同的處理,對于IE系瀏覽器,可以使用他們特有的濾鏡來實現(xiàn)旋轉(zhuǎn)效果,雖然我們不建議使用濾鏡,但為了兼容IE老版本,我們不得不重操這把舊刀。
function rotate(obj,arr){
...
//對IE瀏覽器使用濾鏡旋轉(zhuǎn)
if(document.all) {
img.style.filter = 'progid:DXImageTransform.Microsoft.BasicImage(rotation='+ n +')';
// 對現(xiàn)代瀏覽器寫入HTML5的元素進行旋轉(zhuǎn): canvas
}else{
...
}
}
代碼中,我們使用document.all判斷是否為IE瀏覽器,如果是則使用濾鏡,而對于firefox和chrome這樣的現(xiàn)代瀏覽器,我們使用canvas來實現(xiàn)旋轉(zhuǎn)效果。
function rotate(obj,arr){
...
// 對現(xiàn)代瀏覽器寫入HTML5的元素進行旋轉(zhuǎn): canvas
}else{
var c = document.getElementById('canvas_'+obj);
if(c== null){
img.style.visibility = 'hidden';
img.style.position = 'absolute';
c = document.createElement('canvas');
c.setAttribute("id",'canvas_'+obj);
img.parentNode.appendChild(c);
}
var canvasContext = c.getContext('2d');
switch(n) {
default :
case 0 :
c.setAttribute('width', img.width);
c.setAttribute('height', img.height);
canvasContext.rotate(0 * Math.PI / 180);
canvasContext.drawImage(img, 0, 0);
break;
case 1 :
c.setAttribute('width', img.height);
c.setAttribute('height', img.width);
canvasContext.rotate(90 * Math.PI / 180);
canvasContext.drawImage(img, 0, -img.height);
break;
case 2 :
c.setAttribute('width', img.width);
c.setAttribute('height', img.height);
canvasContext.rotate(180 * Math.PI / 180);
canvasContext.drawImage(img, -img.width, -img.height);
break;
case 3 :
c.setAttribute('width', img.height);
c.setAttribute('height', img.width);
canvasContext.rotate(270 * Math.PI / 180);
canvasContext.drawImage(img, -img.width, 0);
break;
};
}
}
代碼中,我們創(chuàng)建canvas元素對象,并將圖片賦予canvas對象,當(dāng)變量n處于不同的狀態(tài)(上下左右四個方向)時,使用canvas重新對圖像進行繪制。
當(dāng)然,圖片的旋轉(zhuǎn)效果實現(xiàn)還有一種解決方案,繞開html5,針對各不同的瀏覽器,比如firefox下面可以用-moz-transform: rotate(); webkit可以用-webkit-transform: rotate(); 但這并不如html5的canvas實現(xiàn)的效果好。
以上所述就是本文給大家分享的全部內(nèi)容了,希望大家能夠喜歡。
- JavaScript圖片旋轉(zhuǎn)效果實現(xiàn)方法詳解
- JavaScript如何處理移動端拍攝圖片旋轉(zhuǎn)問題
- JS實現(xiàn)圖片旋轉(zhuǎn)動畫效果封裝與使用示例
- js實現(xiàn)圖片旋轉(zhuǎn) js滾動鼠標(biāo)中間對圖片放大縮小
- jQuery圖片旋轉(zhuǎn)插件jQueryRotate.js用法實例(附demo下載)
- 圖片旋轉(zhuǎn)、鼠標(biāo)滾輪縮放、鏡像、切換圖片js代碼
- JS實現(xiàn)3D圖片旋轉(zhuǎn)展示效果代碼
- js實現(xiàn)圖片旋轉(zhuǎn)的三種方法
- 純JS實現(xiàn)旋轉(zhuǎn)圖片3D展示效果
- Exif.js圖片旋轉(zhuǎn)修正的方法
相關(guān)文章
前端for循環(huán)遍歷foreach、map使用方法舉例
這篇文章主要介紹了前端開發(fā)中不同類型的for循環(huán)遍歷,包括for、foreach和map,詳細探討了它們的使用場景、效率和特點,需要的朋友可以參考下2025-02-02
javascript委托(Delegate)blur和focus用法實例分析
這篇文章主要介紹了javascript委托(Delegate)blur和focus用法,實例分析了javascript委托的用法及針對常見瀏覽器的使用技巧,需要的朋友可以參考下2015-05-05
FullCalendar日歷插件應(yīng)用之?dāng)?shù)據(jù)展現(xiàn)(一)
fullcalendar作為一個功能完善的日歷插件使用非常廣泛,在web開發(fā)開發(fā)過程 中非常流行。它與ext js 中的calendar非常類似,但考慮到extjs 比較“復(fù)雜龐大”,所以我在開發(fā)開發(fā)過程中都會優(yōu)先考慮fullcalendar2015-12-12
Javascript:為input設(shè)置readOnly屬性(示例講解)
本篇文章主要是對Javascript中為input設(shè)置readOnly屬性的示例代碼進行了介紹。需要的朋友可以過來參考下,希望對大家有所幫助2013-12-12

