如何实现 Echart 折线图的横屏显示?

发布于 2022-09-06 11:30:16 字数 18921 浏览 29 评论 0

1.用echart在手机上做了一个折线图,x轴是显示的当月日期,由于x轴内容过多无法清晰的查看,所以想用横屏的方式,尽可能把一个月30天都在x轴上不重叠的显示(知道echart的滚动条可以拉伸,但是需求是要做横屏的比较方便查看);
2.我用网上找的方法,旋转了页面确实可以横屏查看了,但是在使用x轴的绑定点击事件时发现,折线图只是看起来横屏了,实际的坐标数据并没有随着页面旋转而旋转。

图片描述

不知道怎么办了,求大神帮忙
页面是mui做的,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
  <title></title>
  <link href="../css/mui.min.css" rel="stylesheet" />
    <link rel="stylesheet" type="text/css" href="../css/mui.picker.min.css" />
  <!-- <link rel="stylesheet" href="test2.less"> -->
  <style>

    @media screen and (orientation: portrait) {
      .main {
          -webkit-transform:rotate(90deg);
          -moz-transform: rotate(90deg);
          -ms-transform: rotate(90deg);
          transform: rotate(90deg);
        width: 100vh;
        height: 100vh;
        overflow: hidden;
        background-color: #FFFFFF;
      }
    }
    
    @media screen and (orientation: landscape) {
      .main {
        -webkit-transform:rotate(0);
        -moz-transform: rotate(0);
        -ms-transform: rotate(0);
        transform: rotate(0);
        background-color: #FFFFFF;
      }
    }
    
    .choiceBtn{
            position: absolute;
            height: 40px;
            width: 150px;
            height: 35px;
            top: 50%;
            left: 50%;
            margin-left: -75px;
            margin-top: -17.5px;
              color: #FFFFFF;
              border: solid 1px #FFFFFF;
              border-radius:10px ;
              background: #54BBA0;
        }
  </style>
</head>
<body>
  <div class="main">
      <header id="headerheight" class="mui-bar mui-bar-nav" style="background-color: #54BBA0;">
                <a class="mui-icon mui-action-back mui-icon-back mui-pull-left" style="color: #FFFFFF;"></a>
                <button id="choiceMonth" class="choiceBtn" data-options='{"type":"month"}'>点击选月份</button>
            </header>
        
        <div class="mui-content">
            <div id="pieFrm" class="" style="background: #FFFFFF;">
                <div class="" style="background: #FFFFFF;height:100%;">
                    <table id="AttriColu" bgcolor="#FFFFFF" height="40px" border="0" width="100%" align="center" style="border-bottom: solid 1px #DDDDDD;">
                        <th width="50%" class="mui-h5" style="border-right:solid 1px #DDDDDD;border-top:solid 1px #DDDDDD;font-size: 14px;color: #000000;">酒店总房数</th>
                        <th width="50%" style="border-right:solid 1px #DDDDDD;border-top:solid 1px #DDDDDD;font-size: 14px; color: #000000;">
                            <h5 id="allRoomCount"></h5>
                        </th>
                    </table>
                    <div id="monthCount" style="width: 100%;height:98%;"></div>
                </div>
            </div>
        </div>
        
        <div id="fresh" style="display: none; z-index: 9998; position: absolute;top: 43%;left: 40%;border-radius:18px;background-color: rgba(0,0,0,0.2);border: solid 0px;height: 80px;width:80px ;">
            <a class="mui-tab-item mui-active">
                <span class="mui-spinner" style="margin-top: 15px;margin-left: 27.5px;"></span>
                <h5 class="mui-tab-label" style="color: #FFFFFF;margin-left: 18.5px;">请稍候</h5>
            </a>
        </div>
  </div>
  <script src="../js/mui.min.js"></script>
    <script src="../js/url.js"></script>
    <script src="../js/echarts-en.min.js"></script>
    <!--<script src="../libs/echarts-all.js"></script>-->
    <script src="../js/mui.picker.min.js"></script>
    <script type="text/javascript" src="../js/jquery-2.1.0.js" ></script>
    <script type="text/javascript">
        mui.init()
    </script>
  <!--<script type="text/javascript" src="http://img3.fdc.com.cn/m/js/lib/zepto/zepto.min.js"></script>-->
  <script>
//    var orientationFun = function(){
//      var width_doc = document.documentElement.clientWidth;
//      var height_doc =  document.documentElement.clientHeight; //文档流的高度
//      var _width = screen.width;
//      var _height =  screen.height; //屏幕的高度
//    if (window.orientation == 180 || window.orientation == 0) {
//            if(_width<_height){
//              alert('body宽高:('+width_doc+','+height_doc+')  print容器宽高:('+$('#print').width()+","+$('#print').height()+")");
//              $('.main').css({'transform': 'rotate(90deg)'});
//              $('.main').width(height_doc);
//              $('.main').height(width_doc);
//              $('.main').offset({top:0});
//                $('#test').html('body宽高:('+width_doc+','+height_doc+')  print容器宽高:('+$('.main').width()+","+$('.main').height()+")")
//             }else{}
//    }
//    if (window.orientation == 90 || window.orientation == -90 ){
//      $('.main').css({'transform': 'rotate(0)'});
//      $('.main').width(_height);
//      $('.main').height(_width);
//      alert('body宽高:('+width_doc+','+height_doc+')  print容器宽高:('+$('#print').width()+","+$('#print').height()+")");
//        $('#test').html('body宽高:('+width_doc+','+height_doc+')  print容器宽高:('+$('.main').width()+","+$('.main').height()+")")
//    }
//  }
//    
//  window.addEventListener("onorientationchange" in window ? "orientationchange" : "resize", function() {
//    orientationFun();
//  }, false);
//  
//  orientationFun();



    var consCode = "3509210100000214"
//    var consCode = localStorage.getItem("hotelCode")
        
        var roomCountArray=[],weChatCountArray=[]
        var maskState = false;
        var mask = mui.createMask(function(){
            return maskState;
        });//callback为用户点击蒙版时自动执行的回调;
        maskState = false
        mask.show();//显示遮罩
        $('#fresh').show()
        
        var monthCountBar;
        document.getElementById('pieFrm').style.height = document.body.scrollHeight-75 +"px"
        
        /*
         * ajax 封装
         */
        var ajaxMethod = {
            //ajax请求数据
            method: function(murl, mdata, success) {
                console.log(murl+" + "+JSON.stringify(mdata))
                jQuery.ajax({
                    type: "post",
                    url: murl,
                    dataType: "jsonp",
                    data: mdata, 
                    error: function(data) {
                        console.log(JSON.stringify(data));
                        mui.alert("服务器连接失败!")
                        $('#fresh').hide()
                        maskState = true
                        mask.close()
                    },
                    success: function(data) {
                        success ? success(data) : function() {};
                    }
                });
            }
        }
        
        //计算某月的最后一天日期
        function showMonthLastDay(text)     
        {     
        var year = text.split("-")[0]
        var month = text.split("-")[1]
        var MonthNextFirstDay=new Date(year,month,1);     
        var MonthLastDay=new Date(MonthNextFirstDay-86400000);
        return MonthLastDay.getDate();     
        }
        
        (function($) {
            $.init();
            var btns = $('.choiceBtn');
            btns.each(function(i, btn) {
                btn.addEventListener('tap', function() {
                    var optionsJson = this.getAttribute('data-options') || '{}';
                    var options = JSON.parse(optionsJson);
                    var id = this.getAttribute('id');
                    /*
                     * 首次显示时实例化组件
                     * 示例为了简洁,将 options 放在了按钮的 dom 上
                     * 也可以直接通过代码声明 optinos 用于实例化 DtPicker
                     */
                    var picker = new $.DtPicker(options);
                    picker.show(function(rs) {
                        /*
                         * rs.value 拼合后的 value
                         * rs.text 拼合后的 text
                         * rs.y 年,可以通过 rs.y.vaue 和 rs.y.text 获取值和文本
                         * rs.m 月,用法同年
                         * rs.d 日,用法同年
                         * rs.h 时,用法同年
                         * rs.i 分(minutes 的第二个字母),用法同年
                         */
                        document.getElementById(id).innerText = rs.text+"月";
                        GetAllRoom()
                        
                        /*
                         * 释放组件资源,释放后将将不能再操作组件
                         * 通常情况下,不需要示放组件,new DtPicker(options) 后,可以一直使用。
                         * 当前示例,因为内容较多,如不进行资原释放,在某些设备上会较慢。
                         * 所以每次用完便立即调用 dispose 进行释放,下次用时再创建新实例。
                         */
                        picker.dispose();
                    });
                }, false);
            });
        })(mui);
        
        function InitEchart(tuTitle,dateMonth,dataRoom,dataPerson){
//            alert("房间入住率:"+dataRoom)
//            alert("微信使用率:"+dataPerson)
            var echartObj = {
                title : {
                    text: tuTitle,
                    y:0,
                    x:'center'
                   },
                   tooltip : {
                           axisPointer:{
                               type:'cross',
                           },
                       trigger: 'axis',
                       formatter: 
                       function(a){
                        var relVal = "";
//                        a[1]=a["name"]
//                        a[0]=a["seriesName"]
//                        a[2]=a["value"]
                        console.log(JSON.stringify(a[1]))
//                        relVal = a[0]["name"]+":<br/>";
                        var i = a[0]["name"].split("日")[0]
                        i = parseInt(i)-1
                        
                        relVal += a[0]["seriesName"].split("率")[0]+"数:";
                        relVal += roomCountArray[i]["count"]+"间<br/>"
                        relVal += a[1]["seriesName"].split("率")[0]+"数:";
                        relVal += weChatCountArray[i]["count"]+"间<br/>"
                        relVal += a[0]["seriesName"]+":"+a[0]["value"]+"%<br/>";
                        relVal += a[1]["seriesName"]+":"+a[1]["value"]+"%";
                        return relVal;
                    }
                   },
                legend: {
                    y:'40',
                    data: ['房间入住率', '微信使用率']
                },
                grid: {
                    x: 33,
                    x2: 8,
                    y: 80,
                    y2: 50
                },
                calculable: false,
                xAxis: [{
//                    inverse:true,
                    type: 'category',
                    triggerEvent:true,
                    axisLabel :{
//                        rotate:271,
                        interval:0,
                        clickable:true
                    },
                    data: dateMonth,
                }],
                yAxis: [{
//                    axisLine:{ // 隐藏X轴
//                        show: false
//                    },
//                    axisTick:{ // 隐藏刻度线
//                        show: false
//                    },
                    type: 'value',
                    name: '入住/使用率\n(%)',
//                    inverse:true,
                    splitArea: {
                        show: true,
                    },
                    max:100,
               axisLabel: {
    //                           rotate:270,
                formatter: '{value}',
    //                        clickable:true
            }
                }],
//            dataZoom:{
//                orient: "horizontal", //水平显示
//                show: true, //显示滚动条
//                start: 0, //起始值为20%
//                end: 100, //结束值为60%
//            },
                series: [{
                    symbolSize:15,
                    name: '房间入住率',
                    type: 'line',
                    data: dataRoom,
                    silent:true,
                    itemStyle: {
                   normal:{
                     label:{
    //                                 rotate:270,
                         show:true,
                         formatter: '{c}%'
                     }
                   }
               }
                }, {
                    name: '微信使用率',
                    type: 'line',
                    symbolSize:15,
                    data: dataPerson,
                    silent:true,
                    itemStyle: {
                   normal:{
                     label:{
    //                                 rotate:270,
                         show:true,
                         formatter: '{c}%'
                     }
                   }
               }
                }]
            };
            return echartObj;
        }
        
        //获取房间总数
        function GetAllRoom(){
          maskState = false
            mask.show();//显示遮罩
            $('#fresh').show()
            console.log("获取总房数")
    
            var sendData = {
//            "constructioncode": "3509210100000214"
//            "constructioncode": "3501040100000479"//3501820100000788
                "constructioncode": consCode
            };
    
            var method = "GetList_RoomCode";
            //手机号符号 判断是否已经存在
            ajaxMethod.method(workAreaUrl + method, sendData, function(data) {
                console.log("总房数:"+JSON.stringify(data));
                if(data != null) {
                    document.getElementById('allRoomCount').innerText = JSON.stringify(data)
                    
                    GetMonthRoom(document.getElementById('choiceMonth').innerText.split("月")[0])
                    
                    $('#fresh').hide()
                    maskState = true
                    mask.close()
                }
            });
      }
        
        //获取当月每天房间入住数
        function GetMonthRoom(month){
          maskState = false
            mask.show();//显示遮罩
            $('#fresh').show()
            console.log("获取当月每天入住房数")
    
            var sendData = {
//            "constructioncode": "3509210100000214",
//            "constructioncode": "3501040100000479"//3501820100000788
                "constructioncode": consCode,
                "r_time":month
            };
    
            var method = "GetList_RoomCount";
            //手机号符号 判断是否已经存在
            ajaxMethod.method(probabilityUrl + method, sendData, function(data) {
                console.log("当月每天入住房数:"+JSON.stringify(data));
                if(data != null) {
                    roomCountArray = data;
                    var dateMonth=[],dataRoom=[]
                    var allRoomCount = document.getElementById('allRoomCount').innerText
                    for(var i=0;i<data.length;i++){
                        var theDate = returntime(data[i]["createtime"])
//                        dateMonth.push(theDate.split("-")[2]+"日")
                        dateMonth.push(theDate.split("-")[2]+"\n日")
                        dataRoom.push((data[i]["count"]/allRoomCount*100).toFixed(1))
                    }
                    GetMonthWebChat(month,dateMonth,dataRoom)
                    
                    $('#fresh').hide()
                    maskState = true
                    mask.close()
                }
            });
      }
        
        //获取当月每天微信使用的房间数
        function GetMonthWebChat(month,dateMonth,dataRoom){
              maskState = false
            mask.show();//显示遮罩
            $('#fresh').show()
            console.log("获取当月每天微信使用房数")
    
            var sendData = {
//            "constructioncode": "3509210100000214",
//            "constructioncode": "3501040100000479"//3501820100000788
                "constructioncode": consCode,
                "r_time":month
            };
    
            var method = "GetList_WebCount";
            //手机号符号 判断是否已经存在
            ajaxMethod.method(probabilityUrl + method, sendData, function(data) {
                console.log("当月每天使用微信房数:"+JSON.stringify(data));
                if(data != null) {
                    weChatCountArray = data;
                    var dataPerson=[],tuTitle=month+"月入住情况"
                    
                    for(var i=0;i<data.length;i++){
                        dataPerson.push((data[i]["count"]/roomCountArray[i]["count"]*100).toFixed(1))
                    }
                    
                    monthCountBar = echarts.init(document.getElementById('monthCount'));
                    monthCountBar.setOption(InitEchart(tuTitle,dateMonth,dataRoom,dataPerson));
                    
                    monthCountBar.on('click', function (param) {
//                    alert(param.value)
//                    return
                        var ChooseDate = param.value//.replace(/\n/g, "");
                        ChooseDate = month+"-"+ChooseDate.split("日")[0]
                        window.location.href = 'hotel_daySituation.html?theDate='+ChooseDate
                })
                    
                    $('#fresh').hide()
                    maskState = true
                    mask.close()
                }
            });
      }
        
        //获取今日日期的方法
        function Today() {
            var cMonth = new Date().getMonth() + 1;
            if(cMonth / 10 < 1) {
                cMonth = "0" + cMonth;
            }
            var dateMonth=[],dataRoom=[],dataPerson=[],tuTitle
            cDate = new Date().getFullYear() + "-" + cMonth;
            document.getElementById('choiceMonth').innerText = cDate+"月"
            GetAllRoom()
        }
            
        //解析时间createtime
        function returntime(times)
        {
            var date;
            var Y;
            var M;
            var D;
            var h;
            var m;
            var s;
            var time;
            time=times.substring(6,times.length-7);
            date = new Date(parseInt(time));
        Y = date.getFullYear() + '-'; //年
        M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';//月
        if ( date.getDate()<10) {
          D = '0'+date.getDate();//日
        }
        else
            D = date.getDate();//日
             
        time=Y+M+D;
        return time;
        }
            
        Today()
  </script>
</body>
</html>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

︶ ̄淡然 2022-09-13 11:30:16

横屏之后重新加载行不

青春有你 2022-09-13 11:30:16

找到一种方式,就是在页面中嵌套iframe,图表显示在iframe中。主页面控制iframe横屏竖屏的显示样式,并在点击横屏竖屏按钮时,触发iframe内的resize事件,然后重新绘制图表就可以

我三岁 2022-09-13 11:30:16

百度 echart移动端横屏展示,第一个就是,至于tooltip可以:extraCssText: 'transform:rotate(90deg)'

醉城メ夜风 2022-09-13 11:30:16

你好 请问你解决没这个问题 我也遇到了这个问题

荆棘i 2022-09-13 11:30:16

我也遇到同样的问题,请问楼主解决了么

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文