2015-06-25 51 views
0

所以我終於得到了一段代碼,但我無法理解它爲什麼起作用。我的CSS基本上有一個 精靈表,它將一個框變形爲一個圓。布爾上的JavaScript NOT操作符

animation-play-state : paused;是我的CSS中的一個規則,它保持精靈開始動畫,直到按下按鍵爲止,如您在JavaScript代碼中所看到的。

我的問題是爲什麼if執行代碼塊時keycheckfalse。根據我對!運營商如何工作的瞭解,是不是代碼只在keycheck爲「NOT」false時纔會執行?它的初始值是false,爲什麼它運行?

該代碼假設在按住某個鍵時停止重複執行該事件。

keycheck = false; 

window.addEventListener("keydown", checkKey_DN, false); 
window.addEventListener("keyup", checkKey_UP, false); 

function checkKey_DN(e) { 
    if(e.keyCode == "83" && !keycheck){ 
     keycheck = true; 
     $("boxMorph").style.animationPlayState = "running"; 
     $("boxMorph").style.WebkitAnimationPlayState = "running"; 
     $("boxMorph").style.visibility = "visible"; 
     $("boxMorph").classList.remove ("boxes"); 
     $("boxMorph").offsetWidth = $("boxMorph").offsetWidth; 
     $("boxMorph").classList.add ("boxes");  

     } 
    } 

function checkKey_UP(e){ 
    if(e.keyCode == "83"){ 
     keycheck = false; 
     $("boxes").style.visibility = "hidden"; 
     } 
    } 

這段代碼有助於重新設置css精靈的動畫效果。

$("boxMorph").classList.remove ("boxes"); 
$("boxMorph").offsetWidth = $("boxMorph").offsetWidth; 
$("boxMorph").classList.add ("boxes"); 
+1

如果初始值爲'false',那麼'!false === true' ... if條件是使用'&&'的AND條件,所以如果兩個部分都評估爲true,則它的計算結果爲真。並且'!false'的計算結果爲真,當然 – devnull69

+1

我認爲你想使用'if(keycheck!= false)',它等同於'if(keycheck)',並且與if(!keycheck)完全相反' – devnull69

+0

啊,我明白了......我一直誤解了這個錯誤。感謝您解決這個問題! – PrimRock

回答

1

你誤解了不是 - 它返回值的倒數:

if(false) { /* this block will not be executed */ } 

if(!false) { /* this block will be executed */ } 

這是因爲!false評估爲true,這相當於:

if(true) { /* this block will be executed */ } 

支票if(!keycheck)將成功只有當keycheck的值是虛假的,例如keycheck = false

+0

這整個時間我一直誤解它錯誤...非常感謝解釋! – PrimRock

+0

高興地幫助:¬)請接受我的回答,如果它是正確的。 – Armand

+0

我不得不等待一段時間才能接受答案,但是你去了。再次感謝! :) – PrimRock

1

!運算符是否定運算符而不是運算符!=

+0

看來,我已經把他們弄混了。感謝您解決這個問題! – PrimRock