แผนภูมิภายในหน้าต่างป๊อปอัปใน Javascript


10

จะแสดงแผนภูมิในหน้าต่างป๊อปอัปได้อย่างไร ฉันใช้แผ่นปลิว JS ซึ่งมีการสนับสนุนราฟาเอลปลั๊กอินhttp://dynmeth.github.com/RaphaelLayer/ เป็นไปได้ไหมที่จะสร้าง div ภายในหน้าต่างป๊อปอัพ ฉันคิดเกี่ยวกับhttp://softwarebyjosh.com/raphy-charts/

ถ้ามันเป็นไปไม่ได้กับ Leaflet ฉันเปิดให้แก้ปัญหาแผนที่ราฟาเอลเท่านั้น

ขอบคุณ

คำตอบ:


1

ฉันเดาว่ามันเป็นไปได้ ฉันเห็นตัวอย่างนี้ที่หน้าแรกของ Leaflet:

// add a marker in the given location, attach some popup content to it and open the popup
L.marker([51.5, -0.09]).addTo(map)
    .bindPopup('A pretty CSS3 popup. <br> Easily customizable.').openPopup();

ดังนั้นคุณสามารถเพิ่มมาร์กอัปเป็นเนื้อหา ดูแท็ก br ด้านบน

// add a marker in the given location, attach some popup content to it and open the popup
L.marker([51.5, -0.09]).addTo(map)
    .bindPopup('A pretty CSS3 popup. <div class="popup_custom_div"></div> Easily customizable.').openPopup();
//retrieve the div by class name take care if more then one maybe opened
var mydiv = document.getElementsByClassName( 'popup_custom_div' )[0];
mydiv.innerHTML = 'I am here';

2

คำตอบโดย @cavila เป็นเพียงส่วนหนึ่งของการแก้ปัญหา คุณสามารถใส่แท็ก div สำหรับแผนภูมิในป๊อปอัพ แต่ปัญหาเกิดขึ้นแล้วเพราะคุณจะต้องฟังเหตุการณ์ ".openPopup ()" เพื่อที่จะให้ javascript raphy-carts รัน หากคุณไม่ได้ทำในเหตุการณ์นั้นเมื่อมันดำเนินการจะไม่พบแท็ก div เพราะไม่ได้แทรกลงใน DOM ดูเหมือนว่าแผ่นพับรองรับการฟังเหตุการณ์ดังนั้นคุณจะต้องเพิ่มสิ่งนี้ในรหัสด้านบน:

map.on('popup', function(e) {
    //Run the chart code here like this
    var chart = new Charts.LineChart('chart1');
     chart.add_line({
        data: [[1, 828906, {tooltip: "my special point"}],[2, 566933],[3, 584150],[4,  
                 1072143],[5, 1622455],[6, 2466746],[7, 2427789]]
        });

     chart.draw();
});

ดังนั้น openPopup () จึงไม่ตรงกัน? เพราะล่าม Javascript จะไม่ดำเนินการคำสั่งต่อไปจนกว่าจะกลับก่อนหน้ายกเว้นการเรียกกลับที่ดำเนินการในเวลา อีกทางเลือกหนึ่งหากไม่มีเหตุการณ์ใดที่จะดำเนินการรวมกำไรสำหรับการอยู่ของ "div" นั้นในการวนรอบ window.setTimeout การเรียกกลับเหตุการณ์จะเร็วขึ้นมาก
cavila

1

วิธีหนึ่งคือการฟังเหตุการณ์การคลิกของผู้สร้างและสร้างแผนภูมิได้ทันที นี่คือตัวอย่าง: http://jsfiddle.net/6UJQ4/

สิ่งหนึ่งที่ไม่ชัดเจนสำหรับฉันจนกว่าฉันจะเริ่มเล่นรอบ ๆ นั่นคือbindPopupของLeafletสามารถใช้สตริงหรือโหนด DOM ตัวอย่างข้างต้นสร้างโหนด DOM ส่งผ่านไปยัง bindPopup จากนั้นสร้างแผนภูมิ


เป็นไปได้สำหรับเหตุการณ์รูปหลายเหลี่ยมหรือไม่ เมื่อคลิกที่รูปหลายเหลี่ยมแบบป๊อปอัพที่คล้ายกันจะปรากฏขึ้นหรือไม่
flow

ใช่ควรเป็นไปได้ ตัวอย่างของฉันคือ hardcoded เพื่อใช้ 50 เป็นค่าสำหรับแผนภูมิ แต่คุณสามารถทำอะไรก็ได้ที่คุณต้องการภายในฟังก์ชั่นที่สร้างแผนภูมิ
Derek Swingley

คุณช่วยเขียนตัวอย่างด้วยข้อมูลรูปหลายเหลี่ยมหรือ geojson บน jsfiddle แบบนี้ด้วยเครื่องหมายได้ไหม ฉันจะขอบคุณมาก
flow
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.