การใช้ขอบเขตที่กำหนดเองกับ JQVmap

ฉันใช้ JQVmap (https://github.com/manifestinteractive/jqvmap) เพื่อส่งออกแผนที่บน เว็บไซต์. แทนที่จะทำอะไรบางอย่างเมื่อคุณเลื่อนเมาส์ไปวางในแต่ละประเทศ ฉันต้องการให้จัดกลุ่มพวกเขาตามภูมิภาค ตัวอย่างเช่น แทนที่จะเป็นแคนาดา สหรัฐอเมริกา และเม็กซิโก ฉันต้องการให้ทั้งสามรายการแสดงสถานะโฮเวอร์เมื่อคุณวางเมาส์เหนือรายการใดรายการหนึ่งและจัดกลุ่มประเทศ ฉันเคยเห็นโพสต์หลายโพสต์เกี่ยวกับวิธีใส่สีชุดของประเทศต่างๆ แต่แต่ละประเทศยังคงมีสถานะโฮเวอร์ของตัวเองและจะไม่ทริกเกอร์สถานะโฮเวอร์ของประเทศอื่นๆ ที่มีสีเดียวกัน มีความคิดอะไรบ้าง?


person Andrew    schedule 31.01.2014    source แหล่งที่มา


คำตอบ (1)


ฉันกำลังทำงานในโครงการและจำเป็นต้องทำเช่นนี้ นี่คือวิธีที่ฉันทำ

  1. กำหนดภูมิภาคที่คุณต้องการ
  2. เพิ่มวิธีการช่วยเหลือเพื่อเน้น/ไม่เน้นประเทศของทุกประเทศในภูมิภาค
  3. เพิ่มวิธีการช่วยเหลือเหล่านี้เป็นวิธีการ "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
comment
เฮ้ @Arnav สิ่งนี้มีประโยชน์มาก! ฉันมีคำถามอื่นที่บางทีคุณอาจแก้ไขได้และนั่นก็คือการเลือก / ยกเลิกการเลือกภูมิภาค stackoverflow.com/questions/37922298/ หากคุณมีเวลาช่วยดูให้ฉันหน่อยได้ไหม ขอบคุณ! - person Austin; 20.06.2016
comment
สวัสดี @Arna คุณจะรู้ไหมว่าทำไมประเทศแคริบเบียนส่วนใหญ่ส่งกลับ cc = ds, path = undef เมื่อพยายามตั้งค่าความทึบ ดูเหมือนว่าเส้นทางจะตั้งชื่ออย่างถูกต้องและมีค่าที่ตั้งค่าไว้ในข้อมูลสำหรับประเทศเหล่านี้ แต่ยังคงมีข้อผิดพลาด: ไม่สามารถอ่านคุณสมบัติ 'setOpacity' ของไม่ได้กำหนด - person Aaron Lavers; 11.11.2016
comment
@ aaron-lavers เพิ่งพบปัญหาเดียวกัน มีความคิดอะไรบ้าง? - person JMP; 02.07.2019
comment
@JMP ฉันกลัวที่จะบอกว่าฉันไม่สามารถหาวิธีแก้ปัญหาได้ ขออภัย เราใช้งานปลั๊กอินมาระยะหนึ่งแล้ว (โดยมีข้อผิดพลาดนั้น) บนไซต์ แต่ถูกแทนที่ด้วยการออกแบบอื่นในอีกไม่กี่เดือนต่อมา - person Aaron Lavers; 03.07.2019