Morris圖表如何重新加載數據(重繪)


Morris加載數據

<div id="morris-donut-example" style="height: 245px;" class="morris-chart morris-donut-example" data-replace="data-value"></div>
<!-- jQuery -->
<script src="assets/js/jquery.min.js"></script>
<!-- Morris Chart -->
<script src="assets/plugins/morris/morris.min.js"></script>
<script src="assets/plugins/raphael/raphael-min.js"></script>
<script type="text/javascript">
    var value = $("#morris-donut-example").attr("data-value");
    var $donutData = JSON.parse(value);
    Morris.Donut({
        element: 'morris-donut-example',
        data: $donutData,
        resize: true,
        colors: ['#ff8acc', '#5b69bc', "#35b8e0", "#db7256", "#10c469"]
    });
</script>

morris重新加載數據,再次調用Morris.Donut()方法,會是怎樣的效果?如下:

https://img-blog.csdnimg.cn/20190505224449693.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Nvbmd6ZWhhbw==,size_16,color_FFFFFF,t_70

可以看出來,圖表又被加載了一次,頁面已經亂的不成樣子。跟DataTables重新加載數據一樣,試着去網上找找官方的API去銷毀或重繪圖表,結果morris的github網址也打不開,只找到一個關於morris重繪的帖子,但是比較有年頭,也沒有任何有效的解決方案。

怎么辦?自己試着搞, 瀏覽器F12查看html代碼,看到這些圖表都是使用svg繪制的,那能否在每次重繪之前,將div#morris-donut-example里的元素都清空,或者把所有svg都remove掉呢?實踐證明是可以的。

Morris重新加載數據

// 因找不到morris的重繪或銷毀api,手動重繪
$("#morris-donut-example").empty();
$("#morris-donut-example svg").remove();
Morris.Donut({
    element: 'morris-donut-example',
    data: $newDonutData,
    resize: true,
    colors: ['#ff8acc', '#5b69bc', "#35b8e0", "#db7256", "#10c469"]
});

附上Morris三種圖表的示例代碼:

  • 餅狀圖
//creating donut chart餅狀圖
var element = "morris-donut-example"; // div的id
var $donutData = [
    {label: "Download Sales", value: 12},
    {label: "In-Store Sales", value: 30},
    {label: "Mail-Order Sales", value: 20}
];
var colors = ['#ff8acc', '#5b69bc', "#35b8e0"];
Morris.Donut({
    element: element,
    data: $donutData,
    resize: true, //defaulted to true
    colors: colors
});
  • 條形圖 
//creating bar chart條形圖
var element = "morris-bar-example"; // div的id
var $barData  = [
    { y: '2010', a: 75 },
    { y: '2011', a: 42 },
    { y: '2012', a: 75 },
    { y: '2013', a: 38 },
    { y: '2014', a: 19 },
    { y: '2015', a: 93 }
];
var lineColors = ['#188ae2'];
var xkey = "y";
var ykeys = ['a'];
var labels = ['Statistics'];
Morris.Bar({
    element: element,
    data: $barData,
    xkey: xkey,
    ykeys: ykeys,
    labels: labels,
    hideHover: 'auto',
    resize: true, //defaulted to true
    gridLineColor: '#eeeeee',
    barSizeRatio: 0.2,
    barColors: lineColors
});
  • 折線圖
//create line chart折線圖
var element = "morris-line-example";
var $lineData  = [
    { y: '2008', a: 50, b: 0 },
    { y: '2009', a: 75, b: 50 },
    { y: '2010', a: 30, b: 80 },
    { y: '2011', a: 50, b: 50 },
    { y: '2012', a: 75, b: 10 },
    { y: '2013', a: 50, b: 40 },
    { y: '2014', a: 75, b: 50 },
    { y: '2015', a: 100, b: 70 }
];
var xkey = "y";
var ykeys = ['a','b'];
var labels = ['長租','短租'];
var opacity = ['0.9'];
var Pfillcolor = ['#ffffff'];
var Pstockcolor = ['#999999'];
var lineColors = ['#10c469','#188ae2'];
Morris.Line({
    element: element,
    data: $lineData,
    xkey: xkey,
    ykeys: ykeys,
    labels: labels,
    fillOpacity: opacity,
    pointFillColors: Pfillcolor,
    pointStrokeColors: Pstockcolor,
    behaveLikeLine: true,
    gridLineColor: '#eef0f2',
    hideHover: 'auto',
    resize: true, //defaulted to true
    pointSize: 0,
    lineColors: lineColors
});

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM