最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript結(jié)合canvas實現(xiàn)圖片旋轉(zhuǎn)效果

 更新時間:2015年05月03日 15:41:31   投稿:hebedich  
圖片的旋轉(zhuǎn)可以說是一種效果,但是逐漸旋轉(zhuǎn)已經(jīng)不單單是屬于視覺效果那個范疇,其更具有使用性,功能性。照片有時候是需要橫過來的拍的,當(dāng)我們預(yù)覽或共享到web上時需要進行旋轉(zhuǎn)。這個操作在以往可能更多的是交給軟件去完成,然后再將旋轉(zhuǎn)到正常角度的圖片發(fā)布到web上。

我們在微博上可以對圖片進行向左轉(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)容了,希望大家能夠喜歡。

相關(guān)文章

  • HTML 自動伸縮的表格Table js實現(xiàn)

    HTML 自動伸縮的表格Table js實現(xiàn)

    在開發(fā)的過程中,表格Table有個缺陷,如果一行中某個單元格的超過一行,表格就不夠美觀了。
    2009-04-04
  • 前端for循環(huán)遍歷foreach、map使用方法舉例

    前端for循環(huán)遍歷foreach、map使用方法舉例

    這篇文章主要介紹了前端開發(fā)中不同類型的for循環(huán)遍歷,包括for、foreach和map,詳細探討了它們的使用場景、效率和特點,需要的朋友可以參考下
    2025-02-02
  • uniapp中input聚焦禁止軟鍵盤彈出方法

    uniapp中input聚焦禁止軟鍵盤彈出方法

    在使用uni-app完成掃碼功能時,有時需要聚焦文本框的同時,需要軟鍵盤消失,下面這篇文章主要給大家介紹了關(guān)于uniapp中input聚焦禁止軟鍵盤彈出的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • javascript委托(Delegate)blur和focus用法實例分析

    javascript委托(Delegate)blur和focus用法實例分析

    這篇文章主要介紹了javascript委托(Delegate)blur和focus用法,實例分析了javascript委托的用法及針對常見瀏覽器的使用技巧,需要的朋友可以參考下
    2015-05-05
  • FullCalendar日歷插件應(yīng)用之?dāng)?shù)據(jù)展現(xiàn)(一)

    FullCalendar日歷插件應(yīng)用之?dāng)?shù)據(jù)展現(xiàn)(一)

    fullcalendar作為一個功能完善的日歷插件使用非常廣泛,在web開發(fā)開發(fā)過程 中非常流行。它與ext js 中的calendar非常類似,但考慮到extjs 比較“復(fù)雜龐大”,所以我在開發(fā)開發(fā)過程中都會優(yōu)先考慮fullcalendar
    2015-12-12
  • 一個簡單的js漸顯(fadeIn)漸隱(fadeOut)類

    一個簡單的js漸顯(fadeIn)漸隱(fadeOut)類

    最近發(fā)現(xiàn)項目用的表單驗證不好使,干脆一邊參考人家的一邊自己寫了一個。在驗證有錯誤返回提示信息用到漸顯(fadeIn)漸隱(fadeOut)過渡(因為瀏覽器的效率實在太高了,一下就蹦了出來~~);
    2010-06-06
  • dedecms頁面如何獲取會員狀態(tài)的實例代碼

    dedecms頁面如何獲取會員狀態(tài)的實例代碼

    下面小編就為大家?guī)硪黄猟edecms頁面如何獲取會員狀態(tài)的實例代碼。一起跟隨小編過來看看吧,希望對大家有所幫助。
    2016-03-03
  • Javascript:為input設(shè)置readOnly屬性(示例講解)

    Javascript:為input設(shè)置readOnly屬性(示例講解)

    本篇文章主要是對Javascript中為input設(shè)置readOnly屬性的示例代碼進行了介紹。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • js用類封裝pop彈窗組件

    js用類封裝pop彈窗組件

    這篇文章主要為大家詳細介紹了js用類封裝pop彈窗組件的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • JS ES6中的管道運算符詳解

    JS ES6中的管道運算符詳解

    JavaScript 的管道是一個運算符,寫作|>,它的左邊是一個表達式,右邊是一個函數(shù),這篇文章主要介紹了ES6中的管道運算符,需要的朋友可以參考下
    2023-05-05

最新評論

广州市| 绥中县| 台湾省| 大英县| 安多县| 香河县| 临朐县| 鄱阳县| 阜宁县| 和顺县| 彰化市| 西藏| 克东县| 吴川市| 江永县| 寻乌县| 肇东市| 阿坝| 天等县| 定陶县| 海淀区| 海原县| 蒙阴县| 深州市| 开平市| 巨鹿县| 沅江市| 肥乡县| 吴堡县| 聊城市| 会泽县| 金门县| 曲靖市| 安泽县| 汤阴县| 龙里县| 松溪县| 南部县| 甘肃省| 余姚市| 洪湖市|