Javascript 为什么赢了';t此脚本用作淡出动画效果
这将在javascript函数中实现;用onclick事件处理程序之类的。 然后单击它将淡出box的id使用的document.getElementsById()对象,那么为什么它不会淡出呢?就像我看到了很多效果一样吗?还要注意的是,在学习和掌握javascript的过程中,我试图在不使用jquery或任何插件的情况下完成这项工作Javascript 为什么赢了';t此脚本用作淡出动画效果,javascript,Javascript,这将在javascript函数中实现;用onclick事件处理程序之类的。 然后单击它将淡出box的id使用的document.getElementsById()对象,那么为什么它不会淡出呢?就像我看到了很多效果一样吗?还要注意的是,在学习和掌握javascript的过程中,我试图在不使用jquery或任何插件的情况下完成这项工作 setTimeout(function() { for(var i = 1; i< 9; i++) { setTimeo
setTimeout(function() {
for(var i = 1; i< 9; i++) {
setTimeout(function() {
box.style.opacity = '0.'+i;
}, 100);
}
}, 1000);
setTimeout(函数(){
对于(变量i=1;i<9;i++){
setTimeout(函数(){
box.style.opacity='0.'+i;
}, 100);
}
}, 1000);
有几件事:
1) 实际上,您是通过增加不透明度来淡入长方体,而不是通过降低不透明度来淡出长方体
2) 您正在同时设置所有setTimeout函数,在内部调用中,您可能希望调用setInterval并获得增量i。或者,您可以通过将计时设置为100*i而不仅仅是100来堆积设置超时。以下几点:
1) 实际上,您是通过增加不透明度来淡入长方体,而不是通过降低不透明度来淡出长方体
2) 您正在同时设置所有setTimeout函数,在内部调用中,您可能希望调用setInterval并获得增量i。或者,您可以通过将计时设置为100*i而不是100来堆积设置超时。您的问题并不清楚,但可能会立即看到0.9的不透明度。原因是for循环实际上并没有给出循环中i的值,只有访问它的地址。如果您在for循环的主体中实际使用它,这很好,但是您没有这样做。设置超时时,在调用超时时,已经完成了对for循环的迭代,i为9。因此,每个超时仅将不透明度设置为0.9 要解决这个问题,您可以将其包装在自动执行的匿名函数中,该函数传递i的值。这样做将导致匿名函数作用域i,并允许在调用它时通过超时来访问它
setTimeout(function() {
for (var i = 1; i < 9; i++) (function(i) {
setTimeout(function() {
box.style.opacity = '0.' + i;
}, 100);
}(i) // (i) at the end automatically executes, with the argument of i
}, 1000);
setTimeout(函数(){
对于(var i=1;i<9;i++)(函数(i){
setTimeout(函数(){
box.style.opacity='0.'+i;
}, 100);
}(i) //(i)在末尾自动执行,参数为i
}, 1000);
您的问题并不十分清楚,但可能会立即看到0.9的不透明度。原因是for循环实际上没有在循环中给您i的值,只有访问它的地址。如果您在for循环体中实际使用它,这很好,但您没有这样做。当您设置timeo时ut,在调用超时时,它已经完成了对for循环的迭代,i为9。因此,每个超时只将不透明度设置为0.9
要解决此问题,可以将其包装在自动执行的匿名函数中,该函数传入值i。这样做将导致匿名函数作用域i,并允许在调用它时通过超时来访问它
setTimeout(function() {
for (var i = 1; i < 9; i++) (function(i) {
setTimeout(function() {
box.style.opacity = '0.' + i;
}, 100);
}(i) // (i) at the end automatically executes, with the argument of i
}, 1000);
setTimeout(函数(){
对于(var i=1;i<9;i++)(函数(i){
setTimeout(函数(){
box.style.opacity='0.'+i;
}, 100);
}(i) //(i)在末尾自动执行,参数为i
}, 1000);
您应该递归调用该函数,如下所示:
var box = document.getElementById('box');
var i = 10;
function fadeOut() {
if (i>0) {
i--;
box.style.opacity = '0.'+i;
setTimeout(fadeOut, 100);
}
}
setTimeout(fadeOut, 1000);
您应该递归调用该函数,如下所示:
var box = document.getElementById('box');
var i = 10;
function fadeOut() {
if (i>0) {
i--;
box.style.opacity = '0.'+i;
setTimeout(fadeOut, 100);
}
}
setTimeout(fadeOut, 1000);
你能提供更多关于浏览器版本和代理的详细信息吗?可能重复的,你能提供更多关于浏览器版本和代理的详细信息吗?可能重复的和+1,我太关注I为9,但这也是一个好答案,因为即使在修复之后,你的淡入淡出将等待100秒,然后所有超时都将被调用。可能不是他想要的。+1,我把太多的精力放在了9岁,但这也是一个很好的答案,因为即使在修复之后,你的淡入淡出将等待100秒,然后所有的超时都将被调用。可能不是他想要的。这完全符合我的要求。你能详细介绍一下我希望的一切工作方式吗为了准确地了解发生了什么,您几乎在同一时间(在该循环中)安排了所有超时,因此它们几乎在同一时间触发。我在这里所做的更改是,首先将“i”设置为10,然后调用“fadeOut”并减小i(更改为9),因此不透明度现在设置为0.9,之后它将在100ms内安排下一次更新(“setTimeout(fadeOut,100)”),相同的函数将重复,直到“i”为0(不透明度为0.0).查看维基百科上的递归:这完全符合我的要求。你能详细介绍一下一切是如何工作的吗?因为我希望你能准确地了解发生了什么事情你几乎同时安排了所有的超时(在这个循环中),所以它们几乎同时被触发。我在这里所做的更改是,首先将“i”设置为10,然后调用“fadeOut”并减小i(更改为9),因此不透明度现在设置为0.9,之后它将在100ms内安排下一次更新(“setTimeout(fadeOut,100)”,相同的函数重复执行,直到“i”为0(不透明度为0.0).检查维基百科上的递归: