>  기사  >  웹 프론트엔드  >  JS+canvas는 gif 애니메이션을 운영합니다.

JS+canvas는 gif 애니메이션을 운영합니다.

php中世界最好的语言
php中世界最好的语言원래의
2018-04-18 15:11:465175검색

이번에는 gif 애니메이션 작업을 위한 JS+canvas를 가져왔습니다. JS+canvas를 사용한 gif 애니메이션 작업 시 주의사항은 무엇인지 살펴보겠습니다.

HTML5 캔버스는 이미지 정보를 읽고 현재 이미지를 그릴 수 있습니다. 따라서 사진 모자이크, 흐림 효과, 색상 값 필터링 및 기타 다양한 사진 특수 효과를 얻을 수 있습니다. 여기서는 너무 복잡할 필요가 없습니다. 그림을 읽고 다시 그리면 됩니다.

HTML 코드:

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

JS 코드:

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 ='停止';
  }
 };
}

위의 코드는 세부적으로 테스트되지 않았으며, 발생할 수 있는 경험 문제(IE 깜박임)가 구체적으로 처리되지 않았습니다(충격 원리를 나타냄). 실제로 사용하려면 직접 미세 조정해야 합니다.

단점:

1. IE9+ 지원. IE7/IE8은 캔버스를 지원하지 않습니다.

2. 실제 일시정지가 아닌 gif만 중지할 수 있습니다. 캔버스에서 얻은 gif 이미지 정보는 첫 번째 프레임의 정보이기 때문에 다음 프레임은 얻을 수 없는 것 같습니다. 정지 대신 정지를 달성하려면 추가 연구가 필요합니다. 방법이 있으면 공유해 주시기 바랍니다.                                         나는 당신이 이 기사를 읽는 방법을 마스터했다고 믿습니다. 더 흥미진진한 내용을 알고 싶다면 PHP 중국어 웹사이트의 다른 관련 기사를 주목해 보세요!

추천 자료:

HTML 태그와 DOM 노드 결합


js는 브라우저 뒤로 이벤트를 금지합니다


위 내용은 JS+canvas는 gif 애니메이션을 운영합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.