在前一行代码完成后运行一行jQuery
Run a line of jQuery after the previous one is complete
我有两行jQuery,我需要在前一行完成后运行其中一行。
我知道js是逐行读取的,但是第二行发生得太快了。
我不能使用jQuery回调,因为不幸的是这些函数没有。
我试着做一个setTimeout()
等待500ms, 1000ms和1600ms,但它似乎没有工作。从视觉上看,第二行发生在第一行完成之前。
在第一个选择器中使用的元素有一个1s的css过渡,我希望它结束,然后第二行出现。
是否可以这样做:
如果转换完成,运行js否则等待,然后检查转换是否完成,如果完成则运行js.
下面是js的两行代码:$('#searchInput').removeClass('slideBack').css('top', 0);
$('#headerTopBar').css('position', 'relative').hide();
如果你想等待CSS转换完成,那么你需要为正在进行转换的对象上的CSS transitionend
事件使用eventListener。然后,它将提供一个事件处理程序回调,您可以在CSS转换完成后执行第二行代码。
$('#searchInput').one("transitionend", function(e) {
$('#headerTopBar').css('position', 'relative').hide();
}).removeClass('slideBack').css('top', 0);
现在,在现实世界中,并不是每个浏览器都为转换结束事件使用相同的事件名称,因此通常要么为转换结束事件的所有可能名称安装事件处理程序,要么在代码中找出在本地浏览器中使用的名称,然后使用该变量作为事件名称。
注意:我使用.one()
,这样这个事件处理程序将自动卸载自己后,它的火灾。我不知道你是否想要这样,但这通常是这些类型的事件通知所需要的。
这里是一个更详细的版本,监听所有可能的转换结束事件名称(适用于所有主要浏览器):
$('#searchInput').one("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd", function(e) {
$('#headerTopBar').css('position', 'relative').hide();
}).removeClass('slideBack').css('top', 0);
.css()
不接受回调,您可以使用.animate()代替:
$('#searchInput').removeClass('slideBack').animate({top:0},500,function () {
$('#headerTopBar').css('position', 'relative').hide();
});
相关文章:
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 使用压缩的JavaScript文件(不是运行时压缩)
- Javascript运行php文件,然后下载文件
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- Angularjs代码未在匿名函数中运行
- 在终端中运行 JavaScript 时(使用 rhino),如何使用 print() 函数在一行中打印
- 如何确保JQuery的一行在另一行之前运行
- 仅通过最后一行运行Google脚本
- 如何在 Node.js 中为非常大 (> 1GB) 文件的每一行运行异步函数
- 在更新数据库中的一行之后,再次运行php行
- Firefox ONLY不会在if语句中运行一行javascript代码,但会运行其他行——chrome和safari运
- 为什么Protractor会立即运行每一行代码
- 在运行循环的每一行时添加一个暂停
- 我如何触发模糊和运行通过所有输入在一行
- 附加到元素的脚本标记会在.append()之后的下一行之前运行吗?
- javascript animation:为什么下一行在动画结束之前运行
- 运行一行javascript代码
- 为表- MVC中的每一行运行OnChange事件
- 在前一行代码完成后运行一行jQuery