Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
延迟后使用jQuery添加一个类_Jquery_Delay - Fatal编程技术网

延迟后使用jQuery添加一个类

延迟后使用jQuery添加一个类,jquery,delay,Jquery,Delay,当单击一个元素时,我想向body元素添加一个类,但有一点延迟。 因此,单击element1,然后在.5秒后,主体是一个给定的新类 我用的这个在某种程度上是有效的 $('.element1').click(function() { $('body').delay(500).queue(function(){ $(this).addClass('left-bg') }); }); 然而,我有另一个点击事件,它从正文中删除了这个左bg类 $('.another-ele

当单击一个元素时,我想向body元素添加一个类,但有一点延迟。 因此,单击element1,然后在.5秒后,主体是一个给定的新类

我用的这个在某种程度上是有效的

$('.element1').click(function() {
    $('body').delay(500).queue(function(){
        $(this).addClass('left-bg')
    });
});
然而,我有另一个点击事件,它从正文中删除了这个左bg类

$('.another-element').click(function() {
    $('body').removeClass('left-bg');
});
但是下一次单击.element1时,它根本不会将左bg类应用于主体

希望这是有道理的。有人能帮我做这件事吗,或者建议另一种方法吗?

请排好队:

您需要使用.stop()

您需要排队

$('.element1').click(function() {
    $('body').delay(500).queue(function(){
        $(this).addClass('left-bg');
        $(this).dequeue()
    });
});
如前所述

使用此选项-

var bgch;
$('.element1').click(function() {
    bgch = setTimeout((function(){$('body').addClass('left-bg');}),500);
});
$('.another-element').click(function() {
    $('body').removeClass('left-bg');
    clearTimeout(bgch);
});

请记住,您的延迟可能导致问题: -压紧元件1 -按另一个元素 -删除类 -延迟后添加类

为了确保一切正常运行,您必须跟踪正在发生的事情,并且您应该检查类是否已在body元素上,因此该类不会应用两次:

var bodyClassTracker = 0;
var handledClass = 'left-bg';

$('.element1').click(function() {
    bodyClassTracker = 1;
    $('body').delay(500).queue(function(){
        var eleBody = $('body');
        if (!eleBody.hasClass(handledClass))
            eleBody.addClass(handledClass);
        bodyClassTracker = 0;
        eleBody.clearQueue();
    });
});

$('.another-element').click(function() {
    var removerFun = function(){
            var eleBody = $('body');
            if (eleBody.hasClass(handledClass))
                eleBody.removeClass(handledClass);
            eleBody.clearQueue();
        };
    if (bodyClassTracker == 1)
        $('body').delay(500).queue(removerFun);
    else
        removerFun();
});
在这里,您可以测试和演示代码。

设置车身后,需要重新安装车身

$('#add').click(function() {
    $('body').delay(500).queue(function(){
        $(this).addClass('left-bg')
    }).stop();
});

$('#rem').click(function() {
    $('body').removeClass('left-bg');
});

var bodyClassTracker = 0;
var handledClass = 'left-bg';

$('.element1').click(function() {
    bodyClassTracker = 1;
    $('body').delay(500).queue(function(){
        var eleBody = $('body');
        if (!eleBody.hasClass(handledClass))
            eleBody.addClass(handledClass);
        bodyClassTracker = 0;
        eleBody.clearQueue();
    });
});

$('.another-element').click(function() {
    var removerFun = function(){
            var eleBody = $('body');
            if (eleBody.hasClass(handledClass))
                eleBody.removeClass(handledClass);
            eleBody.clearQueue();
        };
    if (bodyClassTracker == 1)
        $('body').delay(500).queue(removerFun);
    else
        removerFun();
});
$('#add').click(function() {
    $('body').delay(500).queue(function(){
        $(this).addClass('left-bg')
    }).stop();
});

$('#rem').click(function() {
    $('body').removeClass('left-bg');
});