0

私はサムスンスマートテレビ用のアプリを作成しています。その中で、ボリュームバーを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);
    }

ユーザーがボタンを押すと、間隔がクリアされず、クリックごとにインスタンスが作成されます

4

2 に答える 2

1

これを試して:

if($("#volume").css('display')=='none'){
    $("#volume").show(); 
    vt = setTimeout(function(){$("#volume").hide();},5000);
}
else{
    clearTimeout(vt);
    vt = setTimeout(function(){$("#volume").hide();},5000);
}
于 2013-11-07T05:31:13.930 に答える
0

これは、アンダースコア ライブラリから選択された、少し洗練されたソリューションです。

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

これで何もする必要はありません。debouncedClickHandler への最後の呼び出しから 5 秒の遅延の後にのみ、clickHandler が呼び出されます。

于 2013-11-07T05:47:33.170 に答える