【问题标题】:Showing HighCharts in A JQuery Mobile application在 JQuery Mobile 应用程序中显示 HighCharts
【发布时间】:2013-02-27 13:48:05
【问题描述】:

我有以下一段 JQuery Mobile 应用程序主页的代码。它基本上是一个简单的主页,带有一个按钮,该按钮重定向到另一个页面('chart 1'),该页面在页脚中包含 2 个标签栏:一个用于自身('chart1'),另一个用于另一个页面('chart2')。当这些页面被加载时,我想在这两个页面的内容部分添加一些来自 HighCharts 库的图表。我尝试了几种方法(live、bind 等),但似乎没有任何效果。显示图表的唯一方法是使用 ready 方法(见下文)。我的问题是:是否有一种方法可以在单击按钮时在页面的特定区域显示图表?

图表加载方法:

$(document).ready(function() {
var chart = new Highcharts.Chart({
    chart: {
        renderTo: 'containerYear',
        type: 'column',
        margin: [ 50, 50, 100, 80]
    },...and so on
});

主页代码:

 <div data-role="page" data-theme="b" id="main-page">
    <div data-role="header" data-position="fixed">
        <h1>Data</h1>
    </div>
    <div data-role="content">
        <ul data-role="listview" data-inset="true">
            <li data-role="list-divider">Data</li>
            <li><a href="#chart1" id="btn1" data-transition="slide">Graphs</a></li>
        </ul>
    </div>
    <div data-role="footer" data-position="fixed">
        <h4>CTK</h4>
    </div>
</div>

 <div data-role="page" data-theme="b" id="chart1">
    <div data-role="header" data-position="fixed">
       <a href="#main-page" data-icon="arrow-l" data-iconpos="left" data-transition="slide" data-direction="reverse">Back</a>
        <h1>Car Crashes</h1>
    </div>
    <div data-role="content">
        <div id="containerYear"></div>
    </div>
    <div data-role="footer" data-position="fixed">
        <div data-role="navbar">
            <ul>
                <li><a href="#chart1" data-role="tab" class="ui-btn-active">Chart 1</a></li>
                <li><a href="#chart2" data-role="tab" >Chart 2</a></li>
            </ul>
        </div>
    </div>

</div>


<div data-role="page" data-theme="b" id="chart2">
     <div data-role="header" data-position="fixed">
        <a href="#main-page" data-icon="arrow-l" data-iconpos="left" data-transition="slide" data-direction="reverse">Back</a>
        <h1>Car Crashes</h1>
     </div>
     <div data-role="content">
         <div id="containerMonth"></div>
     </div>
     <div data-role="footer" data-position="fixed">
        <div data-role="navbar">
            <ul>
                <li><a href="#chart1" data-role="tab">Chart 1</a></li>
                <li><a href="#chart2" data-role="tab" class="ui-btn-active">Chart 2</a></li>
            </ul>
        </div>
     </div>
</div>

【问题讨论】:

    标签: javascript jquery css jquery-mobile highcharts


    【解决方案1】:

    jQuery Mobile 在与其他 js 绘图框架一起使用时是独一无二的。它们只能与 pageshow 事件一起使用。

    还有一点,记得在 jQuery Mobile 初始化之后再初始化 HighCharts。

    这是一个工作示例:http://jsfiddle.net/Gajotres/Eg9Xz/

    HTML:

    <!DOCTYPE html>
    <html>
    <head>
        <title>jQM Complex Demo</title>
        <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; minimum-scale=1.0; user-scalable=no; target-densityDpi=device-dpi"/>
        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css" />
        <script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>    
        <script src="http://code.highcharts.com/highcharts.js"></script>
        <script src="http://code.highcharts.com/modules/exporting.js"></script>    
    </head>
    <body>
        <div data-role="page" id="index">
            <div data-theme="a" data-role="header">
                <h3>
                    First Page
                </h3>
                <a href="#second" class="ui-btn-right">Next</a>
            </div>
    
            <div data-role="content">
                <div id="container" style="min-width: 400px; height: 400px; margin: 0 auto"></div>
            </div>
    
            <div data-theme="a" data-role="footer" data-position="fixed">
    
            </div>
        </div>             
    </body>
    </html> 
    

    Javascript:

    $(document).on('pageshow', '#index', function(){    
        var chart;
        $(document).ready(function() {
            chart = new Highcharts.Chart({
                chart: {
                    renderTo: 'container',
                    type: 'line',
                    marginRight: 130,
                    marginBottom: 25
                },
                title: {
                    text: 'Monthly Average Temperature',
                    x: -20 //center
                },
                subtitle: {
                    text: 'Source: WorldClimate.com',
                    x: -20
                },
                xAxis: {
                    categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
                        'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
                },
                yAxis: {
                    title: {
                        text: 'Temperature (°C)'
                    },
                    plotLines: [{
                        value: 0,
                        width: 1,
                        color: '#808080'
                    }]
                },
                tooltip: {
                    formatter: function() {
                            return '<b>'+ this.series.name +'</b><br/>'+
                            this.x +': '+ this.y +'°C';
                    }
                },
                legend: {
                    layout: 'vertical',
                    align: 'right',
                    verticalAlign: 'top',
                    x: -10,
                    y: 100,
                    borderWidth: 0
                },
                series: [{
                    name: 'Tokyo',
                    data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]
                }, {
                    name: 'New York',
                    data: [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5]
                }, {
                    name: 'Berlin',
                    data: [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0]
                }, {
                    name: 'London',
                    data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8]
                }]
            });
        });
    
    });
    

    【讨论】:

    • 如果我不包含 则不会显示所需的图表,但是如果我包含它,则会显示输出(我在电脑浏览器上调试)。那么这是否意味着当我将它部署在手机或平板电脑上时,它不会工作????
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多