2011-07-03 2 views
1

나는 "strobe light"를 javascript로 만들려고 노력하고 있는데, 나는 인터넷에서 나를 위해 그것을 할 수있는 몇 가지 코드를 발견했다. 그러나 그들은 bgcolor와 bgcolor를 사용했다. 내가 제대로해야한다고 생각하지만 난 그것을 BGCOLOR를 떠날 경우 코드는 작동합니다 ... 그래서 당신은 내가 여기에서 의미하는 것은 원래 알고 :bgcolor vs background-color vs backgroundColor

<html><head> 
<title>Strobe</title> 

<script> 

function toggleBgColor() 
{ 
    document.bgColor = document.bgColor == '#ffffff' ? '#000000' : '#ffffff'; 

    setTimeout('toggleBgColor()', 70); //in milliseconds 
} 
</script> 
</head> 

<body onLoad='toggleBgColor();'> 
</body></html> 



을하고 여기 내 변화가있다 :


<html><head> 
<title>Strobe</title> 

<script> 

function toggleBgColor() 
{ 
    document.body.style.background-color = document.body.style.background-color == '#ffffff' ? '#000000' : '#ffffff'; 

    setTimeout('toggleBgColor()', 70); //in milliseconds 
} 
</script> 
</head> 

<body onLoad='toggleBgColor();'> 
</body></html> 



는 또한 document.body.style.background 및 document.body.style.backgroundColor ... 그들 중 누구도 작동하지 않을 수있는 document.body.style.background-색상을 변경하려고했습니다 .. .내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

7

document.body.style.background-color 잘못된 식별자 이다 (물론, 기술적으로는 다른 유효한 식별자 [color] 연산자 다음 [-] 다음에 유효한 식별자 [document.body.style.background]은,하지만 당신은 내가 무슨 뜻인지)을. 대신 document.body.style.backgroundColor을 사용하십시오. 다른 것들이 맞다면 일을합니다. Live example

당신은 그렇게했다고 말한 적이 있습니다. 나는 당신의 코드가 다른 곳에서 실패하고 있다는 것이 문제라고 생각한다. 예를 들어, '#ffffff'에 비교하는 :

document.body.style.backgroundColor = document.body.style.backgroundColor == '#ffffff' ? '#000000' : '#ffffff'; 
//                  ^^^^^^^^^^^^ 

브라우저는 할 수 없습니다 (아마하지 않습니다) 보고서를 다시 당신에게 당신이 색을 지정하는 데 사용하는 동일한 형식으로. 이 값은 일부 브라우저에서는 "white"으로, 다른 경우에는 rgb(255, 255, 255) 등으로 돌아옵니다. 따라서 배경색이 인 경우에도 인 경우에도 비교가 자주 실패합니다. 복잡성을 처리하고 rgb을 구문 분석하고 색상 이름 등을 조회해야합니다.   — 또는 위의 예와 같이 플래그를 유지해야합니다.


오프 주제 : setTimeout에 문자열을 통과하지 마십시오; 대신 함수 참조를 직접 사용하십시오. 귀하의 경우 :

setTimeout(toggleBgColor, 70); //in milliseconds 

참고 따옴표,없이 () (때문에 것 전화 기능, 우리가하지 반환 값에의 참조를 전달하려는).

(당신이 그러나 단지 완전성에 대해,이 아니에요) 인수를 전달, 당신이 할 수있는 기능을 사용할 수있는 경우 :

setTimeout(function() { 
    doSomething("foo", "bar"); 
}, 70); 
+1

그래 미안 ... 그것은 내 부분에 다소 의미가있어 보였습니다 ... – JacKeown

+1

@JacKeown : 걱정할 필요가 없습니다. :-) –

1

정확한 추론의 확실하지만, CSS 스타일을 자바 스크립트를 통해 참조 할 때 결코 - 그들 안에있어.당신은 W3 참조 페이지를 체크 아웃하는 경우

당신은 그들이 "정의 및 사용"의 속성에 대한 자바 스크립트 구문을 제공 알 수 있습니다 섹션 : http://www.w3schools.com/cssref/pr_background-color.asp

될 가능성이 당신의 다음 문제 많은 브라우저 (크롬 적어도) 내부적으로 16 진수 값으로 배경색을 저장하지 않고 대신 RGB를 사용합니다.

따라서 코드 비교는 "rgb (0, 0, 0)"을 "# 000000"과 비교하여 결국 true를 반환하지 않게됩니다. 내 머리를 빨리 짚는 것은 코드에서 RGB 값을 사용하는 것입니다. 내 머리 위로 떨어져

나는 다음과 비슷한 모습이 될 것입니다 코드의 수정 버전을 상상하는 것 :

function toggleBgColor() 
{ 
    document.body.style.backgroundColor = document.body.style.backgroundColor == "rgb(255, 255, 255)" ? "rgb(0, 0, 0)" : "rgb(255, 255, 255)"; 
    setTimeout('toggleBgColor()', 70); 
} 

어쨌든, 희망하는 데 도움이 :