Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.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
Javascript setinterval和clearinterval工作不正常_Javascript_Jquery - Fatal编程技术网

Javascript setinterval和clearinterval工作不正常

Javascript setinterval和clearinterval工作不正常,javascript,jquery,Javascript,Jquery,我正在为三星智能电视创建应用程序。在这种情况下,我希望音量栏出现5秒钟,然后它必须隐藏。如果用户连续按下音量,则必须在5秒后隐藏,用户停止按下按钮。我试着这样做: var vt; if($("#volume").css('display')=='none'){ $("#volume").show(); vt=setInterval(function(){$("#volume").hide();},5000); } else{

我正在为三星智能电视创建应用程序。在这种情况下,我希望音量栏出现5秒钟,然后它必须隐藏。如果用户连续按下音量,则必须在5秒后隐藏,用户停止按下按钮。我试着这样做:

var vt;
    if($("#volume").css('display')=='none'){
        $("#volume").show(); 
        vt=setInterval(function(){$("#volume").hide();},5000);

    }
    else{
        clearInterval(vt);
        vt=setInterval(function(){$("#volume").hide();},5000);
    }
当用户按下按钮时,它不是在清除间隔,而是在为每次单击创建实例。请尝试以下操作:

if($("#volume").css('display')=='none'){
    $("#volume").show(); 
    vt = setTimeout(function(){$("#volume").hide();},5000);
}
else{
    clearTimeout(vt);
    vt = setTimeout(function(){$("#volume").hide();},5000);
}

这是一个有点复杂的解决方案,选自下划线库

var debounce = function(func, wait, immediate) {
    var timeout, result;
    return function() {
        var context = this, args = arguments;
        var later = function() {
            timeout = null;
            if (!immediate) {
                result = func.apply(context, args);
            }
        };
        var callNow = immediate && !timeout;
        clearTimeout(timeout);
        timeout = setTimeout(later, wait);
        if (callNow) {
            result = func.apply(context, args);
        }
        return result;
    };
};


var clickHandler = function(){
    $("#volume").hide();
}

var debouncedClickHandler = debounce(clickHandler, 5000);

$('body').on('click', debouncedClickHandler) //change this line to your click handler

现在您不必做任何事情,clickHandler只会在最后一次调用debouncedClickHandler延迟5秒后才会被调用

您可能需要使用setTimeout()而不是setIntervaltry setTimeout,而不是setinterval。。