Javascript digabungkan dengan kanvas untuk mencapai kemahiran effect_javascript putaran imej

WBOY
Lepaskan: 2016-05-16 16:01:33
asal
1259 orang telah melayarinya

Di Weibo, kami boleh memutarkan gambar ke kiri, kanan, dsb., supaya pengguna dapat menghargai kesan gambar dari perspektif yang berbeza. Artikel ini akan menggunakan contoh untuk menerangkan kepada anda cara menggunakan Javascript dan teknologi berkaitan untuk mencapai kesan putaran imej. Kami menggunakan teg kanvas HTML5 untuk memutar imej Untuk penyemak imbas seperti IE6, 7 dan 8 yang tidak menyokong HTML5, kami menggunakan kesan penapis unik IE untuk mencapai penggiliran imej.

HTML

Kami meletakkan gambar pada halaman, meletakkan dua butang di atas gambar, dan memanggil fungsi rotate() melalui acara onclick untuk mengawal gambar untuk berputar ke kiri atau kanan.

<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> 
Salin selepas log masuk

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)&#63; n=3:n--; 
  }else if(arr=='right'){ 
    (n==3)&#63; n=0:n++; 
  } 
  img.setAttribute('step',n); 
  ... 
} 
Salin selepas log masuk

Kami menulis fungsi tersuai rotate(), di mana parameter obj mewakili id ​​objek imej yang akan diputar dan parameter arr mewakili arah putaran, dengan dua nilai tetap: kiri (ke kiri) dan kanan (ke kanan). Kami menetapkan pembolehubah n untuk merekodkan empat keadaan putaran atas, bawah, kiri dan kanan Apabila mengklik butang putar, keadaan putaran berterusan boleh dijamin, iaitu, setiap putaran diputar semula berdasarkan operasi putaran terakhir.

Kemudian, kami perlu melakukan pemprosesan yang berbeza mengikut penyemak imbas yang berbeza, anda boleh menggunakan penapis unik mereka untuk mencapai kesan putaran Walaupun kami tidak mengesyorkan menggunakan penapis, agar serasi dengan versi IE yang lebih lama , Kami terpaksa kembali kepada pisau lama ini.

function rotate(obj,arr){ 
  ... 
  //对IE浏览器使用滤镜旋转 
  if(document.all) { 
    img.style.filter = 'progid:DXImageTransform.Microsoft.BasicImage(rotation='+ n +')'; 
  // 对现代浏览器写入HTML5的元素进行旋转: canvas 
  }else{ 
    ... 
  } 
} 
Salin selepas log masuk

Dalam kod, kami menggunakan document.all untuk menentukan sama ada ia adalah pelayar IE, dan jika ya, gunakan penapis Untuk penyemak imbas moden seperti Firefox dan Chrome, kami menggunakan kanvas untuk mencapai kesan putaran.

function rotate(obj,arr){ 
  ... 
  // 对现代浏览器写入HTML5的元素进行旋转: 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; 
    }; 
  } 
} 
Salin selepas log masuk

Dalam kod, kami mencipta objek elemen kanvas dan menetapkan imej kepada objek kanvas Apabila pembolehubah n berada dalam keadaan berbeza (atas, bawah, kiri dan kanan), kanvas digunakan untuk melukis semula imej. .

Sudah tentu, terdapat satu lagi penyelesaian untuk mencapai kesan putaran imej, iaitu memintas HTML5 dan menyasarkan pelayar yang berbeza Sebagai contoh, di bawah Firefox, anda boleh menggunakan -moz-transform: rotate() untuk webkit gunakan -webkit-transform: rotate (); Tetapi ini tidak sebaik pelaksanaan kanvas html5.

Di atas adalah semua kandungan yang dikongsi dengan anda dalam artikel ini saya harap anda akan menyukainya.

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!