関数を使用して.off()
イベントのバインドを解除できます: http://www.html5canvastutorials.com/kineticjs/html5-canvas-remove-event-listener-with-kineticjs/
そして、あなたはすでに関数の使い方を知ってい.on()
ます。
少し簡単にするために、.on()
関数をカスタム関数に入れます。この例では、それを呼び出しますbindTweenClick()
data
をクリックしたら、 を使用します.off('click')
。
クリックするbutton
と、トゥイーンが逆になり、イベントが再バインドされます。
function bindTweenClick() {
data.on('click', function () {
var layer = this.parent.parent;
var elements = layer.get(".element");
elements.each(function (element) {
myTween = new Kinetic.Tween({
node: elements[0],
angleDeg: 60,
easing: Kinetic.Easings.EaseInOut,
rotationDeg: 180
}).play();
myArray.push(myTween );
});
this.off('click');
})
}(); // <-- Self Invoke
button.on('click', function () {
for (var i = 0; i < myArray.length; i++) {
myArray[i].reverse();
}
bindTweenClick();
}, false);
サイドノート:
この前のスレッド Applied tween inside each() の markE からのコメントで示唆されているように、ユーザーがトゥイーンを複数回クリックできないようにするには、reverse() をどのように使用すればよいですか?
click
次に、この質問で求めているようにイベントのバインドを解除して再バインドする代わりに、 2 つのオプションを提案します。
ボタンを使用してトゥイーンを呼び出している場合は、トゥイーンが終了するまでボタンを非アクティブにしてから、ボタンをアクティブにします。これは、バインドを解除して再バインドするよりもクリーンです。
「再生」をクリックするたびに新しいトゥイーンを作成する代わりに、すべてのトゥイーンを作成して配列にプッシュします。次に、クリックですべてのトゥイーンを再生します。
elements = stage.get('Rect');
var tweenArray = [];
elements.each(function (element) {
var tween = new Kinetic.Tween({
node: element,
rotationDeg: 180
});
tweenArray.push(tween);
});
// reverse tween
document.getElementById('reverse').addEventListener('click', function () {
for (var i = 0; i < tweenArray.length; i++) {
tweenArray[i].reverse();
}
}, false);
// play tween forward
document.getElementById('play').addEventListener('click', function () {
for (var i = 0; i < tweenArray.length; i++) {
tweenArray[i].play();
}
}, false);
この方法では、毎回クリック時に新しい Tween を作成する必要がなく、問題のノードの位置が更新され、望ましくない tween 効果が発生します (そして が過密になりますtweenArray
) 。
元のjsfiddleを更新しました