1

我正在处理以前的开发人员在导航中创建的图像地图。它将以英国地图为特色,分割成区域,以导航到网站的部分区域。以前的开发人员使用了 img 地图,但图像地图没有正确使用 css,因为图像地图是一种遗留方法。

下面是代码

<style type="text/css">

#map a {
    cursor: hand;
}

</style>

<div id="mapimage"><img src="ukmap.gif" USEMAP="#map" TYPE="image/png" TITLE="Join your local network" WIDTH=294 HEIGHT=486></div>

 <map id="map" name="map">


    <area shape="poly" id="northern" alt="Northern" title="Northern" coords="123,248,134,271,139,294,141,301,156,321,167,317,183,307,180,288,188,298,205,302,225,290,239,289,248,274,211,229,199,208,176,170,168,170,148,207,123,238" href="#" target="" />

    <area id="wales" shape="poly" alt="Wales" title="Wales" coords="100,302,92,332,110,338,111,355,64,374,88,400,133,398,154,404,164,384,161,372,144,364,145,344,154,321,143,302,103,293" href="#" target="" />

    <area id="westmidlands" shape="poly" alt="West Midlands" title="West Midlands" coords="181,368,195,360,206,351,189,326,182,305,149,321,142,358,147,369,163,376" href="#" target="" />

    <area id="eastmidlands" shape="poly" alt="East Midlands" title="East Midlands" coords="215,365,233,341,233,328,254,320,238,284,210,293,192,304,177,290,184,320,204,353,203,366" href="#" target="" />

    <area id="london" shape="poly" alt="London" title="London" coords="227,385,235,398,244,402,255,391,259,384,239,379,230,383" href="#" target="" />

    <area id="east" shape="poly" alt="East" title="East" coords="260,315,287,316,288,364,271,389,259,390,246,377,225,382,222,368,217,357,235,327" href="#" target="" />

    <area id="southwest" shape="poly" alt="South West" title="South West" coords="61,468,88,475,104,456,139,462,153,437,180,441,192,436,196,396,188,363,162,375,152,405,142,404,109,408,87,440" href="#" target="" />

    <area id="southeast" shape="poly" alt="South East" title="South East" coords="209,445,224,429,259,429,284,409,276,386,254,391,241,405,226,388,215,363,194,369,199,401,192,436" href="#" target="" />

    <area id="northernireland" shape="poly" alt="Northern Ireland" title="Northern Ireland" coords="46,270,56,267,81,244,58,215,33,203,1,237,0,252,9,268" href="#" target="" />

</map>

我们需要每个区域在悬停时改变颜色。最好使用绝对定位的 div 和 ul/li 重新编写它。或者是否可以在鼠标悬停时使用 jquery/javascript 更改 ukmap.gif?因为那时我可以拥有相同的图像,但不同区域的颜色被阻挡,并更改图像以模仿 css:悬停,我不想破坏以前人们的工作,同时如果一个简单的 jquery hack 可以选择这些,我不想浪费时间重写它

<html>
<head>
<style type="text/css">

#map a {
    cursor: hand;
}

</style>
<script src="http:////ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
</head>
<body>


    <script>
$('#mapimage').mapster(
    { 
        fillColor: 'ff0000'
    });​
</script>

<div>
    <img id="mapimage" src="images/map-complete.gif" USEMAP="#map" TYPE="image/png" TITLE="Join your local network" WIDTH=294 HEIGHT=486></div>

 <map id="map" name="map">


    <area shape="poly" id="northern" alt="Northern" title="Northern" coords="123,248,134,271,139,294,141,301,156,321,167,317,183,307,180,288,188,298,205,302,225,290,239,289,248,274,211,229,199,208,176,170,168,170,148,207,123,238" href="#" target="" />

    <area id="wales" shape="poly" alt="Wales" title="Wales" coords="100,302,92,332,110,338,111,355,64,374,88,400,133,398,154,404,164,384,161,372,144,364,145,344,154,321,143,302,103,293" href="#" target="" />

    <area id="westmidlands" shape="poly" alt="West Midlands" title="West Midlands" coords="181,368,195,360,206,351,189,326,182,305,149,321,142,358,147,369,163,376" href="#" target="" />

    <area id="eastmidlands" shape="poly" alt="East Midlands" title="East Midlands" coords="215,365,233,341,233,328,254,320,238,284,210,293,192,304,177,290,184,320,204,353,203,366" href="#" target="" />

    <area id="london" shape="poly" alt="London" title="London" coords="227,385,235,398,244,402,255,391,259,384,239,379,230,383" href="#" target="" />

    <area id="east" shape="poly" alt="East" title="East" coords="260,315,287,316,288,364,271,389,259,390,246,377,225,382,222,368,217,357,235,327" href="#" target="" />

    <area id="southwest" shape="poly" alt="South West" title="South West" coords="61,468,88,475,104,456,139,462,153,437,180,441,192,436,196,396,188,363,162,375,152,405,142,404,109,408,87,440" href="#" target="" />

    <area id="southeast" shape="poly" alt="South East" title="South East" coords="209,445,224,429,259,429,284,409,276,386,254,391,241,405,226,388,215,363,194,369,199,401,192,436" href="#" target="" />

    <area id="northernireland" shape="poly" alt="Northern Ireland" title="Northern Ireland" coords="46,270,56,267,81,244,58,215,33,203,1,237,0,252,9,268" href="#" target="" />

</map>
​

​</p>

4

4 回答 4

6

“图像映射是一种传统方法”——不正确。HTML 5 规范完全支持 HTML 图像映射。

CSS 根本不适用于图像映射。

试试ImageMapster,一个专门为此目的设计的 jquery 插件。

这是一个基本用法(与其他答案相同的问题 - 区域不匹配,我无法轻松找到英国的准确图像地图,并且没有您的区域匹配的源图像)。但你明白了。

http://jsfiddle.net/VcGXL/

// basic implementation of hotspots with ImageMapster

$('#mapimage').mapster(
{ 
    fillColor: 'ff0000'
});
于 2012-08-24T13:33:38.350 回答
5

如果您不想重新启动一切,您可以执行以下操作:将悬停代码添加到每个区域,并更改图像的来源。

$('#southeast').hover(
        function() {
            $('#mapimage img').attr('src', 'http://www.groupswelcome.co.uk/maps/uk_map.gif');
        },
        function() {
            $('#mapimage img').attr('src', 'http://www.alert24uk.com/ESW/Images/uk-map.gif');
        }
    );

这是这个方法的一个小技巧(在右下角向东南翻转)......图像当然与映射不对应。

通过这样做,您将看到一个临时的空白图像......直到图像加载。

有一些方法可以防止这种情况,比如使用 spritesheet。如果有兴趣,我可以为你做一个例子。

这是一个简单的方法。还有其他选择。如果您的网站适用于最近的浏览器,则为 HTML5 画布。

于 2012-08-24T13:22:58.837 回答
1

事实上 area in none 的默认显示,因此您必须首先将其设置为display:block,因此使用此 CSS 规则来更改地图区域上的光标:

area{
    display:block;
    cursor:hand;
}
于 2013-02-06T09:23:33.277 回答
0

很抱歉在游戏后期跳到这个问题,但我有不规则(非矩形)形状的答案。我使用 SVG 解决了它,以生成我想要附加事件的位置的掩码。

这个想法是将事件附加到内联 SVG,超级便宜,甚至用户友好,因为有很多程序可以生成 SVG。SVG 可以有一层图像作为背景。

http://jcrogel.com/code/2015/03/18/mapping-images-using-javascript-events/

于 2015-03-20T03:03:07.850 回答