XML/HTML コードコンテンツをクリップボードにコピー
- >
- <html>
-
<頭>
-
<メタ charset="utf- 8" />
" X-ua 互換 "- コンテンツ = " ie =edge " /// >
<title>キャンバスはマウスの回転に従う矢印を実装します < ; /
タイトル-
>
<スタイル>
*{パディング: 0;マージン: 0} -
スタイル>
-
-
頭>
-
<ボディ>
- <キャンバス 幅=
"500" - 身長="500" スタイル="ボーダー: 1px ソリッド #555; 表示: ブロック;マージン: 0 自動;">キャンバス >
<スクリプト>
var -
arrow=function () {
-
this.x=0;
this.y-
=0;
this.color
=-
"#f90"
this.rolation
=-
0;
}
-
var canvas=document.querySelector('canvas')
-
var ctx=canvas.getContext('2d');
-
arrow.prototype.draw=関数 (ctx) {
-
ctx.save();
-
ctx.translate(this.x,this.y);
-
ctx.rotate(this.rolation)
-
ctx.fillStyle=this.color;
-
ctx.beginPath();
-
ctx.moveTo(0, 15);
-
ctx.lineTo(-50, 15);
-
ctx.lineTo(-50, -15);
-
ctx.lineTo(0,-15);
-
ctx.lineTo(0,-35);
-
ctx.lineTo(50,0);
-
ctx.lineTo(0,35);
-
ctx.closePath()
-
ctx.fill();
-
ctx.restore();
-
}
-
var Arrow=new arrow();
-
Arrow.x=canvas.width/2;
-
Arrow.y=canvas.height/2;
-
-
var c_x,c_y; // キャンバス座標の位置;
-
var isMouseDown=false;
-
Arrow.draw(ctx)
-
canvas.addEventListener('mousedown',function(e) {
-
isMouseDown=true;
-
},false)
-
canvas.addEventListener('mousemove',function(e) {
-
if(isMouseDown==true){
-
c_x=getPos(e).x-canvas.offsetLeft;
-
c_y=getPos(e).y-canvas.offsetTop;
-
//setInterval(drawFram,1000/60)
-
requestAnimationFrame(drawFram)
-
}
-
},false)
-
canvas.addEventListener('mouseup',function(e) {
-
isMouseDown=false;
-
},false)
-
関数 drawFram(){
-
var dx=c_x-Arrow.x;
-
var dy=c_y-Arrow.y;
-
Arrow.rolation=Math.atan2(dy,dx);
-
ctx.clearRect(0,0,canvas.width,canvas.height);
-
Arrow.draw(ctx)
-
}
-
関数 getPos(e) {
-
var マウス={x:0,y:0}
-
var ee=e||event;
-
-
if(e.pageX||e.pageY){
-
mouse.x=e.pageX;
-
mouse.y=e.pageY;
-
}else{
-
mouse.x=e.pageX document.body.scrollLeft document.document.documentElement.scrollLeft;
-
mouse.y=e.pageY document.body.scrollTop document.document.documentElement.scrollTop;
-
マウスを返す -
-
- スクリプト>
- ボディ>
- html>
デモのアドレス:
http://codepen.io/jonechen/pen/eZpgWd
ナンセンスではありません。すぐにデモに進みましょう。この効果を達成するのは複雑ではありませんが、スズメと同じくらい小さく、関係する主な知識ポイントは次のとおりです。
1. キャンバスの基本的な描画;
3. キャンバスでの三角関数の基本的な応用;