विंडो पर Google चार्ट redraw / scale आकार बदलता है


83

मैं विंडो आकार बदलने पर एक Google linechart को कैसे पुनः तैयार / पुनर्विक्रय करूं?


35
यह वास्तव में विज़ुअलाइज़ेशन एपीआई की एक विशेषता में निर्मित होना चाहिए!
मिकिएल कॉर्निल

जवाबों:


69

जब विंडो आकार पूरा होता है और कई ट्रिगर से बचने के लिए, मुझे लगता है कि एक घटना बनाना बेहतर है:

//create trigger to resizeEnd event     
$(window).resize(function() {
    if(this.resizeTO) clearTimeout(this.resizeTO);
    this.resizeTO = setTimeout(function() {
        $(this).trigger('resizeEnd');
    }, 500);
});

//redraw graph when window resize is completed  
$(window).on('resizeEnd', function() {
    drawChart(data);
});

40

Google द्वारा मूल कोड अंत में बस यही करता है:

var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
chart.draw(data, options);

खिड़की के आकार बदलने पर आप इसे थोड़ी सी जावास्क्रिप्ट के साथ बदल सकते हैं:

function resize () {
    var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
    chart.draw(data, options);
}

window.onload = resize;
window.onresize = resize;

25
यह ध्यान देने योग्य बात हो सकती है कि जब आप ajax पर "डेटा" लाते हैं, तो हर विंडो पर एक XHTTPRequest को ट्रिगर करना 'चरण' का आकार आपके सर्वर पर थोड़ा तनावपूर्ण हो सकता है, मुझे लगता है कि किसी भी तरह से ajax अनुरोध के परिणामों को कैश करना बेहतर होगा उस डेटा का पुन: उपयोग करें, लेकिन आपका समाधान मेरे लिए काम करता है! +1
मिकिएल कॉर्निल

1
मेरे लिए काम नहीं कर रहा था, फिर से ड्राइंग से पहले div से पुराने rezults को हटाने की जरूरत थी: $ ('# चार्ट_दिव')। खाली ();
मंटास डी

3
window.onload = resize();के बराबर हैresize(); window.onload = undefined;
Gustavo Rodrigues

जब आप विंडो को बड़ा करते हैं तो यह उसका वर्णन करने के रूप में काम करता है, लेकिन यदि आप विंडो को सिकोड़ते हैं, तो आपको चार्ट डिव को पहले खाली करना होगा, जैसा कि मंत्रों ने बताया है। $ ( '# chart_div') खाली ()।; इससे ब्राउज़र को चार्ट को फिर से तैयार करने से पहले, डिव को सिकोड़ने की अनुमति मिलेगी।
विंसेंट

मुझे यह समाधान पसंद है। मुझे क्लाइंट पक्ष पर टाइमर या पुनरावर्ती फ़ंक्शन पसंद नहीं हैं, लगातार सीपीयू पावर का उपयोग क्यों करें?
रॉबर्टो

8

चूंकि window.resizeघटना प्रत्येक आकार की घटना पर कई बार आग लगाती है, मेरा मानना ​​है कि सबसे अच्छा समाधान स्मार्टरेज़ का उपयोग करना है smartdraw()जेएस और उपयोग । यह चार्ट redraw's प्रति की संख्या को सीमित करता है window.resize

दिए गए js का उपयोग करके आप इसे केवल इस प्रकार कर सकते हैं:

// Instantiate and draw our user charts, passing in some options (as you probably were doing it)
var chart = new google.visualization.LineChart(document.getElementById('div_chart'));
chart.draw(data, options);

// And then:
$(window).smartresize(function () {
    chart.draw(data, options);
});

misspell "otions" -> "विकल्प"
टॉमाज़ मजर्सकी

4

यह सबसे सरल तरीका है जिससे मैं ब्राउज़र को बहुत अधिक तनाव पैदा किए बिना इसे करने से बाहर काम कर सकता हूं:

    var chart1 = "done";

$(window).resize(function() {
if(chart1=="done"){
chart1 = "waiting";
setTimeout(function(){drawChart();chart1 = "done"},1000);
}
});

चार्ट के पुनः लोड होने से पहले यह 1 सेकंड प्रतीक्षा करता है और इस प्रतीक्षा अवधि में फ़ंक्शन को फिर से कॉल नहीं करने देता है। जैसा कि विंडो के आकार बदलने वाले फ़ंक्शंस को कई बार कहा जाता है, जब भी आप विंडो का आकार बदलते हैं, तो यह फ़ंक्शन को वास्तव में केवल एक बार काम करने में मदद करता है, जब आप विंडो का आकार बदलते हैं, तो शेष कॉल, यदि कथन द्वारा रोक दी जाती हैं

आशा है कि ये आपकी मदद करेगा


अपनी सादगी के लिए बहुत बढ़िया।
मस्ताबा

3

Google चार्ट्स को उत्तरदायी बनाने के लिए Google विज़ुअलाइज़ेशन API में कोई विकल्प नहीं है।

लेकिन हम विंडो चार्ट के रूप में Google चार्ट को उत्तरदायी बना सकते हैं । Google चार्ट को उत्तरदायी बनाने के लिए GITHub पर jQuery लाइब्रेरी उपलब्ध है - MIT लाइसेंस के तहत लाइसेंस प्राप्त jquery-smartresize , जिसमें विंडो आकार परिवर्तन पर ग्राफ़ का आकार बदलने की क्षमता है।

GitHub की इस परियोजना की दो स्क्रिप्ट फाइलें हैं: -

jquery.debouncedresize.js: adds a special event that fires once after the window
has been resized.

और

jquery.throttledresize.js: adds a special event that fires at a reduced rate (no 
more double events from Chrome and Safari).

यहां उत्तरदायी चार्ट के दो उदाहरण दिए गए हैं ...

  1. उत्तरदायी Google पाई चार्ट
  2. उत्तरदायी Google बार चार्ट

हम चार्ट के वांछित पहलू अनुपात से मिलान करने के लिए visualization_wrap के निचले पैडिंग को बदल सकते हैं।

Calculate as Height / Width x 100
For a 16x9 display it would be 9/16 = 0.5625 x 100 = 56.25%
For a square it'd be 100%

हम यह सुनिश्चित करने के लिए Google चार्ट के चार्टरीया विकल्प को अनुकूलित कर सकते हैं कि लेबल आकार बदलने पर कट न जाएं


2

Redraw / विंडो पर एक Google linechart का आकार बदलें

$(document).ready(function () {
    $(window).resize(function(){
        drawChart();
    });
});

यह वास्तव में अक्षम है, क्योंकि आपको चार्ट (डेटा, विकल्प) को चार्ट करना है। फिर। यह सभी जानकारी प्राप्त करेगा और दोहराव और अनावश्यक काम करेगा।
फॉनसिनी

कैसे redraw उदाहरण पर क्लिक करने के लिए मजबूर करने के लिए हम आकार परिवर्तन कॉल करने के लिए मजबूर करते हैं।
MaXi32

1

मैं व्यक्तिगत रूप से निम्नलिखित दृष्टिकोण को पसंद करता हूं, अगर आप addEventListener का उपयोग करके रह सकते हैं, और IE <9 के लिए समर्थन की कमी नहीं है।

var windowResizeTimer;
window.addEventListener('resize', function(e){
    clearTimeout(windowResizeTimer);
    windowResizeTimer = setTimeout(function(){
        chart.draw(data, options);
    }, 750);
});

नोट setTimeout()और clearTimeout()750 मिली सेकेंड की देरी और कार्यों के उपयोग पर ध्यान दें , जिससे यह बहुत कम सघन हो जाता है जब कई त्वरित घटनाओं में त्वरित आग लग जाती है (जो कि माउस का उपयोग करते समय डेस्कटॉप पर ब्राउज़रों के लिए अक्सर होता है)।


0

मैं दिनों तक एक ही चीज पर अटका रहा और मुझे पता चला कि एक घटना को जोड़ना सबसे अच्छा काम करता है।

window.addEventListener("resize", drawChart);

अपने फ़ंक्शन को घोषित करने के बाद बस इस पंक्ति को जोड़ें और यह ठीक काम करेगा।

अपने फ़ंक्शन के नाम के साथ drawChart बदलें।


-1

टियागो कास्त्रो के जवाब का उपयोग करते हुए , मैंने प्रदर्शन को दिखाने के लिए एक लाइन चार्ट लागू किया है।

google.load('visualization', '1', {
  packages: ['corechart', 'line']
});
google.setOnLoadCallback(drawBackgroundColor);

function drawBackgroundColor() {
  var data = new google.visualization.DataTable();
  data.addColumn('number', 'X');
  data.addColumn('number', 'Compute Time');
  data.addColumn('number', 'Compute Times');
  console.log("--");
  data.addRows([
    [0, 0, 0],
    [10, 10, 15],
    [20, 20, 65]
  ]);
  console.log(data);
  var options = {
    height: 350,
    legend: {
      position: 'bottom'
    },
    hAxis: {
      title: 'Nb Curves'
    },
    vAxis: {
      title: 'Time (ms)'
    },
    backgroundColor: '#f1f8e9'
  };

  function resize() {
    var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
    chart.draw(data, options);
  }
  window.onload = resize();
  window.onresize = resize;

}
<script src='https://www.google.com/jsapi'></script>
<div id="chart_div">

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.