javascript結(jié)合canvas實(shí)現(xiàn)圖片旋轉(zhuǎn)效果
我們?cè)谖⒉┥峡梢詫?duì)圖片進(jìn)行向左轉(zhuǎn)向右轉(zhuǎn)等旋轉(zhuǎn)操作,讓用戶可以從不同的視角欣賞圖片效果。本文將結(jié)合實(shí)例為您講解如何使用Javascript結(jié)合相關(guān)技術(shù)來(lái)實(shí)現(xiàn)圖片的旋轉(zhuǎn)效果。我們使用HTML5的canvas標(biāo)簽可對(duì)圖片進(jìn)行旋轉(zhuǎn)操作,對(duì)于ie6,7,8不支持HTML5的瀏覽器,我們使用IE特有的濾鏡效果來(lái)實(shí)現(xiàn)圖片旋轉(zhuǎn)。
HTML
我們?cè)陧?yè)面中放置一張圖片,在圖片的上方放置兩個(gè)按鈕,通過(guò)onclick事件調(diào)用rotate()函數(shù)來(lái)控制圖片向左向右旋轉(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); ... }
我們寫了個(gè)自定義函數(shù)rotate(),其中參數(shù)obj表示要旋轉(zhuǎn)的圖片對(duì)象的id,參數(shù)arr表示旋轉(zhuǎn)方向,固定兩個(gè)值:left(向左)和right(向右)。我們?cè)O(shè)置變量n是為了記錄上下左右四種旋轉(zhuǎn)狀態(tài),點(diǎn)擊旋轉(zhuǎn)按鈕時(shí)可以保證持續(xù)的旋轉(zhuǎn)的狀態(tài),即每次旋轉(zhuǎn)是在上次旋轉(zhuǎn)操作后的基礎(chǔ)上再次旋轉(zhuǎn)。
然后,我們要根據(jù)瀏覽器的不同進(jìn)行不同的處理,對(duì)于IE系瀏覽器,可以使用他們特有的濾鏡來(lái)實(shí)現(xiàn)旋轉(zhuǎn)效果,雖然我們不建議使用濾鏡,但為了兼容IE老版本,我們不得不重操這把舊刀。
function rotate(obj,arr){ ... //對(duì)IE瀏覽器使用濾鏡旋轉(zhuǎn) if(document.all) { img.style.filter = 'progid:DXImageTransform.Microsoft.BasicImage(rotation='+ n +')'; // 對(duì)現(xiàn)代瀏覽器寫入HTML5的元素進(jìn)行旋轉(zhuǎn): canvas }else{ ... } }
代碼中,我們使用document.all判斷是否為IE瀏覽器,如果是則使用濾鏡,而對(duì)于firefox和chrome這樣的現(xiàn)代瀏覽器,我們使用canvas來(lái)實(shí)現(xiàn)旋轉(zhuǎn)效果。
function rotate(obj,arr){ ... // 對(duì)現(xiàn)代瀏覽器寫入HTML5的元素進(jìn)行旋轉(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元素對(duì)象,并將圖片賦予canvas對(duì)象,當(dāng)變量n處于不同的狀態(tài)(上下左右四個(gè)方向)時(shí),使用canvas重新對(duì)圖像進(jìn)行繪制。
當(dāng)然,圖片的旋轉(zhuǎn)效果實(shí)現(xiàn)還有一種解決方案,繞開(kāi)html5,針對(duì)各不同的瀏覽器,比如firefox下面可以用-moz-transform: rotate(); webkit可以用-webkit-transform: rotate(); 但這并不如html5的canvas實(shí)現(xiàn)的效果好。
以上所述就是本文給大家分享的全部?jī)?nèi)容了,希望大家能夠喜歡。
- JavaScript圖片旋轉(zhuǎn)效果實(shí)現(xiàn)方法詳解
- JavaScript如何處理移動(dòng)端拍攝圖片旋轉(zhuǎn)問(wèn)題
- JS實(shí)現(xiàn)圖片旋轉(zhuǎn)動(dòng)畫效果封裝與使用示例
- js實(shí)現(xiàn)圖片旋轉(zhuǎn) js滾動(dòng)鼠標(biāo)中間對(duì)圖片放大縮小
- jQuery圖片旋轉(zhuǎn)插件jQueryRotate.js用法實(shí)例(附demo下載)
- 圖片旋轉(zhuǎn)、鼠標(biāo)滾輪縮放、鏡像、切換圖片js代碼
- JS實(shí)現(xiàn)3D圖片旋轉(zhuǎn)展示效果代碼
- js實(shí)現(xiàn)圖片旋轉(zhuǎn)的三種方法
- 純JS實(shí)現(xiàn)旋轉(zhuǎn)圖片3D展示效果
- Exif.js圖片旋轉(zhuǎn)修正的方法
相關(guān)文章
非常漂亮的讓背景如此暗淡(一種彈出提示信息時(shí)頁(yè)面背景色調(diào)改變的方法)
非常漂亮的讓背景如此暗淡(一種彈出提示信息時(shí)頁(yè)面背景色調(diào)改變的方法)...2007-04-04微信小程序?qū)W習(xí)筆記之跳轉(zhuǎn)頁(yè)面、傳遞參數(shù)獲得數(shù)據(jù)操作圖文詳解
這篇文章主要介紹了微信小程序?qū)W習(xí)筆記之跳轉(zhuǎn)頁(yè)面、傳遞參數(shù)獲得數(shù)據(jù)操作,結(jié)合實(shí)例形式分析了微信小程序基于navigator組件的頁(yè)面跳轉(zhuǎn)及數(shù)據(jù)傳遞相關(guān)操作技巧,并結(jié)合圖文形式進(jìn)行詳細(xì)說(shuō)明,需要的朋友可以參考下2019-03-03layui多iframe頁(yè)面控制定時(shí)器運(yùn)行的方法
今天小編就為大家分享一篇layui多iframe頁(yè)面控制定時(shí)器運(yùn)行的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09JS中定時(shí)器的使用及頁(yè)面切換時(shí)定時(shí)器無(wú)法清除問(wèn)題的解決辦法
定時(shí)器相信大家應(yīng)該都不陌生,下面這篇文章主要給大家介紹了關(guān)于JS中定時(shí)器的使用及頁(yè)面切換時(shí)定時(shí)器無(wú)法清除問(wèn)題的解決辦法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02three.js 實(shí)現(xiàn)露珠滴落動(dòng)畫效果的示例代碼
這篇文章主要介紹了three.js 實(shí)現(xiàn)露珠滴落動(dòng)畫效果的示例代碼,非常不錯(cuò),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03微信小程序?qū)崿F(xiàn)滑動(dòng)/點(diǎn)擊切換Tab及scroll-left的使用
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)滑動(dòng)/點(diǎn)擊切換Tab,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04