这个脚本正在对图像进行“翻转” 在每个鼠标事件例如mousover out并单击
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);
}
答案 0 :(得分:3)
关闭应该有效:
function timeout_init(obj,images) {
setTimeout(function() {
mActive(obj, images);
}, 5500);
}
这是避免eval
类似功能的另一个原因。使用您当前的实现,JavaScript引擎将采用“'mActive(obj, images)'
”字符串,并尝试在全局上下文中eval()
使用它。到那时,原始obj
和images
变量很久就丢失了。
使用闭包,尽管该函数已完成,但您的匿名函数仍然可以访问timeout_init()
参数。但变量幸存下来,因为它们被内部函数引用。
答案 1 :(得分:0)
您可以在setTimeout
中传递参数。它将作为mActive
中的参数提供。
setTimeout(mActive, 5500, obj, images);