Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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 定义单个函数以处理其他函数的功能_Javascript_Jquery - Fatal编程技术网

Javascript 定义单个函数以处理其他函数的功能

Javascript 定义单个函数以处理其他函数的功能,javascript,jquery,Javascript,Jquery,我需要定义一个函数来处理setSlide、setMobile和hide提供的功能,并在延迟发生时传入SetTimeout调用的函数。我不知道该怎么做。有人能解释一下如何做到这一点吗?多谢各位 (function($) { var currentTime = new Date().getTime() / 1000; var setSlide = function (timeout) { setTimeout(showSlide, timeout * 1000); }, showSlide

我需要定义一个函数来处理setSlide、setMobile和hide提供的功能,并在延迟发生时传入SetTimeout调用的函数。我不知道该怎么做。有人能解释一下如何做到这一点吗?多谢各位

(function($) {
var currentTime = new Date().getTime() / 1000;

var setSlide = function (timeout) {
    setTimeout(showSlide, timeout * 1000);
},
showSlide = function () {
    $('.newsletter-popup').addClass('slide-left');
},
setMobile = function (timeout) {
    setTimeout(showMobile, timeout * 1000);
},
hide = function (timeout) {
    setTimeout(hideMobile, timeout * 1000);
},
showMobile = function () {
    $('.newsletter-popup').removeClass('hidden');
},
hideMobile = function () {
    $('.newsletter-popup').addClass('hidden');
};
$(document).ready(function() {

    if (readCookie('nl_suppress')) {
        $('.newsletter-popup').removeClass('slide-left');
    } else if (!readCookie('nl_display')) {
        setSlide(10);
    } else if (currentTime - readCookie('nl_display') > 86400) {
        showSlide();
    } else {
        setSlide(currentTime - (readCookie('nl_display') + 86400));
    }

    $('.nlForm').submit(function() {
        createCookie('nl_suppress', new Date(), 30);
    });

    function checkCookie() {
        var date = new Date();
        date.setTime(date.getTime() + (86400000));
        $('.newsletter-popup').removeClass('slide-left');
        hide(1);

        if(readCookie('nl_display')) {  
            // already been clicked once, hide it
            createCookie('nl_suppress', new Date(), 180);
            return;
        } 
        // first time this is clicked, mark it
        createCookie('nl_display', new Date().getTime() / 1000, 180);
        setMobile(14);
        setSlide(15); 
    };

    $('.newsletter-close').on('click', checkCookie);
});
})(jQuery);
其实很简单:

const callFunctionWithTimeout = (fn, timeout) => setTimeout(fn, timeout * 1000)
然后,例如,您可以执行以下操作,而不是
setSlide(10)

callFunctionWithTimeout(showSlide, 10)

听起来您想要创建一个函数,该函数执行与
setTimeout
相同的操作,但是延迟乘以
1000
,以秒为单位

它看起来是这样的:

function setTimeoutSeconds(func, delay) {
    setTimeout(func, delay * 1000);
}
var setSlide = applyTimeout(showSlide);
然后,不用调用
setSlide
setMobile
hide
,而是使用所需的回调调用
setTimeoutSeconds

setTimeoutSeconds(hideMobile, 1);
setTimeoutSeconds(showMobile, 14);
setTimeoutSeconds(showSlide, 15);

如果您仍然想使用
设置滑块
。。。etc函数,您可以使用部分应用的函数:

function applyTimeout(func) {
    return function(delay) {
        setTimeout(func, delay * 1000);
    }
}
然后像这样创建它们:

function setTimeoutSeconds(func, delay) {
    setTimeout(func, delay * 1000);
}
var setSlide = applyTimeout(showSlide);
然后用同样的方式称呼他们:

setSlide(15);

你能告诉我们单个函数应该是什么样子吗?谢谢!这很好地工作了,但是对于使用该选项的跨浏览器支持有些担心。@Chad如果您想获得跨浏览器支持,您可以使用来编译代码。