javascript - jquery svg 路径:单击路径 B 检查路径 A 当前是否处于活动状态,如果是,则停用 A 并激活 B
问题描述
首先,感谢您的关注。我有这个 SVG(国家地图),我希望用户单击该地图的一个区域,以便弹出一个包含该区域信息的 div,并且该区域(SVG)获得新颜色(“活动”)。如果用户再次单击该区域,它将获得以前的状态并且 div 将隐藏。到目前为止,一切都很好。
问题是,如果一个区域当前处于“活动”状态(例如区域 A)并且用户单击另一个区域(例如区域 B),则两个区域都将处于活动状态,我希望区域 A 停用。
到目前为止,这是我的代码:
$(function (){
$('.distrito').on('click', function(){
if ( $(this).hasClass( 'distrito' ) ) {
$(this).removeClass('distrito').addClass('distritoIsActive');
} else {
$(this).removeClass('distritoIsActive').addClass('distrito');
}
/*this will get corresponding div to showup*/
$('#legenda' + this.id).toggle(1000);
});
});
我想我应该循环搜索 distritoIsActive 类的路径,我做了并创建了一个包含所有区域的数组:
let $svgObject = document.getElementById('Layer_1');
let $myDistrictos = Array.from($svgObject.querySelectorAll("path"));
但我无法遍历数组,因此应用程序将知道是否有 distritoIsActive 类并将其传递给我的函数。有人能帮助我吗?提前致谢
您可以在此处找到示例代码:http: //mapa.e-forma.pt/
解决方案
我在你的代码中添加了一个简单的检查来得到你想要的。看看下面(只是js部分)
let $svgObject = document.getElementById('Layer_1');
let $myDistrictos = Array.from($svgObject.querySelectorAll("path"));
let previous = null;
/*let $redClassIsActive = false;*/
console.log($myDistrictos);
$(function (){
$('.distrito').on('click', function(){
if(previous === null)
{
$(this).removeClass('distrito').addClass('distritoIsActive');
$('#legenda' + this.id).toggle(1000);
previous = this;
return;
}
if(previous !== null && previous.id === this.id)
{
previous = null;
$(this).removeClass('distritoIsActive').addClass('distrito');
$('#legenda' + this.id).toggle(1000);
}
else
{
$(previous).removeClass('distritoIsActive').addClass('distrito');
$('#legenda' + previous.id).toggle(1000);
$(this).removeClass('distrito').addClass('distritoIsActive');
$('#legenda' + this.id).toggle(1000);
previous = this;
}
});
});
快乐编码
推荐阅读
- javascript - 如何调用 Sequelize MySQL JSON 查询?
- c# - 字符串未被识别为有效的时间跨度。C# 和 SQL 服务器
- java - 无法在 AEM 新页面上拖放组件
- google-cloud-platform - 有没有一种快速的方法可以一次删除 VPC 及其所有依赖项?
- django - Django Api 只读字段
- scala - 在类型函数中使用匹配类型时证明类型相等的问题
- html - 为什么我不能只更改最后一个 h3 的字体大小
- huawei-mobile-services - 我已经成功集成了HUAWEI Location Kit。但现在得到错误权限被拒绝
- python - 在 15*8-2**x=x 中求解 x 的公式求解器未完成计算
- airflow - 使用 .net 控制台批处理应用程序进行气流编排