我在这里搜索并找到了一个快速的解决方案,当用户在页面上空闲时调用一个动作.它基本上适用于所有浏览器.
但是当我在页面上使用警报或确认对话框时,Google Chrome上会出现奇怪的问题.
警报或确认框消失后(按下"确定","取消"或"交叉"),空闲功能意外工作.
在FF,IE和Chrome上测试(最新).它只发生在Chrome上.
我的代码在这里:http: //jsbin.com/ifule3
window.onload = idleTimer;
function idleTimer() {
var idleDuration;
document.onmousemove = idleReset;
function idleReset() {
if (idleDuration) {
clearTimeout(idleDuration);
idleDuration = 0;
}
idleDuration = setTimeout(function() {
alert('3 seconds passed.');
}, 3000)
}
};
<a onclick="if(confirm( '?' )) { alert('Ok Pressed.') } else { return false; };">First Link!</a>
<a onclick="alert('test');" >Second Link!</a>
Run Code Online (Sandbox Code Playgroud)
看来我的解释还不够:/
我用jQuery改变了代码;
jQuery(document).ready(function() {
var idleDuration;
jQuery(document).mousemove(function() {
if (idleDuration) {
clearTimeout(idleDuration);
idleDuration = 0;
}
idleDuration = setTimeout(function() …Run Code Online (Sandbox Code Playgroud) 我有一个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().
function foo(){
window.setTimeout(function(){
//do something
}, 500);
//return "some thing but wait till SetTimeout() finished";
}
Run Code Online (Sandbox Code Playgroud) 我想为这个工具提示代码添加一个超时,所以它只显示鼠标是否在一段时间后悬停在它上面而不是立即...我尝试添加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) 这是一个快速(破产)的jsfiddle:http://jsfiddle.net/wH2qF/
由于某些原因,这不起作用......是因为我在另一个setTimeout中有一个setTimeout吗?
$(function() {
$("#Volume").click(function() {
setTimeout(triggerVolumeChange, 4000);
function triggerVolumeChange()
{
var volumeDiv = document.getElementById("volumeNumber");
var volumeOld = 8;
var volumeNew = 37;
var timeNew = (1000/(volumeNew-volumeOld));
changeVolume();
function changeVolume()
{
volumeDiv.innerHTML = volumeOld;
volumeOld++;
if (volumeOld <= volumeNew) setTimeout(changeVolume, timeNew);
};
});
});
Run Code Online (Sandbox Code Playgroud)
应该指出,为了清楚起见,我从Click函数中删除了其他东西,并且澄清了什么不能正常工作,好吧,基本上,我点击并没有任何反应,而如果我删除这一块代码它工作正常..实际上变量的设置也工作正常(我自然是假设)但是当我粘贴或取消注释changeVolume()函数时,点击停止再次工作......有什么想法吗?
-
另一个澄清:我想要做的是,在点击时,在一个字符串中模拟从值8到37的音量.因此该函数内的setTimeout.
-
根据你的家伙的要求,这里是完整的代码...我怀疑它是否有意义,但这里是......仅供参考,点击这将触发一些动画来模拟我正在设计的应用程序的流程. .
<script>
$(function() {
$("#Volume").click(function() {
var userPrompt = document.getElementById("userPrompt")
userPrompt.innerHTML = "Change volume to 37";
var avatarIcon = document.getElementById("avatarIcon");
avatarIcon.innerHTML = "<img src='imgs/haloIcons-volume_82x76.png' alt='Volume'/>";
var hints = …Run Code Online (Sandbox Code Playgroud) 我有以下代码,它演示了直接从事件触发器调用长时间运行的函数与使用的区别setTimeout().
预期行为:
当按下第一个按钮时,它会显示为按下,计算运行几秒钟,然后当计算完成时,按钮再次按下,第二列从"尚未计算"变为"计算完成".(我不会详细说明为什么会发生这种情况; 它在相关答案中进行了解释.)
按下第二个按钮时,按钮立即按下; 第二列立即更改为"正在计算..."文本.当计算在几秒钟后完成时,第二列从"计算..."变为"完成计算".
实际发生了什么:
这在Chrome中完美运行(两个按钮都按预期运行)
这在Internet Explorer 8中完美运行
这在Firefox(第25版)中不起作用.具体来说,第二个按钮作为第一个按钮表现为100%.
在更改超时setTimeout()从0到1无影响
在更改超时setTimeout()从0以500 作品
这让我有一个很大的难题.
根据为什么setTimeout()有效的原因,而缺少一个没有的原因,延迟对事物的运作方式应该没有影响,因为这里setTimeout()的主要目的是改变排队顺序,而不是拖延事情.
那么,为什么它不能在Firefox上使用延迟0或1,但按预期工作延迟500(并且适用于Internet Explorer 8/Chrome上的任何延迟)?
更新:除了下面的源代码,我还做了一个JSFiddle.但由于某些原因,JSFiddle甚至拒绝加载我的Internet Explorer 8,因此对于该测试,需要以下代码.
更新2:有人提出了dom.min_timeout_valueFirefox中配置设置问题的可能性.我已将其编辑为4到0,重新启动浏览器,并且没有修复任何内容.它仍然失败,超时为0或1,成功为500.
这是我的源代码 - 我只是将其保存到C:驱动器上的HTML文件中,并在所有三个浏览器中打开:
<html><body>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<table border=1>
<tr><td><button id='do'>Do long calc - bad status!</button></td>
<td><div id='status'>Not Calculating yet.</div></td></tr>
<tr><td><button id='do_ok'>Do long calc - good status!</button></td>
<td><div id='status_ok'>Not Calculating yet.</div></td></tr> …Run Code Online (Sandbox Code Playgroud) 我已经setTimeout多次使用函数作为参考,例如
setTimeout(someFunction, 3000);
Run Code Online (Sandbox Code Playgroud)
在某些情况下,为了保留值,this我必须事先将它分配给变量,但不明白为什么以下不起作用:
var logger = {
log: function() {
var that = this;
console.log(that.msg);
setTimeout(that.log, 3000);
},
msg: "test"
};
logger.log();
Run Code Online (Sandbox Code Playgroud)
但是,使用匿名函数可以正常工作:
var logger = {
log: function() {
var that = this;
console.log(that.msg);
setTimeout(function() { that.log() }, 3000);
},
msg: "test"
};
Run Code Online (Sandbox Code Playgroud) 我有一些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?