H5跨平台开发app之横竖屏导致的图表混乱问题

在跨平台开发中,犹豫使用的是非原生开发语言,会导致很多不方便的地方,最近公司做一个统计图表的东西,如果用原生开发的话比较容易控制图表显示时手机屏幕的方向,在跨平台开发中比较麻烦,

如果用户打开了手机屏幕自动旋转,有可能导致图表显示的错误。

解决方案:

<!DOCTYPE html>

<html lang=‘en‘>

    <head>
        <meta charset=‘UTF-8‘>
        <title>ichartjs designer</title>
        <script src=‘http://www.ichartjs.com/ichart.latest.min.js‘></script>
        <script src="js/jquery-2.1.1.min.js"></script>
        <script type="text/javascript">
            var evt = "onorientationchange" in window ? "orientationchange" : "resize";

            window.addEventListener(evt, function() {
                console.log(evt);
                var width = document.documentElement.clientWidth;
                var height = document.documentElement.clientHeight;
                $print = $(‘#ichart-render‘);
                if(width > height) {
                    $print.width(width);
                    $print.height(height);
                    $print.css(‘top‘, 0);
                    $print.css(‘left‘, 0);
                    $print.css(‘transform‘, ‘none‘);
                    $print.css(‘transform-origin‘, ‘50% 50%‘);
                    //这里取得了图表显示控件后要对其进行设置CSS,否则来回旋转将导致布局错误
                    var x = document.getElementById("ichart-render");
                    x.style.position = "absolute";
                    x.style.top = "20%";
                } else {
                    $print.width(height);
                    $print.height(width);
                    $print.css(‘top‘, 0);
                    $print.css(‘left‘, 0);
                    $print.css(‘transform‘, ‘none‘);
                    $print.css(‘transform-origin‘, ‘50% 50%‘);
                }

            }, false);
        </script>
        <script type=‘text/javascript‘>
            var w = document.documentElement.clientWidth;
            var h = document.documentElement.clientHeight;
            var diameter = Math.min(w, h);
            //这里获得了手机屏幕的宽高后,为了旋转手机的时候导致界面不混乱,需要将显
            示的图表设置为宽高最小的正方形(取巧)
            console.log(diameter);
            $(function() {
                var chart = iChart.create({
                    render: "ichart-render",
                    width: w,
                    height: w,
                    background_color: "#fefefe",
                    gradient: false,
                    color_factor: 0.2,
                    border: {
                        color: "BCBCBC",
                        width: 1
                    },
                    align: "center",
                    offsetx: 0,
                    offsety: 0,
                    sub_option: {
                        border: {
                            color: "#BCBCBC",
                            width: 1
                        },
                        label: {
                            fontweight: 500,
                            fontsize: 11,
                            color: "#4572a7",
                            sign: "square",
                            sign_size: 12,
                            border: {
                                color: "#BCBCBC",
                                width: 1
                            },
                            background_color: "#fefefe"
                        }
                    },
                    shadow: true,
                    shadow_color: "#666666",
                    shadow_blur: 2,
                    showpercent: false,
                    column_width: "70%",
                    bar_height: "70%",
                    radius: "90%",
                    title: {
                        text: "利用ichartjs制作漂亮图表",
                        color: "#111111",
                        fontsize: 20,
                        font: "微软雅黑",
                        textAlign: "center",
                        height: 30,
                        offsetx: 0,
                        offsety: 0
                    },
                    subtitle: {
                        text: "",
                        color: "#111111",
                        fontsize: 16,
                        font: "微软雅黑",
                        textAlign: "center",
                        height: 20,
                        offsetx: 0,
                        offsety: 0
                    },
                    footnote: {
                        text: "",
                        color: "#111111",
                        fontsize: 12,
                        font: "微软雅黑",
                        textAlign: "right",
                        height: 20,
                        offsetx: 0,
                        offsety: 0
                    },
                    legend: {
                        enable: false,
                        background_color: "#fefefe",
                        color: "#333333",
                        fontsize: 12,
                        border: {
                            color: "#BCBCBC",
                            width: 1
                        },
                        column: 1,
                        align: "right",
                        valign: "center",
                        offsetx: 0,
                        offsety: 0
                    },
                    coordinate: {
                        width: "80%",
                        height: "84%",
                        background_color: "#ffffff",
                        axis: {
                            color: "#a5acb8",
                            width: [1, "", 1, ""]
                        },
                        grid_color: "#d9d9d9",
                        label: {
                            fontweight: 500,
                            color: "#666666",
                            fontsize: 11
                        }
                    },
                    label: {
                        fontweight: 500,
                        color: "#666666",
                        fontsize: 11
                    },
                    type: "pie2d",
                    data: [{
                        name: "名称A",
                        value: 20,
                        color: "#4572a7"
                    }, {
                        name: "名称B",
                        value: 30,
                        color: "#aa4643"
                    }, {
                        name: "名称C",
                        value: 40,
                        color: "#89a54e"
                    }, {
                        name: "新增",
                        value: 10,
                        color: "#4572a7"
                    }]
                });
                chart.draw();
            });
        </script>
        <style type="text/css">
            #ichart-render {
                position: absolute;
                top: 20%;
            }
        </style>
    </head>

    <body >
        <div id=‘ichart-render‘></div>
    </body>

</html>
时间: 2025-01-19 21:58:07

H5跨平台开发app之横竖屏导致的图表混乱问题的相关文章

10分钟,AppCan帮你搞定跨平台开发APP问题!

跨平台开发APP时,开发者总会遇到一些问题,如打包失败等等,尤其对于iOS来说,由于它的限制性会导致一些状况发生(如证书上传问题等),小编总结了几个AppCan在线IOS打包失败常见的情况及排查技巧,有所困扰的同学可以作为参考,对问题进行排查. 打包失败分为以下几种情况: 1.插件重复勾选:请检查"公共插件"与"我的插件"(自己上传的插件)是否有重复插件. 2.证书问题:请参照开发指导→iOS证书申请流程的指引文档,在苹果官网正确申请证书.证书上传后检验通过不代表证

三大跨平台开发App分析

三大跨平台开发App分析,目前跨平台开发的主流有三大家主流:Cordova.Xamarin.Unity. 目前跨平台开发的主流有三大家主流:Cordova.Xamarin.Unity. Cordova原名PhoneGap,是可以用Eclipse编辑Javascript搭配node.js写server端的程序,来产生不同平台的App.现在微软在Visual Studio 2015中,加入了Cordova项目,并整合了插件的导入流程,使开发者可以经由界面的操作,可以导入插件,甚至是Git的Addre

H5混合开发APP配置以及第一个工程--博客园老牛大讲堂

前段时间有人问我怎样用H5开发app,我恰好知道就把步骤粘出来,有不懂的地方给我留言,我再修改.--博客园老牛大讲堂 思想:首先用Hbuilder开发工程,把自己的工程粘贴到APICloud的工程里面.然后用网上的APICloud的内容打包内容. 环境:Hbuilder,夜神模拟器,APICloud开发工具. 提示:因为APICloud因为提示功能不好,所以建议如果想开发就用Hbuilder开发.开发完就把css,js,img粘里面就行了. 第一.首先下载一个APICloud开发环境(APICl

移动Web开发—处理设备的横竖屏

为了应对移动设备屏幕的碎片化,我们在开发Mobile Web应用时,一个最佳实践就是采用流式布局,保证最大可能地利用有限的屏幕空间.由于屏幕存在着方向性,用户在切换了屏幕的方向后,有些设计上或实现上的问题就会凸显——我们至少需要处理一下当前显示元素的宽度的适配(当然,要做的可能不仅仅是这个).很多时候,我们需要为不同的屏幕方向来设计对应的应用显示模式,这个时候,实时地获知设备的模竖屏状态就显得极为重要. http://dict.baidu.com/s?wd=%E6%B4%9B%E4%B8%BD%

android开发如何切换横竖屏

横竖屏设置 横竖屏的设置在AndroidManifest.xml文件中: screenOrientation="landscape"为横屏: screenOrientation="portrait"为竖屏:

iOS开发之判断横竖屏切换

/** *  当屏幕即将旋转的时候调用 * *  @param toInterfaceOrientation 旋转完毕后的最终方向 *  @param duration  旋转动画所花费的时间 */ - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { if (UIInterfaceOrientation

(一〇八)iPad开发之横竖屏适配

在iPad开发中,横竖屏的视图常常是不同的,例如侧边栏Dock,在横屏时用于屏幕较宽,可以展示足够多的内容,每个按钮都可以展示出标题:而竖屏时Dock应该比较窄,只显示图标不现实按钮标题. iPad比较重要的知识是不同类型设备的宽高在以点为单位的图形坐标系下固定为768x1024,因此常常利用此值来判断横竖屏. 768.1024.横竖屏判断很常用,可以定义一个公共的常量文件来放这些内容. [常量和宏的定义] ①在.m文件中,定义变量,加上const,注意指针(例如NSString*)使用的是常量

Android应用:横竖屏切换总结

眨眼间,已经到了2016你年春节前,离上一篇博客的时间已经有6个月多,回想起这半年的种种,不得不说,学习和工作实在是太忙了,或许这就是程序员的真实写照吧. 写博客之初,主要的目的还是为了把自己的学习痕迹记录下来,写的东西比较基础,也不多,算是一种督促,希望能坚持地学习下去,因为学识不存在暴发户,靠的是积累.如果对自己过去半年的学习给个评价,我还是比较满意的,前期定下来的目标都基本都达到了.单凭这个,我就觉得今年的新年会是个好年. 说完过去,那么接着就是将来.因为现在的工作环境上外网不大方便,而且

Android横竖屏切换重载问题与小结

(转自:http://www.cnblogs.com/franksunny/p/3714442.html) (老样子,图片啥的详细文档,可以下载后观看 http://files.cnblogs.com/franksunny/635350788930000000.pdf) Android手机或平板都会存在横竖屏切换的功能,通常是由物理重力感应触发的,但是有时候也不尽然,通常在设置里面我们可以对手机的横竖屏切换进行关闭,操作界面如下 只需要点击下“屏幕旋转”按钮就可以关闭横竖屏切换了. 一.禁止AP