>  기사  >  웹 프론트엔드  >  html5 캔버스는 마우스 회전_html5 튜토리얼 기술을 따르는 화살표를 구현합니다.

html5 캔버스는 마우스 회전_html5 튜토리얼 기술을 따르는 화살표를 구현합니다.

WBOY
WBOY원래의
2016-05-16 15:51:422744검색

이 기사의 예는 모든 사람과 공유됩니다

XML/HTML 코드클립보드에 콘텐츠 복사
  1. >
  2. <html>
  3. <머리>
  4. <메타 문자 집합="utf- 8" />
  5. " X-ua 호환 "
  6. 콘텐츠 = " ie = edge " /// > <제목>캔버스는 마우스 회전을 따르는 화살표를 구현합니다 < ; /
  7. 제목
  8. >  <스타일>
  9. *{패딩: 0; 여백: 0}
  10.  스타일>
  11.  
  12. 머리>
  13. <>
  14. <캔버스 너비=
  15. "500"
  16. 높이="500" 스타일="테두리: 1px 솔리드 #555; 디스플레이: 블록;여백: 0 자동;">캔버스 >  <스크립트>
  17. var
  18. 화살표=함수 () {
  19.  
  20. this.x=0
  21. this.y=0;  
  22. this.color
  23. ="#f90"  
  24. this.rolation
  25. =0 }    
  26.         var 캔버스=문서.querySelector('canvas')   
  27.         var ctx=캔버스.getContext('2d');   
  28.         arrow.prototype.draw=기능 (ctx) {   
  29.            ctx.save();   
  30.             ctx.translate(this.x,this.y);   
  31.             ctx.rotate(this.rolation)   
  32.             ctx.fillStyle=이것.color;   
  33.            ctx.beginPath();   
  34.             ctx.moveTo(0, 15);   
  35.             ctx.lineTo(-50, 15);   
  36.             ctx.lineTo(-50, -15);   
  37.             ctx.lineTo(0,-15);   
  38.             ctx.lineTo(0,-35);   
  39.            ctx.lineTo(50,0);   
  40.             ctx.lineTo(0,35);   
  41.             ctx.closePath()   
  42.            ctx.fill();   
  43.            ctx.restore();   
  44.         }   
  45.         var 화살표=new 화살표();   
  46.         Arrow.x=캔버스.width/2;   
  47.         Arrow.y=캔버스.height/2;   
  48.            
  49.         var c_x,c_y; //상상对于캔버스坐标的位置;   
  50.         var isMouseDown=false;   
  51.         Arrow.draw(ctx)   
  52.         canvas.addEventListener('mousedown',function(e) {   
  53.             isMouseDown=true;   
  54.         },거짓)   
  55.         canvas.addEventListener('mousemove',function(e) {   
  56.             if(isMouseDown==true){   
  57.                c_x=getPos(e).x-canvas.offsetLeft;   
  58.                c_y=getPos(e).y-canvas.offsetTop;   
  59.                //setInterval(drawFram,1000/60)   
  60.                 requestAnimationFrame(drawFram)   
  61.             }   
  62.         },false)   
  63.         canvas.addEventListener('mouseup',function(e) {   
  64.             isMouseDown=false;   
  65.         },false)   
  66.         함수 drawFram(){   
  67.             var dx=c_x-Arrow.x;   
  68.             var dy=c_y-Arrow.y;   
  69.             Arrow.rolation=수학.atan2(dy,dx);   
  70.             ctx.clearRect(0,0,canvas.width,canvas.height);   
  71.             Arrow.draw(ctx)   
  72.         }   
  73.         함수 getPos(e) {   
  74.             var 마우스={x:0,y:0}   
  75.             var ee=e||event;   
  76.         
  77.             if(e.pageX||e.pageY){   
  78.                mouse.x=e.pageX;   
  79.                mouse.y=e.pageY;   
  80.             }그렇지 않으면{
  81. mouse.x=e.pageX document.body.scrollLeft document.document.documentElement.scrollLeft
  82. mouse.y=e.pageY document.body.scrollTop document.document.documentElement.scrollTop
  83.                                                     
  84. 마우스 반환
  85.                                                        
  86.  
  87. 스크립트>  > html> 데모 주소:
http://codepen.io/jonechen/pen/eZpgWd

말도 안 돼요. 바로 데모로 가보겠습니다. 이 효과는 달성하기 어렵지 않지만 참새만큼 작으며 관련된 주요 지식 포인트는 다음과 같습니다. 1. 캔버스의 기본 그리기

3. js 애니메이션

4. 캔버스에서 기본 적용;

위 내용은 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다.


원문:
http://www.cnblogs.com/jone-chen/p/5243439.html

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