SVG动态生成的子元素,同时绑定"click"和"dblclick".
来源:互联网 发布:加密软件破译系统 编辑:程序博客网 时间:2024/06/05 15:25
1、首先 在鼠标点击 svg
时,调用画矩形方法 drawRect(x,y,w,h)
var svgDom = document.getElementById('svg'); /* 取到svg元素 */var x,y;$(svgDom).on('click',function (event) { // 绘制开始 // 获取起点坐标值 x = event.offsetX; y = event.offsetY; if(event.target.nodeName=='svg'){ drawRect(x,y,150,50); } });
function drawRect(x,y,w,h) { // 动态画矩形 の 方法 var rect = document.createElementNS('http://www.w3.org/2000/svg','rect'); rect.setAttribute("x",x-w/2); // 鼠标点击位置 作为 矩形的中心 rect.setAttribute("y",y-h/2); rect.setAttribute("width",w); rect.setAttribute("height",h); rect.setAttribute("rx",'5'); // 设置所画矩形的圆角(border-radius) rect.setAttribute("ry",'5'); rect.setAttribute("style",'fill:white;stroke:black;'); evt.init(rect); // 绑定 click 和 dblclick svgDom.appendChild(rect); }
2、绑定点击事件 判断是 单击 or 双击
var evt =(function() { // 绑定 click 和 dblclick の 方法 var timer = null; return { click:function () { clearTimeout(timer); timer = setTimeout(function(){ alert('click'); }, 300); }, dblclick:function () { clearTimeout(timer); alert('dblclick'); }, init:function (elem) { $(function () { elem.addEventListener("click", evt.click); // 这里存在问题,修改方案继续往下看 elem.addEventListener("dblclick", evt.dblclick); }); } }})();
发现代码有点问题=_=,还是不能盲目来啊:
我用
addEventListener
给元素绑定了事件,但是在click
和dblclick
函数中的this
指向的是window
,这种情况下就不能给被绑定的元素做操作了。
然后我附上修改后的代码,发现问题及时修改,说不定一会还会有要改的地方。。。。慢慢来,一点点进步
var evt =(function() { var timer = null; return { click:function (el) { clearTimeout(timer); timer = setTimeout(function(){ alert('click'); console.log(el); }, 300); }, dblclick:function (el) { clearTimeout(timer); console.log(el); // 取到的就是elem,可直接进行操作了 alert('dblclick'); }, init:function (elem) { $(function () { elem.addEventListener("click", function(){evt.click(elem)}); elem.addEventListener("dblclick", function(){evt.dblclick(elem)}); }); } }})();
上面的修改是在 addEventListener
中的外来函数将 elem
传过去,但是直接加 ( ) 传参,会立即执行外来函数(click和dblclick)。
用 function(){}
包起来,将 参数 elem
传到外来函数里,就不会立即执行了。
init:function (elem) { $(function () { elem.addEventListener("click", function(){evt.click(elem)}); elem.addEventListener("dblclick", function(){evt.dblclick(elem)}); }); }
阅读全文
0 0
- SVG动态生成的子元素,同时绑定"click"和"dblclick".
- javascript同一个元素同时绑定click和dblclick事件(同时单击和双击事件)
- 动态生成的html元素绑定click事件
- jquery 绑定动态元素的click事件
- jquery为动态生成的元素生成click事件
- 动态生成的html绑定click事件没有效果不执行 click事件重复绑定问题
- jquery动态生成的元素自动执行一次click事件
- 动态生成行,序号随之增加,删除后依然按顺序。所以给动态生成的html元素绑定click事件
- jquery动态生成的元素绑定事件
- jQuery-动态生成的元素绑定无效
- js动态生成的元素绑定事件
- angularJS 单击ng-click和双击ng-dblclick嵌套或者出现在同一元素 避免事件互相干扰方法
- Apple 移动设备绑定动态生成元素点击事件$(document).on('click',element,callback)失效解决方法
- jquery插件动态生元素,绑定angularjs on-click事件
- jQuery on和off配合使用为动态生成的元素绑定监听事件
- jquery 动态生成的元素的事件无法绑定
- jquery 动态生成的元素的事件无法绑定
- jquery 动态生成的元素的事件无法绑定
- PAT B1009.说反话
- SQL Server监控
- java菜鸟之路
- 《TP5.0学习笔记---URL和路由篇》
- 大数据--一致性哈希算法
- SVG动态生成的子元素,同时绑定"click"和"dblclick".
- spring 整合 redis,以及spring的RedisTemplate如何使用
- golang中使用go时出现的的问题
- new/delete与malloc/free的区别是什么
- iOS工作小技巧及填坑记录
- Android 测试CTS,GTS目录及脚本整理
- Leetcode习题记录——Longest Common Prefix
- PAT甲级 1022
- springboot入门3-操作redis