gpt4 book ai didi

javascript - 我可以在另一个 setTimeout 的处理程序中有一个 setTimeout 吗?

转载 作者:数据小太阳 更新时间:2023-10-29 04:15:00 27 4
gpt4 key购买 nike

这是一个快速的(损坏的)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);
};
});
});

应该说明,为了清楚起见,我从该 Click 函数中删除了其他内容,并澄清哪些内容不完全有效,嗯,基本上,我点击但没有任何反应,而如果我删除这段代码,它就可以正常工作很好......实际上 vars 的设置也可以正常工作(我自然认为)但是当我粘贴或取消注释 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 = document.getElementById("hints");
hints.style.opacity = 0;
$(".dragonTvOut").toggleClass("dragonTvIn");

setTimeout(triggerP, 1000);
function triggerP()
{
var halo = document.getElementById('avatar');
if( 'process' in halo ) {
halo.process();
};
};

setTimeout(triggerUserPrompt, 2000);
function triggerUserPrompt()
{
document.getElementById("userPrompt").className = "userPromptIn";
};

setTimeout(triggerVolumeChange, 4000);
function triggerVolumeChange()
{
document.getElementById("userPrompt").className = "userPromptEnd";

var halo = document.getElementById('avatar');
if( 'resume' in halo ) {
halo.resume();
}

document.getElementById("avatarIcon").className = "avatarIconEnd";

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);
}​;

var side = 100;
var paper = new Raphael(volumeArcAnim, 100, 300);

paper.customAttributes.arc = function (xloc, yloc, value, total, R) {

var alpha = 360 / total * value,
a = (90 - alpha) * Math.PI / 180,
x = xloc + R * Math.cos(a),
y = yloc - R * Math.sin(a),
path;
if (total == value) {
path = [
["M", xloc, yloc - R],
["A", R, R, 0, 1, 1, xloc - 0.01, yloc - R]
];
} else {
path = [
["M", xloc, yloc - R],
["A", R, R, 0, +(alpha > 180), 1, x, y]
];
}
return {
path: path
};
};

var arcWidth = 87;
var strokeRadius = arcWidth/2;

var indicatorArc = paper.path().attr({
"stroke": "#ffffff",
"stroke-width": 3,
arc: [side/2, side/2, 12, 100, strokeRadius]
});

indicatorArc.animate({
arc: [side/2, side/2, 60, 100, strokeRadius]
}, 1500, "<>", function(){
// anim complete here
});

};

});
});
</script>

最佳答案

是的,您可以在另一个内部设置一个 setTimeout() -- 这是用于重复定时事件的典型机制。

你的不工作的原因与 setTimeout() 本身无关;这与您嵌套函数的方式有关。

changeVolume() 函数位于 triggerVolumeChange() 中,这意味着您不能直接使用它的名称来引用它。

最快的解决方案是移除嵌套,这样 changeVolume() 就位于根级别,而不是嵌套在 triggerVolumeChange() 中。

关于javascript - 我可以在另一个 setTimeout 的处理程序中有一个 setTimeout 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13887186/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com