【发布时间】:2015-06-27 19:40:12
【问题描述】:
我有一个 SVG 地图,它有 15 种不同的形状,可以在悬停时改变不透明度。他们每个人都有自己的ID,并且都有相同的类名
<g>
<a xlink:href="property-100aoa.html"><polygon id="mmAoa100" class="mmProp" fill="#1AA6C6" points="252.5,450 245,406 244,394.5 244,392 243,381 243,374.5 242,366.5 245.5,359.5
251,347.5 275.5,339.5 278,341 286.5,338 291,349 294,348.5 303.5,367 300,368.5 304,377.5 305,387 310,385.5 311,390.5 311.5,399
314.5,397 318,402 321.5,438.5 318,440.5 311,441.5 306.5,446.5 304,449.5 304,460 285.5,460 "/></a>
</g>
当您将鼠标悬停在 SVG 形状上时,我想更改列表中匹配属性名称的背景,反之亦然(当您将鼠标悬停在列表中的属性名称上时,匹配的 SVG 形状会发生变化)。
我是 javascript/jquery 的新手,我尝试过 .addClass("hover") 并将其添加到我的 css 中,但我必须在两个方向上都这样做(将鼠标悬停在形状上与悬停在列表项上)对于所有 15 种不同的属性,产生 30 种不同的功能。必须有更好、更有效的方法来做到这一点。
我的列表项/形状对之一的脚本在这里:
$(document).ready(function(){
$("#mmAoa100").hover(function(){ //hover over shape
$("#pl100aoa").addClass("hover"); //adds class to list item
}, function(){
$('#pl100aoa').removeClass("hover"); //removes class from list item
});
$("#pl100aoa").hover(function(){ //hover over list item
$("#mmAoa100").addClass("hover"); //adds class to shape
}, function(){
$('#mmAoa100').removeClass("hover"); //removes class from shape
});
});
当我将鼠标悬停在 ID 为 mmAoa100 的形状上时,这只适用于一个方向,而不是相反。即使它确实有效,使用我目前的方法,我也需要为所有 15 对复制它。
我的 CSS 是
.mmProp {
opacity: .2;
}
.mmProp:hover {
opacity: .7;
transition-duration: 0.1s;
}
.mmProp.hover {
opacity: .7;
transition-duration: 0.1s;
}
.propertyList li.hover {
font-size: 1.1em;
background-color: #f1f1f1;
}
.propertyList li:hover {
font-size: 1.1em;
background-color: #f1f1f1;
}
我在这里将它保存为 jsfiddle:https://jsfiddle.net/r3hbchff/
请帮忙!提前致谢。
【问题讨论】:
-
为了让它更简洁,你可以扔掉 jQuery 并简单地将
:hover添加到 css 选择器的末尾。请参阅W3Schools 了解更多信息。
标签: javascript jquery svg mouseover jquery-hover