Javascript 尝试使用settimeout避免分离函数
此脚本正在对图像进行“翻滚” 在每个鼠标事件上,例如鼠标悬停并单击 img src已更改, 问题是我试图拖延 函数的执行 由onClick事件执行 我试图将函数更改为settimeout,但没有成功Javascript 尝试使用settimeout避免分离函数,javascript,onclick,settimeout,onclicklistener,Javascript,Onclick,Settimeout,Onclicklistener,此脚本正在对图像进行“翻滚” 在每个鼠标事件上,例如鼠标悬停并单击 img src已更改, 问题是我试图拖延 函数的执行 由onClick事件执行 我试图将函数更改为settimeout,但没有成功 setTimeOut('functionName(param1, param2)', 5000); nither调用封装设置超时的函数 我做错了什么 <a href="yourpage.htm"> <img src="images/Button2_Norma
setTimeOut('functionName(param1, param2)', 5000);
nither调用封装设置超时的函数
我做错了什么
<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); }
var image1=新数组(“images/Button1_Normal.PNG”、“images/Button1_MouseClick.PNG”、“images/Button1_MouseOver.PNG”); var image2=新数组(“images/Button2_Normal.PNG”、“images/Button2_MouseClick.PNG”、“images/Button2_MouseOver.PNG”); var preload images=新数组();//预加载图像 函数加载图像(图像){ 对于(i=0;i
function timeout_init(obj,images) {
setTimeout(function() {
mActive(obj, images);
}, 5500);
}
这是避免使用eval
类功能的另一个原因。在当前的实现中,JavaScript引擎将使用“”mActive(obj,images)
”字符串,并尝试在全局上下文中对其进行评估。到那时,原始的obj
和images
变量早已丢失
使用闭包,您的匿名函数仍然可以访问
timeout\u init()
参数,尽管该函数已完成。但是变量在被内部函数引用时幸存了下来。您可以在setTimeout
中传递参数。它将作为mActive
中的参数提供
setTimeout(mActive, 5500, obj, images);
切勿将字符串传递给
setTimeout
。永远。@jbabey好的,这是个好主意。。。让我知道。谢谢你,作为避免思考当前方法的开端。我一点儿也不知道如何解决这个问题!尝试一下只是提醒一下--在setTimeout
中传递附加参数在我们最喜欢的浏览器(IE)中不起作用。很高兴知道这是“我们”的最爱我在一家使用IE的公司工作aplications@LoneXcoder. 是的,在迄今为止的所有IE版本中,只有IE10支持它(尚未发布)。