JQuery在哪里为.fadeIn和.fadeOut()调用setInterval?

时间:2012-03-17 00:06:45

标签: javascript jquery

这是fadeIn()的source viewer但由于某种原因它没有链接到custom()。

另外,作为第二个问题,如何概念化所有这些代码...有很多函数调用,我甚至无法猜测当你调用.fadeIn()或.fadeOut时实际运行了多少代码()。

例如:

fadeIn()来电animate(),调用speed()来调用extend() ......

作为第三个问题:这是面向对象的编程吗?

感谢。

3 个答案:

答案 0 :(得分:1)

它不使用setTimeout(),它使用的setInterval()位于custom()中,在animate()方法的底部调用。

这是一个很好的教程:http://www.schillmania.com/content/projects/javascript-animation-1/

如教程中所述,setTimeout()计划在调用setTimeout()函数后的一定时间内发生事件。问题是计划的函数运行需要一些时间,因此下一个超时将在第一个超时的延迟和执行代码所花费的时间之后进行调度。

如果你想:

100ms : function x called 
200ms : function x called 
300ms : function x called 
400ms : function x called

你做了:

function x(){
    setTimeout( x , 100);
}
setTimeout( x , 100);

将要发生的事情是:

100ms : function x called
first calls execution time + 200ms : function x called
second calls execution time + first calls execution time + 300ms : function x called
third calls execution time + second calls execution time + first calls execution time + 400ms : function x called

所以你这样做:

function x(){

}
setInterval( x , 100);

答案 1 :(得分:1)

毫无疑问,这种面向对象的编程。函数式编程完全不同(通常看起来也非常不同,搜索pythonhaskell)。我认为你的意思是“命令式编程”(如C),它不是函数式编程,但也没有对象。

jQuery还支持继承,类似于JavaScripts本机原型继承。

答案 2 :(得分:0)

setInterval通常是一个不好的选择。这是因为一旦设置了一个间隔,它将尝试每N毫秒执行一次,无论现有线程如何进行 - 所以如果你的浏览器已经窒息了一些重大问题,那么setInterval将添加到那个。你必须长时间地考虑使用setInterval,尤其是使用较旧的,线程感知较少的浏览器。更多信息:https://stackoverflow.com/a/5479821/1238884

setTimeout通常更好,因为你只是在你的过程完成时排队下一个超时 - 这样的事情有时会更好:

function foo(params) {
  // do stuff here that might block or take time
  setTimeout(function() {
      foo(params);
  }, 1234);
}