2017-03-02 11 views
0

我的代碼很簡單:如何「停止」或切換此.mouseenter功能?

VAR平局= FALSE;

如果點擊鼠標,它會將'draw'從false切換爲true。

如果「繪製」是真實的,它使一個的mouseenter()事件顏色的某些(標記爲「像素」)的背景當鼠標進入在div。這工作正常,但是當我再次單擊鼠標並將'draw'設置爲false時,mouseenter事件不會關閉。我可以在顏色背景白色再次樹立了「別人的說法,但是這不是想法,更多的是繃帶的...

這是在一個函數中的所有處理。

var draw = false; 
var drawStart = function(){ 
    draw=!draw; 
    if (draw === true) 
    { 
     $('.pixel').mouseenter(function() { 
       $(this).css('background-color', 'black'); 
     }); 
    } 
    else 
    { 

      //don't do anything 
    } 

}); 

我也試着調換像素類向它漆後別的東西,但我仍然會碰到類似的問題,其中MouseEnter事件仍然會觸發類變化平局是否是真還是假。

我也嘗試了while循環,而不是if/else語句,但這種崩潰的瀏覽器...

我寫這在移動,如果在上面的代碼拼寫錯誤,他們可能是不存在的我的實際代碼。

回答

0

您需要解除綁定(關閉)的情況下,嘗試:

var draw = false; 
var drawStart = function(){ 
    draw=!draw; 
    if (draw === true) 
    { 
     $('.pixel').mouseenter(function() { 
       $(this).css('background-color', 'black'); 
     }); 
    } 
    else 
    { 
      // deprecated 
      // $('.pixel').unbind('mouseenter'); 
      $('.pixel').off('mouseenter'); 
    } 

}); 

正如評論所說,你應該使用了。

+0

[unbind()](http://api.jquery.com/unbind/)已棄用。改用'off()' –

0

mouseenter被綁定到.pixel並持續該函數調用後。你有.off

$('.pixel').off('mouseenter'); 

刪除它要我使你的代碼更易於閱讀:

var draw = false; 
var drawStart = function(){ 
    draw=!draw; 
    if (draw === true) 
    { 
     $('.pixel').on('mouseenter', function() { 
       $(this).css('background-color', 'black'); 
     }); 
    } 
    else 
    { 
     $('.pixel').off('mouseenter'); 
    } 

}); 

參考:How do I properly use the jQuery off() method to remove the mouseenter and mouseleave events off an element

1

我建議想這個不同。首先,創建一個封裝你的風格的CSS類。

.draw { background-color: black; } 

然後,而不是添加和刪除事件處理程序,總是綁定事件處理程序,只是在用它做什麼,如果不需要的話。

var draw = false; 
var drawStart = function(){ 
    draw = !draw; 
}; 
$('.pixel').on('mouseenter', function() { 
    if (draw) { 
     $(this).addClass('draw'); 
    } 
}); 

這使得它更容易地看到發生了什麼事情,並移動風格你的JavaScript代碼到它所屬的CSS。

請注意,此代碼只增加了draw類,永不刪除。如果您希望它在鼠標輸入時打開/關閉,請使用toggleClass而不是addClass

0
else 
    { 
     $('.pixel').off('mouseenter'); 
    } 

這是訣竅。謝謝!我會考慮其他解決方案以備將來參考。