Javascript 如何设置触发对象的延迟

Javascript 如何设置触发对象的延迟,javascript,settimeout,Javascript,Settimeout,我在下面有一个代码,一旦按下按钮(基于不同的假设),它将在我创建的画布上触发一个对象。但是,我希望在按下按钮和将对象发射到画布之间有5秒的延迟,我只是不确定在代码中的何处输入 我假设我需要一个setTimeout函数,但不确定。我知道下面的代码目前不会做任何事情,但是有人能告诉我在我的代码中需要把setTimeout函数放在哪里吗。我在很多地方试过,但都没有用 谢谢 trigger=function(){ 重置(); var效应_大小=.8; setItem(“value mac”,docum

我在下面有一个代码,一旦按下按钮(基于不同的假设),它将在我创建的画布上触发一个对象。但是,我希望在按下按钮和将对象发射到画布之间有5秒的延迟,我只是不确定在代码中的何处输入

我假设我需要一个setTimeout函数,但不确定。我知道下面的代码目前不会做任何事情,但是有人能告诉我在我的代码中需要把setTimeout函数放在哪里吗。我在很多地方试过,但都没有用

谢谢

trigger=function(){
重置();
var效应_大小=.8;
setItem(“value mac”,document.getElementById(“demo”);
setItem(“方向”,方向);
//var y=document.getElementById(“myCanvas”)
//const context=y.getContext('2d');
//clearRect(0,0,y.宽度,y.高度);
控制台日志(方向);
console.log('检查??')
var y=document.getElementById(“myCanvas”);
var cir=y.getContext(“2d”);
var value_global=document.getElementById('myRange').value;
console.log(值\u全局)
var min_val=(值_global>1)*((值_global-1)*.1-.05);

如果(value_global>1&&value_global需要延迟的代码部分应该包装在函数回调中,这样:

setTimeout(function() {
    cir.beginPath();
    cir.arc(cen_x, cen_y, 20, 0, 2 * Math.PI);

    cir.fillStyle = "red";
    cir.fill();
    cir.stroke();
}, 5000)
如果两次单击按钮,则函数将执行两次。如果要阻止此操作(即仅运行最后一次超时),则需要将timeoutID存储在全局变量中,并且在再次调用setTimeout之前必须调用
clearTimeout

let timeoutID

trigger = function() {

    /* ... rest of the code here... */

    if (timeoutID)
        clearTimeout(timeoutID)

    timeoutID = setTimeout(function() {
        cir.beginPath();
        cir.arc(cen_x, cen_y, 20, 0, 2 * Math.PI);

        cir.fillStyle = "red";
        cir.fill();
        cir.stroke();
    }, 5000)

}

需要延迟的代码部分应包装在函数回调中,如下所示:

setTimeout(function() {
    cir.beginPath();
    cir.arc(cen_x, cen_y, 20, 0, 2 * Math.PI);

    cir.fillStyle = "red";
    cir.fill();
    cir.stroke();
}, 5000)
如果两次单击按钮,则函数将执行两次。如果要阻止此操作(即仅运行最后一次超时),则需要将timeoutID存储在全局变量中,并且在再次调用setTimeout之前必须调用
clearTimeout

let timeoutID

trigger = function() {

    /* ... rest of the code here... */

    if (timeoutID)
        clearTimeout(timeoutID)

    timeoutID = setTimeout(function() {
        cir.beginPath();
        cir.arc(cen_x, cen_y, 20, 0, 2 * Math.PI);

        cir.fillStyle = "red";
        cir.fill();
        cir.stroke();
    }, 5000)

}

欢迎使用stackOverflow。您是否介意编辑该问题以完成示例代码?另请阅读:5秒后需要执行的是什么?是整个函数触发器吗?如果是,该函数从何处调用?“cir.beginPath();”延迟应该开始。这是将对象激发到画布上的位置。欢迎使用stackOverflow。您介意编辑问题以完成示例代码吗?请阅读:5秒后需要执行的是什么?是整个函数触发器吗?如果是,此函数从何处调用?“cir.beginPath();”延迟应该开始了。这是对象被激发到画布上的地方。很抱歉回复太慢。但是谢谢你的帮助。我最终设法找到了一种不同的方法来避免按钮点击两次,但是你在第一部分中的代码帮了我很多。很抱歉回复太慢。但是谢谢你的帮助。我设法找到了一个不同的w最后,我绕了一圈,阻止了按钮两次点击,但是你在第一部分的代码帮了我很多。