Javascript 如何使屏幕闪烁,不工作

Javascript 如何使屏幕闪烁,不工作,javascript,Javascript,这个代码应该使屏幕闪烁,但根本不起作用。为什么这不起作用,在我看来它是完美的,因为JSFIDLE中的代码被包装在一个onload函数中 向函数传递引用将修复它 var flashStep = 1; function flash() { if(flashStep==1) { document.bgColor="FFFF00"; flashStep=2; } else { document.bgColor="FF0000"; flashStep=1; } } var task =

这个代码应该使屏幕闪烁,但根本不起作用。为什么这不起作用,在我看来它是完美的

,因为JSFIDLE中的代码被包装在一个onload函数中

向函数传递引用将修复它

var flashStep = 1;
function flash() {
 if(flashStep==1) {
 document.bgColor="FFFF00";
 flashStep=2;
 }
 else {
 document.bgColor="FF0000";
 flashStep=1;
 }
}
var task = window.setInterval("flash()",1000);
或者从左侧的菜单中选择一个
(无换行)
选项


顺便说一下,这样做可以给文档背景上色

var task = window.setInterval(flash,1000);

而不是:

var i = 0;
var task = setInterval(flash, 1000);

function flash() {
    document.documentElement.style.backgroundColor=(i = ~i) ? '#ff0' : '#f00';
}
您需要此表格:

document.bgColor="FFFF00"
您缺少
.body.style.
,样式属性
backgroundColor
的名称不正确,并且需要在颜色值上有一个
#

此外,您的setTimeout()应该如下所示:

document.body.style.backgroundColor="#FFFF00";
在您的小提琴中,您可以通过将flash功能的定义更改为:

var task = setInterval(flash,1000);

您可以在JSFIDLE的修订版中看到所有这些功能:

使用
窗口.setInterval(flash,1000)


在JSFIDLE上运行代码时,这个特定的问题可能是一个范围问题。一般来说,当您实际想要传递回调时,不要将代码作为字符串传递,在Javascript中,可以通过传递函数本身来实现这一点。

有几个问题。首先,
bgColor
是元素的属性-它不适用于
文档
。也许你的意思是
document.body
?其次,您使用的是
bgColor
。请不要。您应该改为使用
style.backgroundColor
。第三,您可能希望对两个状态使用布尔值。第四,切勿将字符串传递给
setInterval
setTimeout
。因此,您的代码经过重写后将大致如下:

window.flash = function() {

现在查看它的工作原理,

问题在于将字符串传递到
setInterval
时应用的(全局)范围。如果您传递的是函数引用,则它将起作用:

var task=window.setInterval(flash,1000)


另一个选项是在JSFIDLE中选择“nowrap”选项,这样您的代码就不会在onload/onready处理程序的作用域中定义…

@minitech:How so,是的,好的,你说要通过推荐人。颜色怎么样?看在上帝的份上,这是BGCOLOR!!!不过我会取消否决票,我只是对BGCOLOR有这种反射反应!!!为什么使用jQuery而不使用jQuery?如果要使用jQuery,请一直使用它。不要使用半生不熟的解决方案。@minitech:显然,Jayantha借用了ready回调来明确jsiddle隐藏的内容。为什么这对你来说是个问题?“这些半生不熟的评论够了!”右派说,“我不会争辩的。”。这不是一个好答案。这不能解释任何事情。这是可以改进的。@minitech:这与您最初的评论无关。“你为什么使用jQuery而不使用jQuery?如果你要使用jQuery,就要一直使用它。不要使用半生不熟的解决方案。”@RightSaidFred:事实上是这样的。如果有人打算重写代码而不做任何解释,那么应该一直重写代码,特别是当修改为使用一个库时,该库最初没有包含在JSFIDLE中,默认情况下甚至没有包含在JSFIDLE中。然后解释。但这是一个小补丁,它没有解释更改是什么,问题是什么,甚至没有在它的主体中包含代码。
bgColor
works,老派。(至少它在我碰巧测试的特定浏览器中工作。)但是,是的,设置
style.backgroundColor
是一个更好的计划。这是对应该更改的内容的一个很好的总结,但是您没有解释OP中的代码为什么不工作,即。,在一般意义上,虽然将字符串传递给
setInterval
实际上并没有错,但如果在onload/onready处理程序中定义flash函数,它将影响作用域,因此将不起作用
document.bgColor
确实有效(至少在某些浏览器中是如此)。@nnnnnn:它有效——但仍然很可怕。有点像IE6。
var flash = false;
var task = setInterval(function() {
    if(flash = !flash) {
        document.body.style.backgroundColor = '#ff0';
    } else {
        document.body.style.backgroundColor = '#f00';
    }
}, 1000);
setInterval(flash,1000);