我正在使用jQuery并为我的网站开发通知系统.通知使用setTimeout函数自动淡出.
如何停止setTimeout调用的计时器?
例如,我想在鼠标悬停在通知上时暂停setTimeout调用并继续向下计数鼠标...
我用谷歌搜索"暂停setTimeout"没有运气.
我正在使用clearTimeout清除setTimeout调用,同时淡出mouseout上的通知但是暂停效果会很好.
有任何想法吗?
我有一个JQuery的.each循环,每次迭代调用一个参数的函数,有没有办法延迟这个函数调用?我已尝试过setTimeout,如下所示,但这不起作用,因为函数立即执行.
$.each(myArray, function (j, dataitem)
{
setTimeout(function () { showDetails(dataitem) }, 300);
});
function showDetails(dataitem)
{
...
}
Run Code Online (Sandbox Code Playgroud)
数组大小大约是20,我要做的是在一定的时间范围内分配函数调用而不是立即,任何想法如何实现这一点?我准备重写并重新调整函数的调用方式以完成这项任务,任何帮助都将受到赞赏.
javascript jquery javascript-events settimeout delayed-execution
我想为这个工具提示代码添加一个超时,所以它只显示鼠标是否在一段时间后悬停在它上面而不是立即...我尝试添加setTimeout()
但我无法弄清楚如何使用clearTimeout()
所以工具提示没有隐藏在mouseout上.你能帮我吗?
// -----------------------------------------------
// TOOLTIP MOUSE HOVER
// -----------------------------------------------
function mcTooltip() {
$('.mcTxb').mousemove(function(e) {
var mcHoverText = $(this).attr('alt');
var mcTooltip = $('.mcTooltip');
$(mcTooltip).text(mcHoverText).show('fast');
$(mcTooltip).css('top', e.clientY + 10).css('left', e.clientX + 10);
}).mouseout(function() {
var mcTooltip = $('.mcTooltip');
$(mcTooltip).hide('fast');
});
}
mcTooltip();
Run Code Online (Sandbox Code Playgroud)
我试过这个:
// -----------------------------------------------
// TOOLTIP MOUSE HOVER
// -----------------------------------------------
function mcTooltip() {
$('.mcTxb').mousemove(function(e) {
var mcHoverText = $(this).attr('alt');
var mcTooltip = $('.mcTooltip');
setTimeOut(function(){
$(mcTooltip).text(mcHoverText).show('fast');
}, 300);
$(mcTooltip).css('top', e.clientY + 10).css('left', e.clientX + 10);
}).mouseout(function() {
var …
Run Code Online (Sandbox Code Playgroud) 我在SO中有另一个关于setTimeout()的问题,其中一个用户提到如果函数参数是一个字符串,它将在全局范围内进行评估,否则它不是.这让人大开眼界,所以我试图找到更多关于setTimeout实际工作方式的信息,但它不是EcmaScript规范的一部分,甚至MDN都没有我在SO中找到的那些特定信息.
关于如何setTimeout()
运作有一些很好的参考?
我正在使用debouncing来在超时后使用settimeout执行事件.我遇到的问题是,其他javascript事件期望这些事件同步发生.由于它们现在在超时后执行,我希望能够通过其他javascript事件过早地触发它们(因此那些需要它们的事件不会失败).
Anywhom,如果我这样做:
timeout = setTimeout(function() { alert('hi'); }, 10000);
Run Code Online (Sandbox Code Playgroud)
,我希望在10秒钟之前发生这种情况,我该怎么做?
如有必要,解决方案可能涉及jquery.谢谢!
编辑:是否可以通过访问超时对象来执行此操作?
请考虑以下示例:
<script type="text/javascript">
function alertBox(){
alert('Hello World!');
}
function doSomething(){
setInterval(alertBox(), 5000); //This is for generic purposes only
};
function myFunction(){
setTimeout(doSomething(),3000);
};
myFunction();
</script>
Run Code Online (Sandbox Code Playgroud)
是什么导致它立即执行,而不是等待3秒设置,以及仅执行警报ONCE,而不是按预定的5秒间隔执行?
感谢您的任何帮助,您可以提供!
石匠
我有这个功能
notes.forEach(function(note) {
setTimeout(function() {
playNote(note);
}, 1000);
});
Run Code Online (Sandbox Code Playgroud)
这不起作用.它同时播放所有音符,而不是按顺序播放它们之间的间隔为1秒.看起来我需要在这里使用一个闭包来完成这项工作.有人可以帮我修复这个功能,所以它会播放每个音符之间的延迟音符吗?
我有一些JS代码如下;
var x = self.someAJAXResponseJSON; // x has some object value here
setTimeout(function(x){
console.log("setTimeout ... : " + x); // But x is undefined here
}, 1000);
Run Code Online (Sandbox Code Playgroud)
所以我想将"x"传递给setTimeout回调函数.但我在setTimeout中得到"x"未定义.
我究竟做错了什么 ?
更新
使用DOJO JS修复类似问题的任何想法
setTimeout(dojo.hitch(this, function(){
this.executeSomeFunction(x); // what shud be this
console.log("setTimeout ... : " + x); // But x is undefined here
}), 1000);
Run Code Online (Sandbox Code Playgroud) 我正在研究"西蒙游戏"项目.
我想让它以正确的顺序照亮按钮.但到目前为止,代码正常工作,直到第二级.
如果我是对的checkButton(randIndexArr, counter)
,那么应该包含在承诺中,这样如果counter === index
它应该调用checkButton
,也许还有一些我错过的错误.
以下是视频的链接:代码如何工作以更加清晰Zipline:构建一个西蒙游戏 ,这是我的代码:
document.addEventListener("DOMContentLoaded", function () {
'use strict';
var checkOn = document.querySelector("input[type=checkbox]");
var gameCount = document.getElementsByClassName("innerCount")[0];
var startButton = document.getElementById("innerStart");
var strictButton = document.getElementById("strictButton");
var strictInd = document.getElementById("strictIndicator");
var strictMode = false;
var soundArray = document.getElementsByTagName("audio");
var buttons = document.querySelectorAll(".bigButton");
var buttonArray = [].slice.call(buttons, 0);
checkOn.addEventListener("change", function () {
if (checkOn.checked) {
gameCount.innerHTML = "--";
} else {
gameCount.innerHTML = "";
}
});
strictButton.addEventListener("click", function () { …
Run Code Online (Sandbox Code Playgroud)让我澄清一下我的问题.我不是问如何使以下代码工作.我知道你可以使用let关键字或iffe来捕获它自己的值i
.我只需要澄清如何i
在以下代码中访问该值.我阅读了以下博客文章,了解以下代码是如何工作的.博客文章
for (var i = 1; i <= 5; i++) {
setTimeout(function() { console.log(i); }, 1000*i); // 6 6 6 6 6
}
Run Code Online (Sandbox Code Playgroud)
作者声称代码不起作用,因为我们将变量i
作为引用而不是值传递.也就是说,我们不是提供i
每次迭代的值,而是将变量setTimeout
作为参考提供给回调.实际上,当循环终止并且回调触发时,我们将引用变量i
,它将是6.这是如何工作的?
这是我的理解.我的理解是setTimeout
,当循环执行时,我们不会将任何东西"传递"到函数的回调中.我们只是设置异步调用.当闭包回调函数执行时,它们会i
根据词法作用域规则查找变量.也就是说,在范围内的闭包看起来是回调结束,在这种情况下再次,因为它是在for
循环完成之后完成的.
它是哪一个,函数是否i
根据在每次迭代时作为引用传递的变量或者因为词法作用域而将值解析为6?
settimeout ×10
javascript ×9
jquery ×5
callback ×1
closures ×1
es6-promise ×1
promise ×1
setinterval ×1