Javascript 执行代码,但延迟';返回';JS中函数的定义

Javascript 执行代码,但延迟';返回';JS中函数的定义,javascript,return,delay,Javascript,Return,Delay,我是否能够延迟Javascript函数的返回,如果能够,如何延迟 例如,假设我使用JS设置一个使用CSS3转换的元素的背景,该转换需要1秒,我想在转换完成后(1秒后)返回函数 类似这样的代码(伪代码): 我希望这一切都有意义!提前谢谢你,非常感谢你的帮助 这可能对每个人看到实际的代码都有帮助:不,您不能这样做。在浏览器中,JavaScript和UI共享同一线程,因此在JavaScript代码完成执行之前,动画不会开始 如果要在动画完成后执行某些操作,请使用事件 不,你不能这样做。在浏览器中,Ja

我是否能够延迟Javascript函数的返回,如果能够,如何延迟

例如,假设我使用JS设置一个使用CSS3转换的元素的背景,该转换需要1秒,我想在转换完成后(1秒后)返回函数

类似这样的代码(伪代码):

我希望这一切都有意义!提前谢谢你,非常感谢你的帮助


这可能对每个人看到实际的代码都有帮助:

不,您不能这样做。在浏览器中,JavaScript和UI共享同一线程,因此在JavaScript代码完成执行之前,动画不会开始


如果要在动画完成后执行某些操作,请使用事件

不,你不能这样做。在浏览器中,JavaScript和UI共享同一线程,因此在JavaScript代码完成执行之前,动画不会开始


如果要在动画完成后执行某些操作,请使用事件

您不想延迟返回。您希望在一秒钟后执行回调

function (element) {
    element.style = 'background: #aaa; transition: all 1s ease-in;' 

    setTimeout(function () {
      // whatever you wanted to do with the element;
    }, 1000);
}

理想情况下,正如@AndyE所指出的,您不会在“一秒钟后”执行此操作,而是在
transitionend
事件发生时执行此操作。这更灵活,而且通常是正确的做法。不过,对该活动的跨浏览器支持还不成熟。根据您想要实现的目标,“一秒钟后”可能更容易实现。

您不想延迟返回。您希望在一秒钟后执行回调

function (element) {
    element.style = 'background: #aaa; transition: all 1s ease-in;' 

    setTimeout(function () {
      // whatever you wanted to do with the element;
    }, 1000);
}

理想情况下,正如@AndyE所指出的,您不会在“一秒钟后”执行此操作,而是在
transitionend
事件发生时执行此操作。这更灵活,而且通常是正确的做法。不过,对该活动的跨浏览器支持还不成熟。根据您想要实现的目标,“一秒钟后”可能更容易实现。

为函数提供回调函数,并在所需时间后执行该回调如何

function doSomething(callback){
  // execute your transition

  setTimeout(callback,1000);
}

实时示例:-您将看到它将当前时间输出到控制台,然后在一秒钟后执行相同的操作。

为函数提供回调函数,并在所需时间后执行该回调如何

function doSomething(callback){
  // execute your transition

  setTimeout(callback,1000);
}

实时示例:-您将看到它将当前时间输出到控制台,然后在一秒钟后执行相同的操作。

简而言之,您没有这样做(不是您不能让脚本等待,而是在web的JavaScript中,您不应该这样做,正如Andy E所说,浏览器可能与UI在同一线程中运行)。相反,在转换结束时调用了一个函数。浏览器中的JavaScript甚至服务器端JavaScript都应用了异步体系结构。如果你的脚本运行时间太长而没有返回,浏览器甚至会发出警告。哦,大家都知道,转换实际上只会持续1/3秒。。。为了简洁起见,我在本例中仅使用了1秒。简而言之,您不需要(不是您不能让脚本等待,而是在web JavaScript中,您不应该这样做,正如Andy E所说,浏览器可能与UI在同一线程中运行)。相反,在转换结束时调用了一个函数。浏览器中的JavaScript甚至服务器端JavaScript都应用了异步体系结构。如果你的脚本运行时间太长而没有返回,浏览器甚至会发出警告。哦,大家都知道,转换实际上只会持续1/3秒。。。为了简洁起见,我在本例中只使用了1秒。我确实希望延迟
返回<代码>元素
在每个函数的末尾返回,因此我可以“链接”函数(如jQuery中的链接)。只要
元素
返回
ed,下一个函数就会启动,因此我需要延迟
返回
。如果这绝对不能做到,我将不得不使用回调。谢谢你的意见@乔纳森:不,你想推迟下一个函数的启动。这里处理的是异步工作,必须停止以同步方式思考。异步函数总是立即返回。这是一件好事。您不使用返回值,而是使用回调。jQuery也是这样做的。在jQuery中,你可以链接像
$('#el').fadeOut().fadeIn()这样的效果,不是吗?一旦
fadeOut()
完成,jQuery如何处理仅触发
.fadeIn()
?这就是我基本上需要的那种东西!再次感谢你的帮助,我明白你的意思了@Jonathon:jQuery有一个效果队列。当您调用
fadeOut().fadeIn()
时,相应的函数被放置在队列上并一个接一个地调用(这是通过回调在内部处理的)。例如,如果要对
.fadeOut()
的完成做出反应,必须将回调作为参数传递。除非您使用自己的jQuery队列(您可以这样做,没有问题),否则您必须自己进行管道(即回调管理)。我确实希望延迟
返回<代码>元素
在每个函数的末尾返回,因此我可以“链接”函数(如jQuery中的链接)。只要
元素
返回
ed,下一个函数就会启动,因此我需要延迟
返回
。如果这绝对不能做到,我将不得不使用回调。谢谢你的意见@乔纳森:不,你想推迟下一个函数的启动。这里处理的是异步工作,必须停止以同步方式思考。异步函数总是立即返回。这是一件好事。您不使用返回值,而是使用回调。jQuery也是这样做的。在jQuery中,你可以链接像
$('#el').fadeOut().fadeIn()这样的效果,不是吗?一旦
fadeOut()
完成,jQuery如何处理仅触发
.fadeIn()
?这就是我基本上需要的那种东西!再次感谢您的支持