移除鼠标移出时的 canvas 矩形边框
Remove canvas rectangle border on mouseout
假设我像这样在 canvas 上创建了一个矩形...
var c = document.createElement("canvas");
document.body.appendChild(c);
var ctx = c.getContext("2d");
ctx.rect(20, 20, 150, 100);
ctx.fillText('hover mouse here', 60, 60);
c.addEventListener('mouseover', function() {
ctx.stroke();
});
然后,当您将鼠标移到文本上时,矩形周围会出现边框。但是假设我希望在鼠标离开 canvas 区域后边框消失。我需要重新绘制整个矩形还是有更简单的方法来移除边框?
这只是一个简单的例子。我的实际 canvas 矩形中包含多个绘图,因此每次都必须重新绘制它会很痛苦。只是好奇是否有更简单的方法。
我已经尝试过样式属性,但它不起作用。
这是上述代码的 fiddle:http://jsfiddle.net/wqbrnm0o/
用于更改 canvas 的常用模式是擦除整个 canvas 并重绘所有需要的内容。 Canvas 足以处理大多数重绘。所以你会在鼠标悬停时在你的矩形上绘制笔划,你会在鼠标移开时擦除并重绘所有没有笔划的内容。
如果您仍然觉得需要保留内容,可以创建第二个 canvas 覆盖第一个 canvas。
鼠标悬停时,您只在顶部 canvas 绘制 "highlight" 笔划。
在 mouseout 上,您可以简单地清除顶部 canvas。底部 canvas 和所有其他内容将不受影响。
你可以设置 CSS pointer-events:none;
属性 在顶部 canvas 这样底部 canvas 接收所有的鼠标事件。
您还可以在 mouseleave 上创建第二个事件,在该事件中用白色描边颜色在旧矩形上划一个新矩形。
var c = document.createElement("canvas");
document.body.appendChild(c);
var ctx = c.getContext("2d");
ctx.rect(20, 20, 150, 100);
ctx.fillText('hover mouse here', 60, 60);
c.addEventListener('mouseover', function() {
ctx.rect(20, 20, 150, 100);
ctx.strokeStyle="#000000";
ctx.stroke();
});
c.addEventListener('mouseleave', function() {
ctx.rect(20, 20, 150, 100);
ctx.strokeStyle="#ffffff";
ctx.stroke();
});
假设我像这样在 canvas 上创建了一个矩形...
var c = document.createElement("canvas");
document.body.appendChild(c);
var ctx = c.getContext("2d");
ctx.rect(20, 20, 150, 100);
ctx.fillText('hover mouse here', 60, 60);
c.addEventListener('mouseover', function() {
ctx.stroke();
});
然后,当您将鼠标移到文本上时,矩形周围会出现边框。但是假设我希望在鼠标离开 canvas 区域后边框消失。我需要重新绘制整个矩形还是有更简单的方法来移除边框?
这只是一个简单的例子。我的实际 canvas 矩形中包含多个绘图,因此每次都必须重新绘制它会很痛苦。只是好奇是否有更简单的方法。
我已经尝试过样式属性,但它不起作用。
这是上述代码的 fiddle:http://jsfiddle.net/wqbrnm0o/
用于更改 canvas 的常用模式是擦除整个 canvas 并重绘所有需要的内容。 Canvas 足以处理大多数重绘。所以你会在鼠标悬停时在你的矩形上绘制笔划,你会在鼠标移开时擦除并重绘所有没有笔划的内容。
如果您仍然觉得需要保留内容,可以创建第二个 canvas 覆盖第一个 canvas。
鼠标悬停时,您只在顶部 canvas 绘制 "highlight" 笔划。
在 mouseout 上,您可以简单地清除顶部 canvas。底部 canvas 和所有其他内容将不受影响。
你可以设置 CSS pointer-events:none;
属性 在顶部 canvas 这样底部 canvas 接收所有的鼠标事件。
您还可以在 mouseleave 上创建第二个事件,在该事件中用白色描边颜色在旧矩形上划一个新矩形。
var c = document.createElement("canvas");
document.body.appendChild(c);
var ctx = c.getContext("2d");
ctx.rect(20, 20, 150, 100);
ctx.fillText('hover mouse here', 60, 60);
c.addEventListener('mouseover', function() {
ctx.rect(20, 20, 150, 100);
ctx.strokeStyle="#000000";
ctx.stroke();
});
c.addEventListener('mouseleave', function() {
ctx.rect(20, 20, 150, 100);
ctx.strokeStyle="#ffffff";
ctx.stroke();
});