ฉันใช้ JQVmap (https://github.com/manifestinteractive/jqvmap) เพื่อส่งออกแผนที่บน เว็บไซต์. แทนที่จะทำอะไรบางอย่างเมื่อคุณเลื่อนเมาส์ไปวางในแต่ละประเทศ ฉันต้องการให้จัดกลุ่มพวกเขาตามภูมิภาค ตัวอย่างเช่น แทนที่จะเป็นแคนาดา สหรัฐอเมริกา และเม็กซิโก ฉันต้องการให้ทั้งสามรายการแสดงสถานะโฮเวอร์เมื่อคุณวางเมาส์เหนือรายการใดรายการหนึ่งและจัดกลุ่มประเทศ ฉันเคยเห็นโพสต์หลายโพสต์เกี่ยวกับวิธีใส่สีชุดของประเทศต่างๆ แต่แต่ละประเทศยังคงมีสถานะโฮเวอร์ของตัวเองและจะไม่ทริกเกอร์สถานะโฮเวอร์ของประเทศอื่นๆ ที่มีสีเดียวกัน มีความคิดอะไรบ้าง?
การใช้ขอบเขตที่กำหนดเองกับ JQVmap
คำตอบ (1)
ฉันกำลังทำงานในโครงการและจำเป็นต้องทำเช่นนี้ นี่คือวิธีที่ฉันทำ
- กำหนดภูมิภาคที่คุณต้องการ
- เพิ่มวิธีการช่วยเหลือเพื่อเน้น/ไม่เน้นประเทศของทุกประเทศในภูมิภาค
- เพิ่มวิธีการช่วยเหลือเหล่านี้เป็นวิธีการ "onRegionOver" และ "onRegionOut" ของแผนที่
ขั้นตอนที่ 1.
นี่คือวิธีที่ฉันกำหนดภูมิภาค
var regionMap = {
"southAmerica" :{
"countries" : ["ar", "bo", "br", "cl", "co", "ec", "fk", "gy", "gf", "pe", "py", "sr", "uy", "ve"],
"name" : "South America"
},
"northAmerica" :{
"countries" : ["ca", "gl", "us"],
"name" : "Northern America"
}
}; //And so on...
ฉันยังเพิ่มแผนที่และวิธีการค้นหาแบบย้อนกลับด้วย
var countryMap = {
"ca":"northAmerica",
"gl":"northAmerica",
"us":"northAmerica",
}; //And so on...
function getRegion(cc) {
var regionCode = countryMap[cc];
return regionMap[regionCode];
}
หรือคุณสามารถหลีกเลี่ยงการแมปการค้นหาแบบย้อนกลับและเขียนฟังก์ชันแทนได้:
function getCountriesInRegion(cc) {
for (var regionKey in regions)
{
var countries = regionMap[regionKey].countries;
for (var countryIndex in countries)
{
if (cc == countries[countryIndex])
{
return countries;
}
}
}
}
ขั้นตอนที่ 2
วิธีการช่วยเหลือสำหรับการเน้น/ไม่เน้นบริเวณ:
function highlightRegionOfCountry (cc) {
var countries = getRegion(cc).countries;
for (countryIndex in countries)
{
$('#vmap').vectorMap('highlight',countries[countryIndex]);
}
$('#vmap').vectorMap('highlight',cc);
}
function unhighlightRegionOfCountry (cc) {
var countries = getRegion(cc).countries;
for (countryIndex in countries)
{
$('#vmap').vectorMap('unhighlight',countries[countryIndex]);
}
$('#vmap').vectorMap('unhighlight',cc);
}
ขั้นตอนที่ 3
การเพิ่มการลงทะเบียนวิธีการช่วยเหลือให้กับเหตุการณ์การโฮเวอร์ของแผนที่
jQuery(document).ready(function() {
jQuery('#vmap').vectorMap({
map: 'world_en',
backgroundColor: '#333333',
color: '#ffffff',
hoverOpacity: 0.2,
selectedColor: '#666666',
enableZoom: true,
showTooltip: true,
onRegionOver : function (element, code, region)
{
highlightRegionOfCountry(code);
},
onRegionOut : function (element, code, region)
{
unhighlightRegionOfCountry(code);
}
});
});
tl; dr: ใช้สิ่งเหล่านี้:
$('#vmap').vectorMap('highlight', countryCode);
และ
$('#vmap').vectorMap('unhighlight', countryCode);
ภูมิภาคที่ฉันต้องการสำหรับโครงการคือภูมิภาคที่กำหนดโดยสหประชาชาติ คุณสามารถดูทางแยกของ JVQmap ของฉันได้ที่ GitHub ไฟล์ที่คุณต้องการดูคือ /jqvmap/maps/jquery .vmap.un_regions.js
ฉันหวังว่านี่จะช่วยได้!
person
Arnav
schedule
17.02.2014
เฮ้ @Arnav สิ่งนี้มีประโยชน์มาก! ฉันมีคำถามอื่นที่บางทีคุณอาจแก้ไขได้และนั่นก็คือการเลือก / ยกเลิกการเลือกภูมิภาค stackoverflow.com/questions/37922298/ หากคุณมีเวลาช่วยดูให้ฉันหน่อยได้ไหม ขอบคุณ!
- person Austin; 20.06.2016
สวัสดี @Arna คุณจะรู้ไหมว่าทำไมประเทศแคริบเบียนส่วนใหญ่ส่งกลับ cc = ds, path = undef เมื่อพยายามตั้งค่าความทึบ ดูเหมือนว่าเส้นทางจะตั้งชื่ออย่างถูกต้องและมีค่าที่ตั้งค่าไว้ในข้อมูลสำหรับประเทศเหล่านี้ แต่ยังคงมีข้อผิดพลาด: ไม่สามารถอ่านคุณสมบัติ 'setOpacity' ของไม่ได้กำหนด
- person Aaron Lavers; 11.11.2016
@ aaron-lavers เพิ่งพบปัญหาเดียวกัน มีความคิดอะไรบ้าง?
- person JMP; 02.07.2019
@JMP ฉันกลัวที่จะบอกว่าฉันไม่สามารถหาวิธีแก้ปัญหาได้ ขออภัย เราใช้งานปลั๊กอินมาระยะหนึ่งแล้ว (โดยมีข้อผิดพลาดนั้น) บนไซต์ แต่ถูกแทนที่ด้วยการออกแบบอื่นในอีกไม่กี่เดือนต่อมา
- person Aaron Lavers; 03.07.2019