我需要定义一个函数来处理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);
答案 0 :(得分:2)
听起来你想要创建一个与setTimeout
完全相同的功能,但是延迟乘以1000
以便它以秒为单位。
看起来像这样:
function setTimeoutSeconds(func, delay) {
setTimeout(func, delay * 1000);
}
然后,您可以使用所需的回调来呼叫setSlide
,而不是拨打setMobile
,hide
或setTimeoutSeconds
。
setTimeoutSeconds(hideMobile, 1);
setTimeoutSeconds(showMobile, 14);
setTimeoutSeconds(showSlide, 15);
如果您仍想拥有setSlide
...等功能,可以使用部分应用的功能:
function applyTimeout(func) {
return function(delay) {
setTimeout(func, delay * 1000);
}
}
然后像这样创建它们:
var setSlide = applyTimeout(showSlide);
然后以同样的方式打电话给他们:
setSlide(15);
答案 1 :(得分:1)
这很简单:
const callFunctionWithTimeout = (fn, timeout) => setTimeout(fn, timeout * 1000)
然后,例如,代替setSlide(10)
,您可以:
callFunctionWithTimeout(showSlide, 10)