私がやろうとしているのは、マウスボタンを押している間、別の関数を継続的に呼び出す関数を作成することです。.call()とコールバックをよりよく理解できるようにするためにこれを行っています。これが私のコードです:
jQuery.fn.contmousedown = function(mousedownCallback){
var interval, self = this;
jQuery(this).mousedown(function(event){
interval = setInterval(function(self, event){
mousedownCallback.call(self, event);
console.log('on');
},0);
});
jQuery(this).mouseup(function(event){
clearInterval(interval);
});
}
$(document).contmousedown(function(e){
$('#run').html(e.pageX+', '+e.pageY);
});
そして、私が受け取るエラーは次のとおりです。
Uncaught TypeError: Cannot read property 'pageX' of undefined
そしてもちろん、私はそれを毎秒約300倍受け取っています。:)間隔宣言行をに変更するinterval = setInterval(function(self){
と、毎秒約300倍でコンソールに「オン」ログが記録されますが、イベントは失われます。だから私の質問は、関数をコールバックしてイベントパラメータを渡すことができるようにするにはどうすればよいですか?
例-http://jsfiddle.net/ZxKxD/
通勤中の家でこれを考えて、両方のイベントを続けておくといいと思いました。これが私の最終的なコードです:
jQuery.fn.mousehold = function(mousedownCallback){
var interval, self = this, move_event;
jQuery(this).mousemove(function(e){
move_event = e;
});
jQuery(this).mousedown(function(click_event){
interval = setInterval(function(){
mousedownCallback.call(self, click_event, move_event);
},0);
});
jQuery(this).mouseup(function(){
clearInterval(interval);
});
jQuery(this).mouseout(function(){
clearInterval(interval);
});
}
$(document).mousehold(function(click_event, move_event){
$('#run').html(click_event.pageX+':'+move_event.pageX+', '
+click_event.pageY+':'+move_event.pageY);
});