Raphael悬停事件和调整大小框在第三次鼠标悬停后发生故障
Raphael hover event along with resizing box breaks down after third mouseover
这是一个JSFiddle。
编辑:这里有一个更好的JSFiddle
当我第三次悬停在圆圈上时,矩形变得巨大,不再消失。
绘制文本和矩形的代码取自这篇文章;我需要让矩形的大小取决于文本的大小,我不能预先定义它。
var rsr = Raphael("holder", '1160', '1400');
xpos = 200;
ypos = 200;
rad = 50;
cir = rsr.circle(xpos, ypos, rad);
cir.attr({
fill: '#444',
'fill-opacity': 1,
stroke: 'none'
});
cir.hover(function() {
this.animate({ r: rad*1.2 }, 200);
var recttext = rsr.set();
el = rsr.rect(0, 0, 0, 0, 3);
el.attr({fill: '#fff'});
txt = rsr.text(4,10, "Title text").attr({"text-anchor":"start",fill:'#000000',"font- size": 12});
recttext.push(el);
recttext.push(txt);
var att = {width:recttext.getBBox().width, height:recttext.getBBox().height};
el.attr(att);
recttext.translate(xpos - recttext.getBBox().width/2, ypos - rad - 20);
}, function() {
this.animate({ r: rad }, 100);
recttext.remove();
el.remove();
txt.remove();
});
很抱歉代码间隔太大,几次复制/粘贴后就被弄乱了。
您的代码中有错误。第二个函数返回错误消息:
Uncaught ReferenceError: recttext is not defined
因为变量CCD_ 1在第二函数中不可见。变量el
和txt
也可能发生类似的情况。您在第一个函数中没有使用var el = ...
,所以它是在全局空间中定义的,在第二个函数中可以看到,没有问题。
您必须将recttext
的定义移出悬停函数(并添加变量el
和txt
):
var recttext, el, txt;
cir.hover(function() {
this.animate({ r: rad*1.2 }, 200);
recttext = rsr.set();
...
在JavaScript中,如果第一次在没有var
的情况下使用变量,则将其放置在全局空间中。这就是为什么变量el
和recttext
0随处可见的原因。变量recttext
是用var
定义的,因此它的作用域是第一个函数。将它们置于悬停函数之外,我们将它们全部设置为全局。
jsfiddle中的示例仍然显示闪烁。使用的版本为2.1.0。2.1.2版本没有闪烁。最新的Raphael库是2.1.2:里程碑,用于修复来自贡献者拉取请求的错误
相关文章:
- 当鼠标悬停在文本中的单词上时显示警报
- d3.js鼠标悬停鼠标输出问题
- 悬停(鼠标离开)方法不显示效果
- 为什么addEventListener只执行我的函数,而不为其创建鼠标悬停/鼠标打开事件
- 在鼠标悬停/鼠标出类中的任何元素时更改元素 ID
- 检测鼠标悬停/鼠标单击,无论 Z 顺序/图层级别如何
- 悬停/鼠标悬停功能冲突
- 子元素的 JavaScript 鼠标悬停/鼠标退出问题
- 在 iPad 上触发悬停/鼠标退出/模糊
- 如何通过按钮单击和鼠标悬停/鼠标退出显示和隐藏节点文本?D3/JS.
- 背景图像在悬停/鼠标悬停时消失,菜单在IE中不起作用
- jQuery鼠标悬停/鼠标悬停将不适用于Live
- jQuery-悬停以在刷新时触发悬停/鼠标悬停
- 悬停/鼠标悬停未在元素内部的每次移动中激活
- HighCharts条形图:悬停鼠标时显示条形值
- 鼠标悬停/鼠标离开,鼠标进入/鼠标离开,鼠标悬停闪烁问题
- 滚动时未触发鼠标悬停/鼠标输入
- JavaScript-如何在鼠标悬停/鼠标悬停上同时更改TR中所有TD的背景颜色
- 记住并在悬停鼠标悬停后显示以前活动的导航选项卡
- JavaScript延迟CSS悬停/鼠标悬停效果