>  기사  >  웹 프론트엔드  >  HTML5 캔버스를 사용하여 스크래치 카드 effect_javascript 기술 달성

HTML5 캔버스를 사용하여 스크래치 카드 effect_javascript 기술 달성

WBOY
WBOY원래의
2016-05-16 15:40:301909검색

먼저 효과를 보여드리겠습니다:

데모 보기 소스 코드 다운로드

스크래치 카드를 사용해 본 적이 있나요? 우연히 상을 받을 수 있는 종류. 오늘은 HTML5 기술을 기반으로 한 스크래치 카드 효과를 공유하겠습니다. PC에서는 마우스를 누르고 있기만 하면 됩니다. 모바일에서는 손가락을 누른 채 레이어를 살짝 긁어내면 실제 스크래치를 시뮬레이션할 수 있습니다. 효과.

HTML5 Canvas와 그것이 제공하는 API를 결합하여 Canvas 요소에 회색 마스크 레이어를 그린 다음 사용자의 마우스 움직임과 제스처를 감지하여 투명한 그래픽을 그려서 Canvas 배경을 볼 수 있도록 합니다. 실제 사진은 스크래치 카드 효과를 얻을 수 있습니다.

HTML

페이지에 캔버스 태그 요소만 추가하면 되고 나머지는 JavaScript에 따라 다릅니다. 캔버스 요소는 HTML5에 고유한 요소이며 HTML5를 지원하는 최신 브라우저에서 실행됩니다.

<canvas></canvas> 

자바스크립트

우선 페이지의 마우스 선택 및 드래그 이벤트를 비활성화해야 합니다. 즉, 선택 작업을 실행하지 않아야 합니다.

var bodyStyle = document.body.style; 
bodyStyle.mozUserSelect = 'none'; 
bodyStyle.webkitUserSelect = 'none'; 

그런 다음 이미지 클래스를 정의하고 캔버스 요소를 얻은 다음 배경 및 위치 속성을 설정합니다. 이 예에서는 두 개의 무작위 사진을 사용하고 매번 무작위 사진을 배경으로 새로 고칩니다.

var img = new Image(); 
var canvas = document.querySelector('canvas'); 
canvas.style.backgroundColor='transparent'; 
canvas.style.position = 'absolute'; 
var imgs = ['p_0.jpg','p_1.jpg']; 
var num = Math.floor(Math.random()*2); 
img.src = imgs[num]; 

그런 다음 이미지가 로드된 것으로 감지되면 먼저 몇 가지 속성과 기능을 정의합니다. eventDown()은 언론 이벤트와 eventUp()을 정의하는 데 사용됩니다. event를 정의하고, eventMove()를 누르면 좌표 변위를 얻어서 arc(x, y, 10, 0, Math.PI * 2)를 통해 작은 점이 그려지는 이동 이벤트를 정의합니다.

img.addEventListener('load', function(e) { 
 var ctx; 
 var w = img.width, 
  h = img.height; 
 var offsetX = canvas.offsetLeft, 
  offsetY = canvas.offsetTop; 
 var mousedown = false; 
 function layer(ctx) { 
  ctx.fillStyle = 'gray'; 
  ctx.fillRect(0, 0, w, h); 
 } 
 function eventDown(e){ 
  e.preventDefault(); 
  mousedown=true; 
 } 
 function eventUp(e){ 
  e.preventDefault(); 
  mousedown=false; 
 } 
 function eventMove(e){ 
  e.preventDefault(); 
  if(mousedown) { 
    if(e.changedTouches){ 
     e=e.changedTouches[e.changedTouches.length-1]; 
    } 
    var x = (e.clientX + document.body.scrollLeft || e.pageX) - offsetX || 0, 
     y = (e.clientY + document.body.scrollTop || e.pageY) - offsetY || 0; 
    with(ctx) { 
     beginPath() 
     arc(x, y, 10, 0, Math.PI * 2);//绘制圆点 
     fill(); 
    } 
  } 
 } 
 //... 
}); 

마지막으로 캔버스를 통해 위 함수를 호출하고, 그래픽을 그리고, 터치 및 마우스 이벤트를 수신하고, 해당 함수를 호출합니다.

img.addEventListener('load', function(e) { 
 //..接上段代码 
 canvas.width=w; 
 canvas.height=h; 
 canvas.style.backgroundImage='url('+img.src+')'; 
 ctx=canvas.getContext('2d'); 
 ctx.fillStyle='transparent'; 
 ctx.fillRect(0, 0, w, h);//绘制矩形 
 layer(ctx); 
 ctx.globalCompositeOperation = 'destination-out'; 
 canvas.addEventListener('touchstart', eventDown); 
 canvas.addEventListener('touchend', eventUp); 
 canvas.addEventListener('touchmove', eventMove); 
 canvas.addEventListener('mousedown', eventDown); 
 canvas.addEventListener('mouseup', eventUp); 
 canvas.addEventListener('mousemove', eventMove); 

위 내용은 참고용일 뿐입니다. 실제 상황과 백그라운드 프로그램 및 데이터베이스를 결합하여 실제 스크래치를 완성할 수 있습니다. 위 내용은 스크래치 카드 효과를 구현하기 위해 HTML5 Canvas를 사용하여 작성한 내용입니다.

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