javascript - 在拉斐尔 map 上触发鼠标悬停事件

标签 javascript jquery css raphael

我是第一次使用 Raphael 插件,到目前为止,我成功地创建了一张德国 map 并勾勒出内部所有不同区域的轮廓。我发现了如何绑定(bind)鼠标悬停效果,所以当我将鼠标悬停在某个区域上时,它的颜色会发生变化。一切看起来都很好,直到我想从 map 外部触发相同的鼠标悬停效果。有一个指向所有区域的链接列表,每个链接应该在悬停时在 map 上为其各自的地理位置(路径)着色。问题是我不知道如何从外部触发鼠标悬停效果。

这是我用于代码的引用指南:Clickable France regions map

这是我的 map 初始化:

var regions = [];

var style = {
    fill: "#f2f2f2",
    stroke: "#aaaaaa",
    "stroke-width": 1,
    "stroke-linejoin": "round",
    cursor: "pointer",
    class: "svgclass"
};

var animationSpeed = 500;

var hoverStyle = {
    fill: "#dddddd"
}

var map = Raphael("svggroup", "100%", "auto");
map.setViewBox(0, 0, 585.5141, 792.66785, true);

// declaration of all regions (states)
....
var bayern = map.path("M266.49486,..,483.2201999999994Z");
bayern.attr(style).data({ 'href': '/bayern', 'id': 'bayern', 'name': 'Bayern' }).node.setAttribute('data-id', 'bayern');
regions.push(bayern);

这是我的“正常”鼠标效果发生的地方:

for (var regionName in regions) {
    (function (region) {
        region[0].addEventListener("mouseover", function () {
            if (region.data('href')) {
                region.animate(hoverStyle, animationSpeed);
            }
        }, true);

        region[0].addEventListener("mouseout", function () {
            if (region.data('href')) {
                region.animate(style, animationSpeed);
            }
        }, true);

        region[0].addEventListener("click", function () {
            var url = region.data('href');

            if (url){
                location.href = url;
            }
        }, true);
    })(regions[regionName]);
}

我有一个带有链接的菜单,我想将每个链接绑定(bind)到各自的区域,这样我也可以应用动画。

$("ul.menu__navigation li a").on("mouseenter", function (e) {
    // this function displays my pop-ups
    showLandName($(this).data("id"));
    // $(this).data("id") returns the correct ID of the region
});

如果有任何想法,我将不胜感激!提前致谢!

最佳答案

我想出了一个办法。它肯定不是最佳的,尤其是在性能方面,但至少它给了我想要的输出。我仍然重视更好的答案,但截至目前,鼠标悬停事件中的一个新循环完成了这项工作。

$("ul.menu__navigation li a").on("mouseenter", function (e) {
    // this function displays my pop-ups
    showLandName($(this).data("id"));

    // animate only the one hovered on the link list
    var test = '/' + $(this).data("id");

    for (var regionName in regions) {
        (function (region) {
            if (region.data('href') === test) {
                region.animate(hoverStyle, animationSpeed);
            }        
        })(regions[regionName]);
    }
});

关于javascript - 在拉斐尔 map 上触发鼠标悬停事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46345093/

相关文章:

javascript - 如何使用 for 循环掷多个骰子?

javascript - 防止页面滚动

ios - 背景图片缩放 iOS

css - 列表/选择需要与现有输入/文本区域相同的 CSS

javascript - 如何以 Angular 设置匿名子范围设置

javascript - 使用 JavaScript 或 Dart 确定浏览器的默认文本突出显示颜色

javascript - 防止通过 file_get_contents 执行 javascript

javascript - 使页面上的所有图像都可拖动到特殊的上传字段

javascript - 媒体源 api 源缓冲区追加不起作用

html - 如何使文本在 HTML 页面中垂直和水平居中