在开始一个将循环自身的函数之前延迟6秒,小,不工作,为什么
Delay 6 seconds before beginning a function that will loop itself, small, not working, why?
我试图在heartColor(e)
函数开始之前创建一个6秒的延迟,然后函数将继续循环。我不明白为什么它立即启动功能,而没有等待它应该等待的6秒,我做错了什么?
function heartColor(e) {
e.animate({
color: '#7ea0dd'
}, 1000).animate({
color: '#986db9'
}, 1000).animate({
color: '#9fc54e'
}, 1000, function(){
heartColor(e)
})
}
$('.something').hover(function(){
setTimeout(heartColor($(this)), 6000);
})
setTimeout()
函数希望其第一个参数是函数引用(或字符串,但出于多种原因不建议使用)。您不是在给它传递函数引用,而是在调用heartColor()
函数并将结果传递给setTimeout()
。因此,该函数立即执行,六秒钟后什么也没发生,因为返回值未定义,所以setTimeout()
没有任何可处理的内容。
试试这个:
$('.something').hover(function(){
var $this = $(this);
setTimeout(function() {
heartColor($this);
}, 6000);
})
我之所以包含一个匿名函数作为setTimeout
的参数,是因为您对heartColor()
的调用需要传递一个参数。如果它没有任何参数,你可以这样做:
setTimeout(heartColor, 6000);
请注意,heartColor
后面没有括号,它可以在不调用的情况下引用函数,以便稍后setTimeout
为您调用它。但是您不能同时获得对该函数的引用和提供参数,因此需要将调用封装在另一个函数中。你可以这样做:
var $this = $(this);
function callHeartColor() {
heartColor($this);
}
setTimeout(callHeartColor, 6000);
我最初使用匿名功能的答案有点简单,而且(大多数人觉得)更方便。
我之所以创建一个变量$this
,是因为this
关键字在JavaScript中的工作方式,这取决于函数的调用方式。如果您只是在匿名函数(或callHeartColor()
函数)中说heartColor($(this))
,则this
不会是悬停在上面的元素。
您正在调用函数heartColor,而不是将其作为参数传递。你必须做:
$('.something').hover(function(){
setTimeout(function(){heartColor($(this))}, 6000);
})
您想要的是:
$('.something').hover(function(){
setTimeout(function() {heartColor($(this));}, 6000);
})
相关文章:
- 如何延迟函数
- 如何在 JS 中调用 2 次或更多次时延迟函数执行
- jQuery/Javascript 延迟函数的执行,直到多个函数完成
- 如何按顺序调用延迟函数
- 使用promise或setTimeout确定延迟函数的调用顺序
- 如何在 QML 中创建延迟函数
- jQuery deferred:用于延迟函数的返回,直到函数内的异步调用完成+获取返回值
- 如何在 AJAX 函数中添加延迟函数
- 节点 js 从客户端和另一个节点模块调用相同的延迟函数
- 如何对延迟函数执行单元测试
- 延迟函数执行(API 调用)以在时间段内执行 n 次
- 延迟函数删除类
- 链接延迟函数
- js,延迟函数
- RxJS 和 React 的 setState - 延迟函数执行直到订阅
- Javascript 延迟函数,但让循环等待它
- 如何延迟函数以使其完全加载
- Javascript延迟函数
- 试图理解延迟函数的语法
- 在流畅的Javascript API中延迟函数的返回