我的代码很简单:
var draw = false;
如果点击了鼠标,则会切换'绘制'从虚假到真实。
如果'画'是的,它允许mouseenter()事件在鼠标进入div时为某些背景(标记为'像素')着色。这工作正常,但是当我再次单击鼠标并“绘制”#39;如果设置为false,则mouseenter事件不会关闭。我可以设置一个' else'声明再次为背景着色,但这不是主意,更像是一个绑带......
这一切都在一个函数中处理。
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事件仍会触发类更改,无论draw是true还是false。
我还尝试了一个while循环而不是if / else,但这会导致浏览器崩溃......
我是在移动设备上写的,如果上面的代码中有任何拼写错误,他们可能不会出现在我的实际代码中。
答案 0 :(得分: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
。
答案 1 :(得分: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');
}
});
如评论中所述,您应该使用off。
答案 2 :(得分:0)
else
{
$('.pixel').off('mouseenter');
}
这就是诀窍。谢谢!我会记住另一个解决方案以供将来参考。