이번에는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!