您现在的位置: 爱51代码网 >> 范文 >> 文章正文
js动态生成canvas后为其添加onmouseover

想实现在一个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,不过还是没有完全弄好

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 最新文章 热点文章 相关文章
    Unable to write data to the tr
    asp.net中listbox的items.count属
    C#不是每次查询数据是不是被缓存
    ASP.NET发布后能加载引用的js文件
    Hadoop2.2.0在eclipse控制台没有
    maven如何加自定义的包
    redhat 2.6 (santigo 5.6) vsftp
    shell如何实现自动填写操作执行下
    linux shell 文件配置sh:color:
    shell script语法一定要加path吗
    Hadoop2.2.0在eclipse控制台没有
    maven如何加自定义的包
    redhat 2.6 (santigo 5.6) vsftp
    shell如何实现自动填写操作执行下
    linux shell 文件配置sh:color:
    shell script语法一定要加path吗
    SecureCRT如何访问虚拟机vmWare中
    C#如何读取WINDOWS的放大系数
    cximge的图如何存入数据库并提取
    DBGRID控件显示查询结果文本类型
    IE8如何让无序列表中的文字与
    jquery怎么获取值去掉px
    js点击改变样式该代码实现
    XMLHttpRequest中getRespons
    ajax传值给了asp.net后台后,
    js验证手机号码的正则表达式
    如何通过JS屏蔽回车键提交表
    highcharts中x轴的刻度的距离
    JS 如何判断乱码
    当调用一个函数时,如何运行
     



    设为首页 | 加入收藏 | 网站地图 | 友情链接 |