Raphael悬停函数没有'与其他潜水艇在一起时不起作用
Raphael hover function doesn't work when around other divs
我用Raphael创建了一系列按钮,使用了我在这里借用的特殊悬停功能(见第一个解决方案),它基本上"告诉"悬停在我在圆圈内的任何时候都保持"悬停",无论我的光标是在文本上还是在圆圈上。我已经使用了它,如这个jsfiddle所示——悬停函数可以在代码的最顶部找到,并在代码的底部激活。然而,每当我用包含以下内容的任何其他div包围拉斐尔画布时:
- css边距和填充
- div中的内容
特殊的悬停功能停止工作,如图所示。发生的情况是,每当我的光标移动到圆圈中间的文本部分时,我的圆圈按钮就会恢复到悬停前的状态。我已经意识到,如果我把Raphael画布放在html代码中所有其他div之上,它会起作用,或者如果我删除所有内容和样式,它也会起作用。我真的不能做任何一个选择。我想故障可能与此有关:
Raphael.el.hoverInBounds = function (inFunc, outFunc) {
var inBounds = false;
// Mouseover function. Only execute if `inBounds` is false.
this.mouseover(function () {
if (!inBounds) {
inBounds = true;
inFunc.call(this);
}
});
// Mouseout function
this.mouseout(function (e) {
var x = e.offsetX || e.clientX,
y = e.offsetY || e.clientY;
// Return `false` if we're still inside the element's bounds
if (this.isPointInside(x, y)) return false;
inBounds = false;
outFunc.call(this);
});
return this;
}
确切地说,"clientX,clientY"部分——在做了一些研究后,我觉得这个函数可能是在进行涉及整个页面的计算,而内容和边距/填充会导致计算错误或根本没有计算。我可能错了。我只是Javascript/Raphael的初学者。我的问题是:是什么导致我的悬停功能无法正常工作,有什么解决方案/解决方法吗?谢谢。
我想不出一个简单的答案,所以这有点麻烦,但可能会奏效。注意,我认为这在Opera中不起作用,但我认为这可能只是检查它如何处理事件坐标(clientX或layerX等)的一个例子。
text { pointer-events: none; }
将关闭文本对象的事件。这将允许svg形状接受所有事件,否则会发生冲突。
由于现在仍然需要事件,可以在元素上添加一个额外的mousemove处理程序,然后检查它是否在文本本身的边界区域内。
你需要做一些调整,使其感觉正确,也许可以调整由几个像素检查的区域,使其大于边界框。
this.mousemove( function(e) {
var x = e.layerX || e.offsetX || e.clientX,
y = e.layerY || e.offsetY || e.clientY;
var bb = this.text.getBBox();
if( (x >= bb.x) && (x <= bb.x + bb.width) && (y>=bb.y) && (y<=bb.y+bb.height) ) {
label.attr("text", this.text.attr("href"));
} else {
label.attr({
text: "Mouse over on circles for file name"
});
};
});
注意,我不是特别喜欢UI,我认为你想做的是不直观的,在一个事件上有一个动画对象,而在一个不基于内部动画的单独区域中有一个单独的事件。这感觉不对,但它可能会在一定程度上找到正确的解决方案。
jsfiddle
- 如何添加浮动和非浮动,其他
- 与其他库的jQuery.noConflict()
- 播放当前视频时如何停止其他视频?JavaScript
- 剑道UI内联编辑:如何在点击其他按钮时隐藏按钮
- 制作一个不带HTML a标记但在动画播放完毕后指向其他页面的超链接
- 除修剪外的其他功能
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- Array.length似乎不起作用;console.log则显示其他情况
- 如何消除代码中的未定义和其他问题
- 如何覆盖锚点元素's href目标,并在我点击转到目标javascript时删除其他错误
- jquery代码在Mozilla中有效,但在其他浏览器上无效
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- Jquery未定义函数正在停止其他操作
- 如何将我的javascript库公开给其他客户端使用
- Javascript阻止其他Javascript代码
- chart.series[id].remove()无法刷新高位图表/高位股票中其他系列的图例属性
- 如何“;过滤器”;或者以其他方式重构该数据
- java脚本在Chrome和其他浏览器中对LocaleTimeString的不同行为
- jQuery:暂停按钮可以暂停所有其他操作
- Raphael悬停函数没有'与其他潜水艇在一起时不起作用