【发布时间】:2019-07-14 09:10:58
【问题描述】:
我有一个带有一些交互点的地图 SVG。悬停该点会显示位于该点附近的 HTML div。
所以我在 SVG 中使用 jQuery .offset()。它在 Chrome 和 Firefox 中运行良好,但在 Safari 中似乎不起作用。它总是回来
{top: 0, left: 0}
HTML/SVG
<svg xmlns="http://www.w3.org/2000/svg" width="1211" height="1198">
(...)
<g data-city="amsterdam">
<path/>
</g>
<g data-city="london">
<path/>
</g>
<g data-city="paris">
<path/>
</g>
(...)
</svg>
jQuery
// -- Open infosbox --
$('[data-city]').on('touchstart mouseover', function(){
var city = $(this).attr('data-city');
var cityEl = $('.city--'+city);
var offset = setOffsetPosition($(this), cityEl);
$('.city').removeClass('active');
cityEl.offset(offset).addClass('active');
});
// -- Close infosbox --
$('[data-city]').on('mouseleave', function(){
$('.city').removeClass('active');
});
function setOffsetPosition($this, $el) {
var offset = $this.offset();
var elW = $el.width();
var elH = $el.height();
var marginB = 20;
offset.top = offset.top - (elH + marginB);
offset.left = offset.left - (elW/2);
return offset;
}
完整代码
这是我的codepen查看完整代码,欢迎任何帮助
【问题讨论】:
-
谢谢@Pete!我刚刚更新了我的帖子。希望这样会更好