Jam*_*mie 3 jquery html5 canvas mouseout
当mouseover事件触发时,我有以下内容在画布上绘制多边形:
$(document).ready(function() {
$('#flam').mouseover(function() {
context.fillStyle = '#f00';
context.beginPath();
context.moveTo(98,265);
context.lineTo(197,240);
context.lineTo(197,235);
context.lineTo(227,220);
context.lineTo(242,220);
context.lineTo(245,209);
context.lineTo(252,208);
context.lineTo(252,200);
context.lineTo(274,179);
context.lineTo(277,179);
context.lineTo(290,166);
context.lineTo(191,72);
context.lineTo(164,97);
context.lineTo(166,112);
context.lineTo(94,129);
context.lineTo(105,170);
context.lineTo(72,177);
context.closePath();
context.fill();
$('#flam').mouseout(function() {
//What do I need to do here to clear this on mouseout
;})
;})
Run Code Online (Sandbox Code Playgroud)
或者是否有另一种更有效的方法来做到这一点
好吧,我的回答完全改变了:-).
您需要做什么:
- 在图像顶部设置画布.
- >同时用于画布和图像:position:absolute; 顶:0像素; 左:0像素;
- 为了让IE工作(对于@Kerry Liu的评论),似乎你不能忽略IE中画布上的鼠标事件,所以在画布+图像上设置另一个空图像,并挂钩这个最新图像上的区域.
- 为您的所有区域添加一个类,以便能够选择它们.我选择'mapPart'.
- 挂钩一个事件,将鼠标
悬停在画布上为所有mapParts 绘制多边形.
- 挂钩一个事件,将鼠标移出所有mapParts清除画布.
http://jsfiddle.net/gamealchemist/cmKsD/
(使用jQuery 1.9.1)
(我从@enhzflep那里得到了这个答案的信用,我在
这里汇总了多边形绘图:-) :如何在html区域标签上应用鼠标悬停?
人们可能想像他一样处理其他区域类型.)
html(提取):
<div id='myImage' class="map">
<img src="http://www.linkparis.com/images/francemap.jpg" border="0"
style='position:absolute; top:0px; left:0px;' />
<canvas id='myCanvas' height='494' width='494' style='position:absolute; top:0px; left:0px;'>Canvas is not supported by your browser.</canvas>
<img border="0" usemap="#imgmap" style='position:absolute; top:0px; left:0px; width:100%; height:100%; ' usemap="#imgmap" />
</div>
<map id="imgmap" name="imgmap">
<area shape="poly" id="flam" class="mapPart" coords="98,265,197,240,197,235,227,220,242,220,245,209,252,208,252,200,274,179,277,179,
290,166,191,72,164,97,166,112,94,129,105,170,72,177" />
<area shape="poly" id="ancaster" class="mapPart" coords=" 198,240,97,265,103,274,232,334,254,263,251,261,251,243,243,245,240,235,
229,240,229,240,222,240,216,244,213,237" />
....
Run Code Online (Sandbox Code Playgroud)
代码:
var cv = document.getElementById('myCanvas');
var context = cv.getContext('2d');
context.clearRect(0, 0, cv.width, cv.height);
$('.mapPart').mouseover(function () {
var coordStr = this.getAttribute('coords');
// draw
drawPolygon(context, coordStr);
});
$('.mapPart').mouseout(function () {
// clear
context.clearRect(0, 0, cv.width, cv.height);
});
function drawPolygon(hdc, coOrdStr) {
var mCoords = coOrdStr.split(',');
var i, n;
n = mCoords.length;
hdc.beginPath();
hdc.moveTo(mCoords[0], mCoords[1]);
for (i = 2; i < n; i += 2) {
hdc.lineTo(mCoords[i], mCoords[i + 1]);
}
hdc.lineTo(mCoords[0], mCoords[1]);
hdc.stroke();
}
Run Code Online (Sandbox Code Playgroud)