【问题标题】:Callback on .css function.css 函数回调
【发布时间】:2016-09-26 14:11:27
【问题描述】:

所以,我很熟悉不能在 jQuery 的 .css 函数上使用回调函数的事实。相反,我使用了setTimeout 函数:

$('#header-nav').css({'left': leftBstr});

posBstr = '.level' + posB.toString();
setTimeout(function(e){
    $('#header-nav ul' + posBstr).removeClass('menu-active');
}, 300);

此代码用于移动菜单动画。有两种类型的按钮:

  • 进一步进入菜单(子类别)
  • 返回(父类)

但是,在使用setTimeout功能时,当我点击太快时,菜单消失了,因为删除了menu-active类。

我已经尝试将 setTimeout 函数放在 var 中,并使用 clearTimeout 函数,但这不起作用。


我的问题:是否有另一种方法可以在不使用 setTimeout 的情况下在 .css 函数上重新创建回调函数?

【问题讨论】:

  • 也许使用.animate,因此使用 JS 而不是 css 类对其进行动画处理?
  • 嗯,我可以试试。但我也很想为其他情况找到回调替换器的解决方案:)
  • @evolutionxbox 出于某种原因 .animate 给了它一个延迟:/
  • @MaartenWolfsen 用于绑定过渡结束参见stackoverflow.com/questions/9255279/…

标签: javascript jquery html css callback


【解决方案1】:

您可以尝试使用promise

.promise() 方法返回一个动态生成的 Promise,一旦绑定到集合的特定类型的所有操作(无论是否排队)都结束,该 Promise 就会被解析。

$('.element').css("color","yellow").promise().done(function(){
    alert( 'color is yellow!' );
});

【讨论】:

  • 你还应该提到浏览器对承诺的支持..caniuse.com/#feat=promises
  • 效果很好,但问题是 .css('left') 动画需要 300 毫秒才能完成。我试图将 .delay(300) 添加到 .removeClass(),但这没有用。你知道解决办法吗?
  • 您实际上可以在 js 中为元素绑定过渡结束,然后在完成后将其删除。但是对于你想要做的事情,最好使用.animate
  • @Huangism 尝试了 .animate,但由于某种原因它给了动画延迟,看起来不是很流畅。如何绑定这些转换?
  • delay 用于动画。 done 函数的超时时间为 300 毫秒。这应该可以解决问题@MaartenWolfsen
猜你喜欢
  • 2013-01-12
  • 2014-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-13
相关资源
最近更新 更多