「毎週1時canvasアニメーション」-ユーザーインタラクション
9628 ワード
ユーザーインタラクションはcanvasアニメーションを学ぶ上でまず身につけなければならない部分かもしれません.結局、インタラクティブな入力やアニメーションへのダイナミックな入力がなければ、映画を見るのと何が違うのでしょうか.ユーザインタラクションは、イベントに基づいて、一般に、
1、イベントとイベント実行
イベントを理解する前に、
メソッド
これにより、canvasにマウスクリックイベントをバインドし、canvasでマウスを押すとコンソールに「Mouse pressed on element」が印刷されます.
では、追加イベント(
唯一注意しなければならないのは
次にcanvasにイベントを追加して削除する実験を行います
コンソールに「mouse down」が印刷されるかどうかを見ることができます.
2.マウスイベント
マウスイベントは、次のように分類されます. mousedown mouseup click dbclick mousewheel mouseover mouseout
各マウスイベントには、現在のマウスの位置を決定する2つのプロパティが含まれています:
この方法はDOM要素をパラメータとして入力し、canvasを入力するだけでマウスの現在のcanvasの位置を取得することができます.具体的なコードは以下の通りです.
Have a try!!!成功できるかどうか見てみましょう.
getBoundingClientRect()
実は、canvasのマウスの位置取得方法については、それ自体の方法
3、キーボードイベント
キーボードイベントは2つだけです. keydown keyup
マウスイベントをバインドするようにcanvasにキーボードイベントをバインドすることもできます.よし!次に、キーボードイベントをwindow(canvasに直接バインドしないのはなぜですか?考えてみましょう)にバインドする方法を見てみましょう.
マウスの方向キーを押すと、コンソールに適切な情報が印刷されているかどうかを試してみましょう.
4、タッチイベント
タッチイベントには、次の3つがあります. touchstart touchend touchmove
タッチの実践では、指がマウスの役割を果たしています.同じように私たちが最も関心を持っているのは、現在のタッチの位置です.
まとめ
このセクションでは、主にcanvasとインタラクティブなユーザーのさまざまなイベントについて説明します.重要なのは、自分のツール関数ファイルに次の2つの方法が含まれているはずです.
、
および
を含む.1、イベントとイベント実行
イベントを理解する前に、
listener
とhandler
とは何かを理解する必要があります.Listener(すなわちリスナー)は、イベントが発生したときに反応するかどうかを決定する.handler(実行者)は、イベントが発生したときに呼び出される関数です.はい、こんなにたくさんの直接コードを引っ張りました. element.addEventListener(type, handler[, useCapture]);
type:
handler:
useCapture: , false/true, /
メソッド
addEventListener
によって、ある要素にイベントを追加します.具体的には、私たちのcanvasではどのようなものですか.次に、canvasにmousedown
イベントをバインドします.具体的なコードは次のとおりです. canvas.addEventListener('mousedown', function(event){
console.log("Mouse pressed on element");
}, false)
これにより、canvasにマウスクリックイベントをバインドし、canvasでマウスを押すとコンソールに「Mouse pressed on element」が印刷されます.
では、追加イベント(
addEventListener
)がある以上、削除イベント(removeEventListener
)があり、追加イベントとほぼ同じように使用されます. element.removeEventListener(type, handler[, useCapture]);
type:
handler:
useCapture: , false/true, /
唯一注意しなければならないのは
handler
であり、イベントを削除する関数であり、ここでは関数名のみを書くことができ、イベントを追加するように機能関数全体を書き込むことはできない.すなわち、イベントを追加するときに、実行する必要がある関数をイベントリスニングの外に書き、名前を付けることができます.これにより、後続のコードでイベントを削除したい場合は、削除イベントのhandler
に直接関数名を入力することができます.次にcanvasにイベントを追加して削除する実験を行います
コンソールに「mouse down」が印刷されるかどうかを見ることができます.
2.マウスイベント
マウスイベントは、次のように分類されます.
各マウスイベントには、現在のマウスの位置を決定する2つのプロパティが含まれています:
pageX
およびpageY
です.pageX
およびpageY
およびcanvas要素のオフセット位置により、マウスがcanvas要素のどの位置にあるかを算出することができる.異なるブラウザの互換性を考慮するために、念のためclientX
とclientY
を使用することができます.ここでは、**utils.js**
というjsファイルを作成します.このファイルは私たちのツール関数で、私たちが繰り返し使用する方法が徐々に追加されます.では、私たちのツール関数に最初の方法captureMouse
を追加します.具体的なコードは以下の通りです.utils.js
// utils window ,
window.utils = {};
// utils
window.utils.captureMouse = function(element){
// mouse
var mouse = {x:0,y:0};
// mousemove
element.addEventListener('mousemove',function(event){
var x,y;
// ,
if(event.pageX||event.pageY){
x = event.pageX;
y = event.pageY;
}else{
x = event.clientX + document.body.scrollLeft +document.documentElement.scrollLeft;
y = event.clientY + document.body.scrollTop +document.documentElement.scrollTop;
}
// , canvas
x -= element.offsetLeft;
y -= element.offsetTop;
mouse.x = x;
mouse.y = y;
},false);
// mouse
return mouse;
}
この方法はDOM要素をパラメータとして入力し、canvasを入力するだけでマウスの現在のcanvasの位置を取得することができます.具体的なコードは以下の通りです.
window.onload = function(){
var canvas = document.getElementById('canvas'),
// canvas , x y
mouse = utils.captureMouse(canvas);
// canvas mousedown , canvas
canvas.addEventListener('mousedown',function(event){
console.log("x:" +mouse.x +",y:" + mouse.y);
});
Have a try!!!成功できるかどうか見てみましょう.
getBoundingClientRect()
実は、canvasのマウスの位置取得方法については、それ自体の方法
getBoundingClientRect
を適用することもできます.ここでは、使用することができますが、このシリーズでは主に上記のようなより広範な方法を使用しています.具体的なコードは以下のように参照できます. canvas.addEventListener('mousedown',function(event){
//event
var event = event || window.event;
// ,
var winX = event.clientX+document.body.scrollLeft +document.documentElement.scrollLeft || event.pageX;
var winY = event.clientY+document.body.scrollTop +document.documentElement.scrollTop || event.pageY;
//
var can = {x:0, y:0};
// getBoundingClientRect , , canvas left、 top、 width、 height
var canBox = canvas.getBoundingClientRect();
//(winX - canBox.left): , canvas
//(canvas.width/canBox.width): canvas.width canBox.width , 1. canvas , , canvas.width = 500, 1px , canBox.width = 502, 1 。 。
can.x = (winX - canBox.left)*(canvas.width/canBox.width);
can.y = (winY - canBox.top)*(canvas.height/canBox.height);
//
console.log(can.x,can.y);
},false);
3、キーボードイベント
キーボードイベントは2つだけです.
マウスイベントをバインドするようにcanvasにキーボードイベントをバインドすることもできます.よし!次に、キーボードイベントをwindow(canvasに直接バインドしないのはなぜですか?考えてみましょう)にバインドする方法を見てみましょう.
window.onload = function(){
//
function onKeyboard(event){
switch (event.keyCode){
case 38:
console.log('up!');
break;
case 40:
console.log('down!');
break;
case 37:
console.log('left!');
break;
case 39:
console.log('right!');
break;
default:
console.log(event.keyCode);
}
}
// window
window.addEventListener('keydown',onKeyboard,false);
}
マウスの方向キーを押すと、コンソールに適切な情報が印刷されているかどうかを試してみましょう.
4、タッチイベント
タッチイベントには、次の3つがあります.
タッチの実践では、指がマウスの役割を果たしています.同じように私たちが最も関心を持っているのは、現在のタッチの位置です.
captureMouse
メソッドと同様に、ここではツール関数ファイルに、captureTouch
というタッチ位置をキャプチャする新しいメソッドを追加する必要があります.現在utilsにあります.jsファイルに次の方法を追加します.utils.js
window.utils.captureTouch = function (element) {
var touch = {
x: null,
y: null,
isPressed: false,
event: null
};
var body_scrollLeft = document.body.scrollLeft,
element_scrollLeft = document.documentElement.scrollLeft,
body_scrollTop = document.body.scrollTop,
element_scrollTop = document.documentElement.scrollTop,
offsetLeft = element.offsetLeft,
offsetTop = element.offsetTop;
// touchstart
element.addEventListener('touchstart', function (event) {
touch.isPressed = true;
touch.event = event;
}, false);
// touchend
element.addEventListener('touchend', function (event) {
touch.isPressed = false;
touch.x = null;
touch.y = null;
touch.event = event;
}, false);
// touchmove
element.addEventListener('touchmove', function (event) {
var x, y,
touch_event = event.touches[0]; // touch
if (touch_event.pageX || touch_event.pageY) {
x = touch_event.pageX;
y = touch_event.pageY;
} else {
x = touch_event.clientX + body_scrollLeft + element_scrollLeft;
y = touch_event.clientY + body_scrollTop + element_scrollTop;
}
//
x -= offsetLeft;
y -= offsetTop;
touch.x = x;
touch.y = y;
touch.event = event;
}, false);
// touch
return touch;
};
まとめ
このセクションでは、主にcanvasとインタラクティブなユーザーのさまざまなイベントについて説明します.重要なのは、自分のツール関数ファイルに次の2つの方法が含まれているはずです.
utils.captureTouch
とutils.captureMouse
の2つの方法は、canvas要素に対する現在の位置を取得するためです.私たちは後の章で頻繁に使用します.もちろん、この2つの方法に加えて、私たちが使用しているrequestAnimationFrame
方法も互換性の問題に関連しているため、私たちはそれをutils.js
に一緒に追加します.具体的なコードはutils.js
ファイルを参照してください.次節では、三角関数の座標回転をお楽しみに!!!