gpt4 book ai didi

javascript - 尝试使用 settimeout 避免分离函数

转载 作者:行者123 更新时间:2023-11-30 13:14:27 25 4
gpt4 key购买 nike

这个脚本正在对图像进行“翻转”在每个鼠标事件上,例如鼠标移出并点击

img src 改变了,问题是我试图延迟函数的执行由 onClick 事件执行。

我尝试将函数更改为 settimeout 但没有成功

setTimeOut('functionName(param1, param2)', 5000);

不调用封装设置超时的函数

我做错了什么?

       <a href="yourpage.htm">
<img src="images/Button2_Normal.PNG" width="150" id="img2"
onmouseover="mOver(this, image2)" onmouseout="mOut(this, image2)" onclick="mActive(this, image2)" />
</a>

<a href="yourpage.htm">
<img src="images/Button1_Normal.PNG" width="150" id="img1"
onmouseover="mOver(this, image1)" onmouseout="mOut(this, image1)" onclick="mActive(this, image1)">
</a>
  • javascript

    var image1 = new Array("images/Button1_Normal.PNG", "images/Button1_MouseClick.PNG", "images/Button1_MouseOver.PNG");
    var image2 = new Array("images/Button2_Normal.PNG", "images/Button2_MouseClick.PNG", "images/Button2_MouseOver.PNG");

    var preloadImages = new Array(); // preloads images
    function Loadimages(images) {

    for (i = 0; i < images.length; i++) {
    preloadImages[i] = new Image()
    preloadImages[i].src = images[i]
    }
    }
    Loadimages(image1);


    lastN = ""

    function mOver(obj, images) {
    if (lastN != obj.id) {
    document.images[obj.id].src = (images.length == 3 ? images[2] : images[1])
    }
    }

    function mOut(obj, images) {
    if (lastN != obj.id) {
    document.images[obj.id].src = images[0]
    }
    }

    function mActive(obj, images) {
    var ts1 = document.getElementById('img1');
    if (typeof obj != "string") { obj = obj.id }

    document.images[obj].src = images[1]
    if (lastN != "" && lastN != obj) {
    document.images[lastN].src = images[0]
    }
    lastN = obj
    }
    function timeout_init(obj,images) {
    setTimeout('mActive(obj, images)', 5500);
    }

最佳答案

闭包应该有效:

function timeout_init(obj,images) {
setTimeout(function() {
mActive(obj, images);
}, 5500);
}

这是避免使用类似eval 的功能的另一个原因。对于您当前的实现,JavaScript 引擎将采用“'mActive(obj, images)'”字符串并尝试在全局上下文中对它进行 eval()uate。到那时,原始的 objimages 变量早已丢失。

关闭你的匿名函数仍然可以访问 timeout_init() 参数,尽管该函数已完成。但是变量在被内部函数引用时幸存下来。

关于javascript - 尝试使用 settimeout 避免分离函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12608425/

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