javascript raphael.js多个对象和事件
javascript raphael.js multiple objects and events
我试图通过悬停事件将一个事件链接到一个raphael.js对象,但它不起作用。这是我的代码:
var paper = Raphael('menu', 400, 400);
for(var i = 0; i < 6; i++) {
var x = 200,
y = 200;
var rx = Math.sin(i / 6 * 2 * Math.PI),
ry = Math.cos(i / 6 * 2 * Math.PI);
var hx = x + rx * 100,
hy = y + ry * 100;
var hexa = polygon(hx, hy, 6, 50);
hexa.attr("fill", "rgb(212, 212, 212)");
hexa.attr("stroke-width", 0);
var hoverTitle = paper.text(hx + rx * 70, hy + ry * 70, "foo " + i);
var hoverIn = function() {
this.animate({fill: "rgb(247,245,240)"}, 300, '<>');
hoverTitle.show();
hoverTitle.animate({opacity:1}, 200, '<>');
}
var hoverOut = function() {
this.animate({fill: "rgb(212, 212, 212)"}, 300, '<>');
hoverTitle.animate({opacity:0}, 200, '<>');
hoverTitle.hide();
}
hexa.hover(hoverIn, hoverOut, hexa, hexa);
}
function polygon(x, y, N, side) {
var path = "", n, temp_x, temp_y, angle;
for(n = 0; n <= N; n++) {
angle = n / N * 2 * Math.PI;
temp_x = x + Math.cos(angle) * side;
temp_y = y + Math.sin(angle) * side;
path += (n === 0 ? "M" : "L") + temp_x + "," + temp_y;
}
return paper.path(path);
}
我希望每个六边形在悬停时都显示它的foo,但我不明白为什么它总是指最后一个foo。。。我应该分别申报吗?
这是一个小提琴
之所以会发生这种情况,是因为您将hoverTitle定义为全局变量,所以当您试图在回调中使用它进行操作时,您总是使用最后一个。
解决方案是将hoverTitle定义为每个六边形的局部属性,例如:
hexa.hoverTitle = paper.text(hx + rx * 70, hy + ry * 70, "foo " + i);
然后在回调中使用此属性进行操作:
this.hoverTitle.show();
this.hoverTitle.animate({opacity:1}, 200, '<>');
Fiddle
相关文章:
- 将事件附加到对象/数组
- 在创建对象后附加一个jquery事件
- JavaScript:点击事件中对象的值
- 如何从已注册的事件发送 JavaScript 对象
- jsplumb中的Click事件处理程序丢失“;这个“;对象
- 枚举附加到文档的HTML对象的所有事件
- 通过单击事件识别画布上的对象
- jQuery UI draggable:绑定到mousemove事件中的对象
- 如果在对象上触发了dispatchEvent,我如何才能找到如何侦听它以及在哪里调度事件
- 如何从jQuery的事件对象中检索属性
- 如何在动态创建元素的内联onclick事件中传递对象
- 如何在JavaScript中基于事件对象获取文件名
- 如何在不删除类似侦听器的情况下从父对象中删除jQuery事件侦听器
- YES或NO表示对象事件中的分号
- Javascript关闭DOM对象事件和事件冒泡
- 存储对象事件的内容
- 将 JS 函数附加到动态创建的对象事件
- 未捕获的类型错误:对象 #<事件> 没有方法“拆分”
- javascript中的ONDELETE对象事件
- 嵌套对象事件