想实现在一个div里根据传入数据画出多个多边形,多边形的数量是变化的,由传入数据决定,然后实现鼠标移动到那个多边形中,这个多边形显示,移出则清除画布,我动态创建了多个画布,并为每个画布添加了id,并且设置了onmouseover和onmouseout事件响应,但是当鼠标移动进行事件响应时,由于画图函数要传递多边形顶点坐标,这时老是没有参数传递进去,不知道这个要怎么解决,还望大家指点一下。 function multiCnvs(pnt) { if(null==pnt) { alert("请输入有效数据!"); return ; } var sz = pnt[0]; var result = pnt.slice(1,pnt.length); for (var i = 0; i < sz; i++) { var index = 0; index = result.indexOf('-1'); var temp=result.slice(0,index); polypnt[i]=temp; // var tempx = new Array(); // var tempy = new Array(); polypntx[i]=new Array(); polypnty[i]=new Array(); for (var j = 0; j < polypnt[i].length/2; j++) { polypntx[i][j]=polypnt[i][j*2]; polypnty[i][j]=polypnt[i][j*2+1]; }; var xmx = Math.max.apply(null,polypntx[i]); var xmn = Math.min.apply(null,polypntx[i]); var ymx = Math.max.apply(null,polypnty[i]); var ymn = Math.min.apply(null,polypnty[i]); var w = xmx-xmn; var h = ymx-ymn; var newCnvs= document.createElement('canvas'); var tit="pnt_"+i; newCnvs.setAttribute("id",tit); // newCnvs.setAttribute("width",w); newCnvs.setAttribute("height",h); newCnvs.width=w; // newCnvs.style.backgroundColor="#00ff00"; newCnvs.style.border="1px solid red"; newCnvs.style.position="absolute"; newCnvs.style.float="left"; newCnvs.style.marginTop =ymn+"px"; newCnvs.style.marginLeft =xmn+"px"; // newCnvs.style.z-index=i+1; document.getElementById('btmDiv').appendChild(newCnvs); eval("pnt_"+i+"=tit;"); newCnvs.onmouseover=polydraw; newCnvs.onmouseover(tit,polypntx[i],polypnty[i]); result = result.slice(index+1,result.length); };
不知道你的function isIn()函数是怎么样的,我使用了HTML DOM getContext() 方法getContext() 方法返回一个用于在画布上绘图的环境,然后在onmouseover事件中通过HTML5 canvas isPointInPath() 方法判断鼠标是否在图形内,并将鼠标位置输出,请点击查看在线演示,你可以把鼠标位置输出改成你要显示的函数
mousemove可以而mouseover不行的原因是你的mouseover绑定的是canvas,鼠标进入canvas的边界的时候就会触发这个事件,而且只触发一次,除非鼠标移出后再移进,但是始终是在canvas的边界触发。所以当你的鼠标在移到canvas里面的多边形的时候,什么也不会触发。而mousemove会在鼠标移动的过程中始终监视鼠标的变化,并触发相应的事件。不知道我有没有说明白。
这两者的区别我也看了下,大致道理明白,个人理解如果触发了move,肯定也触发了over,只有在画布上才会有move的事件,而这个之前肯定经过了over,这里我换了一个思路,改用move代替了over和out,不过还是没有完全弄好
|