Home  >  Article  >  Web Front-end  >  JS+canvas operates gif animation

JS+canvas operates gif animation

php中世界最好的语言
php中世界最好的语言Original
2018-04-18 15:11:465175browse

This time I bring you JS canvasOperation gif animation, what are the precautions for operating gif animation with JS canvas, the following is a practical case, let’s come together take a look.

HTML5 canvas can read image information and draw the current image. Therefore, many picture special effects can be realized, such as picture mosaic, blur, color value filtering, etc. We don’t need to be so complicated here, we just need to read our picture and redraw it.

HTML code:

<imgid="testImg"src="xxx.gif"width="224"height="126">
<p><inputtype="button"id="testBtn"value="停止"></p>

JS code:

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

The above code has not been tested in detail, and possible experience problems (IE flickering) have not been specifically dealt with (indicating the impact principle). If you want to actually use it, you need to fine-tune it yourself.

insufficient:

1. IE9 support. IE7/IE8 does not support canvas.

2. You can only stop the gif, but you cannot pause it in the real sense. Because the gif image information obtained by canvas is the information of the first frame, it seems that the subsequent ones cannot be obtained. To achieve pause instead of stop, further research is needed. If you have a method, you are very welcome to share it.                                                            

I believe you have mastered the method after reading the case in this article. For more exciting information, please pay attention to other related articles on the php Chinese website!

Recommended reading:

Combining HTML tags with DOM nodes

js prohibits browser back events

The above is the detailed content of JS+canvas operates gif animation. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn