Jquery plugins 如何在jquery插件中使用事件和事件处理程序?

Jquery plugins 如何在jquery插件中使用事件和事件处理程序?,jquery-plugins,event-handling,jquery,Jquery Plugins,Event Handling,Jquery,我正在triyng中构建一个简单的动画jQuery插件。其主要思想是获取一个元素并以某种方式在一个固定的间隔内重复操作它,这将是动画的fps 我想通过各种活动来实现这一点。我希望通过触发事件来重复某些操作,而不是使用for()或while()之类的循环。这背后的想法是:我最终希望能够在某些事件上调用多个动作,比如在第一个动画完成时启动第二个动画,或者甚至在某一帧上有一个动画序列时启动它 现在我尝试了以下(插件的非常简化版本): 然后——什么也没发生。不会触发任何事件。我的问题:为什么?在jQue

我正在triyng中构建一个简单的动画jQuery插件。其主要思想是获取一个元素并以某种方式在一个固定的间隔内重复操作它,这将是动画的fps

我想通过各种活动来实现这一点。我希望通过触发事件来重复某些操作,而不是使用for()或while()之类的循环。这背后的想法是:我最终希望能够在某些事件上调用多个动作,比如在第一个动画完成时启动第二个动画,或者甚至在某一帧上有一个动画序列时启动它

现在我尝试了以下(插件的非常简化版本):

然后——什么也没发生。不会触发任何事件。我的问题:为什么?在jQuery插件中不可能使用这样的事件吗?我是否必须在$(document).ready()中“手动”触发它们(我不喜欢这样,因为这是一件完全不同的事情——从插件外部控制动画。相反,我希望使用插件内部的事件在插件内部具有某种程度的“自我控制”)。 我觉得我缺少了一些关于定制事件的基本信息(注意:我对这一点还很陌生)以及如何使用它们

谢谢你的帮助

解决方案:

事件处理和触发实际上是有效的,我只需首先调用checkProgress函数:

而不是

return this.each(function() {
  setup(obj);
  checkProgress(obj);
});
我必须这样做:

return this.each(function() {
  checkProgress(obj);
  setup(obj);
});

因此,必须在触发任何事件之前调用事件侦听函数,这当然是非常有意义的…

您需要在DOM模型上设置事件,例如:

$('#foo').bind('custom', function(event, param1, param2) {
    alert('My trigger')

});

$('#foo').on('click', function(){  $(this).trigger('custom');});​
你应该知道他什么时候应该扣动你的扳机


请注意,在您的插件中,您不调用任何内部函数-
仅声明

您需要在DOM模型上设置事件,例如:

$('#foo').bind('custom', function(event, param1, param2) {
    alert('My trigger')

});

$('#foo').on('click', function(){  $(this).trigger('custom');});​
你应该知道他什么时候应该扣动你的扳机



请注意,在您的插件中,您不调用任何内部函数-
仅声明

您创建了新事件,但我看不到该在何时触发它们。使用click等,在它的主体中触发自定义事件您的代码仅声明,但如何以及何时触发它们?您可以在任何脚本中使用触发器,无论它是否依赖于小部件。Widget也是js)))也许这是我对事件的理解不正确的地方,但我认为事件将通过触发器()通过函数触发,首先调用setup()作为返回。每个()元素都没有事件“allSetup”、“stepDone”和“startOver”,所以它们不起作用。您应该使用“本机”事件鼠标器、键盘等。本机事件是自定义事件的桥接器。例如:$('.elemt').on('mouseover',function(){$(this.trigger('startOver')})现在我完全搞糊涂了。就在这里:trigger()的用法如下:$('#foo').bind('custom',function(event,param1,param2){alert(param1+“\n”+param2);})$(“#foo”).trigger('custom',['custom','Event']);-没有使用本机事件…您创建了新事件,但我看不到应该在何时触发这些事件。使用click等,在它的主体中触发自定义事件您的代码仅声明,但如何以及何时触发它们?您可以在任何脚本中使用触发器,无论它是否依赖于小部件。Widget也是js)))也许这是我对事件的理解不正确的地方,但我认为事件将通过触发器()通过函数触发,首先调用setup()作为返回。每个()元素都没有事件“allSetup”、“stepDone”和“startOver”,所以它们不起作用。您应该使用“本机”事件鼠标器、键盘等。本机事件是自定义事件的桥接器。例如:$('.elemt').on('mouseover',function(){$(this.trigger('startOver')})现在我完全搞糊涂了。就在这里:trigger()的用法如下:$('#foo').bind('custom',function(event,param1,param2){alert(param1+“\n”+param2);})$(“#foo”).trigger('custom',['custom','Event']);-没有使用本机事件…因此通过函数触发事件不起作用?因为这就是我想要做的。。。我不希望任何鼠标或键盘事件触发我的事件。。。当您查看我的代码时:我首先声明了函数setup(),在该函数中,事件'allSetup'在函数末尾被激发。该函数在插件的返回this.each()函数中被调用,该函数在$(document.ready()函数中的my dom元素上使用插件时被调用。根据我的理解,“allSetup”事件应该在dom准备就绪并且插件用于dom元素时触发……或者换句话说,您的示例也应该像$(“#foo”).dosomejquerysuffhere().trigger('custom');还是我错了?啊,好吧,那么有可能‘doSomejQueryStuffHere()’阻止触发器()调用我的dom对象上的事件?顺便说一句,你错了,我不仅声明了我调用的函数,还调用了“return this.each(function(){})”中的相关函数(你必须在示例代码框中向下滚动一点,也许你还没有看到这一点)。正如您在我编辑的问题中所看到的,我找到了解决方案(这相当平庸)。但是thx还是需要您的帮助。那么通过函数触发事件不起作用吗?因为这就是我想要做的。。。我不希望任何鼠标或键盘事件触发我的事件。。。当您查看我的代码时:我首先声明了函数setup(),在该函数中,事件'allSetup'在函数末尾被激发。该函数在插件的返回this.each()函数中被调用,该函数在$(document.ready()函数中的my dom元素上使用插件时被调用。根据我的理解,“allSetup”事件应该在dom准备就绪并且插件用于dom元素时触发……或者换句话说,您的示例也应该像$(“#foo”).dosomejquerysuffhere().trigger('custom');还是我错了?啊,好吧,那么有可能是“doSomejQuer”
$('#foo').bind('custom', function(event, param1, param2) {
    alert('My trigger')

});

$('#foo').on('click', function(){  $(this).trigger('custom');});​