首頁 web前端 js教程 詳解如何使用JS和canvas實現gif動圖的停止和播放

詳解如何使用JS和canvas實現gif動圖的停止和播放

Sep 02, 2017 pm 02:12 PM
canvas javascript 實現

這篇文章主要介紹了使用JS和canvas實現gif動圖的停止和播放程式碼,非常具有實用價值,需要的朋友可以參考下

HTML5 canvas可以讀取圖片訊息,繪製當前圖片。於是可以實現圖片馬賽克,模糊,色值過濾等很多圖片特效。我們這裡不用那麼複雜,只要讀取我們的圖片,重繪下就可以。


HTML程式碼:


#
<img id="testImg" src="xxx.gif" width="224" height="126">
<p><input type="button" id="testBtn" value="停止"></p>
登入後複製

JS程式碼:


if (&#39;getContext&#39; in document.createElement(&#39;canvas&#39;)) {
 HTMLImageElement.prototype.play = function() {
  if (this.storeCanvas) {
   // 移除存储的canvas
   this.storeCanvas.parentElement.removeChild(this.storeCanvas);
   this.storeCanvas = null;
   // 透明度还原
   image.style.opacity = &#39;&#39;;
  }
  if (this.storeUrl) {
   this.src = this.storeUrl; 
  }
 };
 HTMLImageElement.prototype.stop = function() {
  var canvas = document.createElement(&#39;canvas&#39;);
  // 尺寸
  var width = this.width, height = this.height;
  if (width && height) {
   // 存储之前的地址
   if (!this.storeUrl) {
    this.storeUrl = this.src;
   }
   // canvas大小
   canvas.width = width;
   canvas.height = height;
   // 绘制图片帧(第一帧)
   canvas.getContext(&#39;2d&#39;).drawImage(this, 0, 0, width, height);
   // 重置当前图片
   try {
    this.src = canvas.toDataURL("image/gif");
   } catch(e) {
    // 跨域
    this.removeAttribute(&#39;src&#39;);
    // 载入canvas元素
    canvas.style.position = &#39;absolute&#39;;
    // 前面插入图片
    this.parentElement.insertBefore(canvas, this);
    // 隐藏原图
    this.style.opacity = &#39;0&#39;;
    // 存储canvas
    this.storeCanvas = canvas;
   }
  }
 };
}
 
var image = document.getElementById("testImg"), 
 button = document.getElementById("testBtn");
 
if (image && button) {
 button.onclick = function() {
  if (this.value == &#39;停止&#39;) {
   image.stop();
   this.value = &#39;播放&#39;;
  } else {
   image.play();
   this.value = &#39;停止&#39;;
  }
 };
}
登入後複製

上面程式碼並未詳盡測試,以及可能的體驗問題(IE閃動)沒有具體處理(影響原理示意),若要實際使用,需要自己再微調完美下。

不足:

1. IE9+支援。 IE7/IE8不支援canvas沒搞頭。

2. 只能停止gif,不能真正意義的暫停。因為canvas獲得的gif圖片資訊為第一幀的信息,後面的貌似獲取不到。要實現暫停,而不是停止,還需要進一步研究,如果你有方法,非常歡迎分享。

以上是詳解如何使用JS和canvas實現gif動圖的停止和播放的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

華為手機如何實現雙微信登入? 華為手機如何實現雙微信登入? Mar 24, 2024 am 11:27 AM

華為手機如何實現雙微信登入?

如何在華為手機上實現微信分身功能 如何在華為手機上實現微信分身功能 Mar 24, 2024 pm 06:03 PM

如何在華為手機上實現微信分身功能

PHP程式設計指南:實作斐波那契數列的方法 PHP程式設計指南:實作斐波那契數列的方法 Mar 20, 2024 pm 04:54 PM

PHP程式設計指南:實作斐波那契數列的方法

掌握Golang如何實現遊戲開發的可能性 掌握Golang如何實現遊戲開發的可能性 Mar 16, 2024 pm 12:57 PM

掌握Golang如何實現遊戲開發的可能性

PHP遊戲需求實作指南 PHP遊戲需求實作指南 Mar 11, 2024 am 08:45 AM

PHP遊戲需求實作指南

如何在Golang中實現精確除法運算 如何在Golang中實現精確除法運算 Feb 20, 2024 pm 10:51 PM

如何在Golang中實現精確除法運算

利用Golang實現資料導出功能詳解 利用Golang實現資料導出功能詳解 Feb 28, 2024 pm 01:42 PM

利用Golang實現資料導出功能詳解

使用PHP實作SaaS:全面解析 使用PHP實作SaaS:全面解析 Mar 07, 2024 pm 10:18 PM

使用PHP實作SaaS:全面解析

See all articles