在 jQuery 中拥有多个 "setTimeout" 的最佳方法是什么?
What's the best way to have multiple "setTimeout" in jQuery?
我有不同的操作需要延迟进行。这段代码有效,但我觉得这不是最好的方法。
有人有推荐吗?
$('.block-container').on('mouseout', function() {
var $el = $(this);
setTimeout(function(){
$el.find('.block-values').removeClass('hover-rotate');
$el.find('.text-under').removeClass('hover');
}, 500);
});
$('.block-container').on('mouseout', function() {
var $el = $(this);
setTimeout(function(){
$el.find('.values-text').removeClass('hover');
$el.find('.plus-container').removeClass('hover');
}, 600);
});
在第一个中调用第二个 setTimeout
而不是创建两个处理程序。
$('.block-container').on('mouseout', function () {
var $el = $(this);
setTimeout(() => {
$el.find('.block-values').removeClass('hover-rotate');
$el.find('.text-under').removeClass('hover');
setTimeout(() => {
$el.find('.values-text').removeClass('hover');
$el.find('.plus-container').removeClass('hover');
}, 100)
}, 500);
});
另一种可能更容易一目了然地理解的方法,等待延迟函数。
const delay = ms => new Promise(res => setTimeout(res, ms));
$('.block-container').on('mouseout', async function () {
const $el = $(this);
await delay(500);
$el.find('.block-values').removeClass('hover-rotate');
$el.find('.text-under').removeClass('hover');
await delay(100);
$el.find('.values-text').removeClass('hover');
$el.find('.plus-container').removeClass('hover');
});
我有不同的操作需要延迟进行。这段代码有效,但我觉得这不是最好的方法。 有人有推荐吗?
$('.block-container').on('mouseout', function() {
var $el = $(this);
setTimeout(function(){
$el.find('.block-values').removeClass('hover-rotate');
$el.find('.text-under').removeClass('hover');
}, 500);
});
$('.block-container').on('mouseout', function() {
var $el = $(this);
setTimeout(function(){
$el.find('.values-text').removeClass('hover');
$el.find('.plus-container').removeClass('hover');
}, 600);
});
在第一个中调用第二个 setTimeout
而不是创建两个处理程序。
$('.block-container').on('mouseout', function () {
var $el = $(this);
setTimeout(() => {
$el.find('.block-values').removeClass('hover-rotate');
$el.find('.text-under').removeClass('hover');
setTimeout(() => {
$el.find('.values-text').removeClass('hover');
$el.find('.plus-container').removeClass('hover');
}, 100)
}, 500);
});
另一种可能更容易一目了然地理解的方法,等待延迟函数。
const delay = ms => new Promise(res => setTimeout(res, ms));
$('.block-container').on('mouseout', async function () {
const $el = $(this);
await delay(500);
$el.find('.block-values').removeClass('hover-rotate');
$el.find('.text-under').removeClass('hover');
await delay(100);
$el.find('.values-text').removeClass('hover');
$el.find('.plus-container').removeClass('hover');
});