• 我的Hcharts的页面应用


    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
        <title></title>
        <link type="image/x-icon" href="/common/images/favicon.ico" rel="icon">
        <style type="text/css">
            *{padding:0;margin:0}
            html,body{height:100%;width:100%;font-family:'Microsoft YaHei'}
            .vote-mrg-box{position: absolute;top:0;z-index: 15;background:#fff;right:0;width:138px;padding:30px;border-radius:8px;}
            .vote-mrg-box p{color:#3d3d3d;text-align:center;font-size:14px;font-weight:800;line-height:28px}
            .tc{text-align:center}
            .time{color:red;font-size:20px;line-height:28px;vertical-align: bottom;font-weight:800}
            .miao{font-size:12px;color:#3d3d3d;line-height:28px;vertical-align: bottom;font-weight:800}
            #pastTime{font-size:14px;line-height:28px;text-align:center}
            .group{width:100px;font-size:12px;margin-left:19px;margin-bottom:10px;margin-top:5px;border:1px solid #2ea8e0;line-height:26px;height:26px;}
            .start{border:0;line-height:26px;background:#2ea8e0;color:#fff;margin-left:19px;border-radius:4px;height:26px;width:100px;text-align:center;font-weight:normal;font-family:'Microsoft YaHei';}
        </style>
    </head>
    <body>
    <div class="vote-mrg-box">
        <input type="hidden" value="${vote_time?c}" id="daojishi"/>
        <p>投票倒计时:</p>
        <div class="tc">
            <span class="time" color="red">${vote_time?c}</span>
            <span class="miao">s</span>
        </div>
        <p>投票经过时间:</p>
        <div class="tc">
            <span id="pastTime">${vote_past_time?c}</span>
            <span class="miao">s</span>
        </div>
        <select class="group" data-conf_id="${conf_id?c}">
            <option value="0">所有人</option>
            <#list group_list as group>
                <option value="${group.conf_group_id?c}">${group.conf_group_name}</option>
            </#list>
        </select>
        <button class="start">开始投票</button>
    </div>
    
    <div id="my_container"></div>
    
    <script src="/libs/jquery-1.8.2/jquery-1.8.2.min.js"></script>
    <script src="/libs/jquery-ui-10/ui/jquery.ui.core.js"></script>
    <script src="/libs/jquery-ui-10/ui/jquery.ui.widget.js"></script>
    <script src="/libs/jquery-ui-10/ui/jquery.ui.mouse.js"></script>
    <script src="/libs/jquery-ui-10/ui/jquery.ui.draggable.js"></script>
    <script type="text/javascript" src="/libs/highcharts/js/highcharts.js"></script>
    <script src="/libs/highcharts/js/modules/data.js"></script>
    <script src="/libs/highcharts/js/modules/drilldown.js"></script>
    <script>
    
        var vote_id = '${vote_id?c}', vote_code='${vote_code}';
        var timeOut;//每个1秒请求一次的函数
        var timeOver;//每隔5秒请求投票数据的函数
        var vote_end = false;//是否投票结束的变量
        var vote_start = true;
    
        function getCookie(c_name){
            if (document.cookie.length>0)
            {
                c_start=document.cookie.indexOf(c_name + "=")
                if (c_start!=-1)
                {
                    c_start=c_start + c_name.length+1
                    c_end=document.cookie.indexOf(";",c_start)
                    if (c_end==-1) c_end=document.cookie.length
                    return unescape(document.cookie.substring(c_start,c_end))
                }
            }
            return ""
        }
    
        $(function() {
    
            if(window.localStorage){
                init();
            }else{
                alert("本浏览器不支持投票预览功能,建议更换成谷歌浏览器");
            }
    
            init();
    
            $('.vote-mrg-box').draggable({scroll:false});
            $('.start').on('click', function(){
                $(this).off('click');
                if(vote_end){
                    alert('对不起投票已经结束了');
                }else{
                    $.ajax({
                        url : '/scene/screen/vote/' + vote_id,
                        type : 'POST',
                        dataType : 'json',
                        cache:false,
                        data : {"vote_code" : vote_code,"conf_id" : $('.group').data('conf_id'), "conf_group_id" : $('.group').val()}
                    }).done(function(json) {
                        timeOut = setInterval(startTime, 1000);
                        timeOver =setInterval(redraw, 4000);
                    });
                }
            })
        });
    
        function startTime(){
            var timeBox = $('.time');
            var time = timeBox.html();
            var nowTime;
            if(time-1<0){
                nowTime = 0;
            }else{
                nowTime = time - 1 ;
    
                if(parseInt($('#pastTime').html())< parseInt($('#daojishi').val())){
                    $('#pastTime').html(parseInt($('#pastTime').html())+1);
                }
            }
            if(time == timeBox.attr('value')){
                timeBox.attr('value', '')
            }else{
                timeBox.html(nowTime);
            }
            if(nowTime=='0'){
                window.clearInterval(timeOut);
            }
        }
    
        function redraw() {
            $.ajax({
                url : '/scene/screen/vote/' + vote_id,
                type : 'get',
                dataType : 'json',
                data : {
                    dt : 'json'
                },
                cache:false
            }).done(function(json) {
                if(json.RS_CODE != '0'){
                    alert(json.RS_MSG);
                    return;
                }
                var stop = $('.time').html()==0;
    
                if(stop){
                    window.clearInterval(timeOver);
                }
                chart.series[0].setData(formatSeriesData(json),stop);
                chart.redraw();
            }).fail(function(){
                alert('请求投票数据失败,建议配置谷歌浏览器。');
            })
        }
    
        /**整理数据格式
         *[{
            *    name: "赞成", //下面的类目名
            *    y: 56,       //票数
            *     drilldown: "赞成" //上面的名字
            *}] 如此塞入series中的data属性
         *
         **/
        function formatSeriesData(json,end,first){
            var seriesData = [];
            var RS_DATA = json.RS_DATA;
            var len = RS_DATA.vote_name.length||0;
    
    
            //最后一秒回归最大数据
            for(var i=0;i<len;i++){
                var y = 0;
    
                //如果此次投票结束了
                if(vote_end){
                    //如果Y有最大值的话,就取最大值,无的话自身的数字
                    y = RS_DATA.vote_limit_num[i] ? RS_DATA.vote_limit_num[i]:RS_DATA.vote_data[i];
                }else{
                    //从0开始投票
    
                    //凡有上限一定是造假的    有限制值时候
                    if(RS_DATA.vote_limit_num[i]){
                        //如果投票开始了
                        if(RS_DATA.vote_start){
    
                            var daojishi = parseInt($('#daojishi').val());
                            var pastTime = parseInt($('#pastTime').html());
    
                            //console.log(daojishi);
                            //console.log(pastTime);
                            //console.log('1',pastTime/daojishi);
    
                            //投票时间初期 真实数据 1/2
                            if(pastTime/daojishi<0.5){
                                //不超过最大值
                                y =(RS_DATA.vote_data[i]>RS_DATA.vote_limit_num[i])?(RS_DATA.vote_limit_num[i]-1):RS_DATA.vote_data[i];
    
                            }
    
    
                            //投票时间中旬 0.5~最后一秒前,投票猛增
                            if(pastTime/daojishi>0.5 && pastTime/daojishi<1 && pastTime!=daojishi){
    
                                var avg = parseInt(RS_DATA.vote_limit_num[i]/daojishi*pastTime);
    
                                //如果实际投票数 大于了 当前的投票数,那么现实实际投票数
                                if(window.localStorage['avote'+ vote_id +i] >=  avg){
                                    y = window.localStorage['avote'+ vote_id +i];
    
                                }else{
                                    y = avg;
                                }
                            }
    
                            if(pastTime/daojishi>=1){
                                y = window.localStorage['avote'+ vote_id +i] || RS_DATA.vote_limit_num[i];
                            }
    
    
                            window.localStorage['avote'+ vote_id +i] =  y;
    
    
                            if($('.time').html()==0){
                                y = RS_DATA.vote_limit_num[i];
                            }
                        }
    
    
    
                    }else{
                        y = RS_DATA.vote_data[i];
                    }
                }
                seriesData.push({
                    name: RS_DATA.vote_name[i],
                    //如果最后值存在的话,就显示最大值,否则的话
                    y:y,
                    drilldown: RS_DATA.vote_name[i]
                });
            }
            return seriesData;
        }
    
    
        function init() {
            $.ajax({
                url : '/scene/screen/vote/' + vote_id,
                type : 'get',
                dataType : 'json',
                data : {
                    dt : 'json'
                },
                cache:false
            }).done(function(json) {
                //console.log('json',json);
                //判断投票是否结束了
                vote_end = json.RS_DATA.vote_end;
                var seriesData = formatSeriesData(json,false,1);
    
    
    
                //配置chart参数
                chart = new Highcharts.Chart({
                            chart:{
                                renderTo: 'my_container',
                                type : 'column',
                                height:$(window).height(),
                                backgroundColor:'#000',
                                borderColor: '#000000',
                                borderWidth: 0,
                                className: 'dark-container',
                                plotBackgroundColor: 'rgba(255, 255, 255, .1)',
                                plotBorderColor: '#ccc',
                                plotBorderWidth: 1
                            },
                            //柱条选择栏颜色
                            colors: ['#50d88d', '#e47473', '#d8d8d8', '#f7a35c', '#8085e9',
                                '#f15c80', '#e4d354', '#8085e8', '#8d4653', '#91e8e1'],
                            $(window).width(),
                            title : {
                                text : '${vote_title}',
                                style:{
                                    fontWeight:'bold',
                                    fontSize:'26px',
                                    fontFamily:'微软雅黑',
                                    color:'#fff'
                                }
                            },
                            xAxis : {
                                categories : json.RS_DATA.vote_name
                            },
                            yAxis: {
                                title: {
                                    text: '投票数',
                                    color:'#fff'
                                },
                                gridLineWidth: 0,
                                lineColor: '#fff',
                                lineWidth: 1,
                                tickColor: '#fff',
                                labels:{style:{color:"#fff",cursor:"default",fontSize:"12px"}}
                            },
                            plotOptions: {
                                series: {
                                    borderWidth: 0,
                                    dataLabels: {
                                        enabled: true,
                                        format: '{point.y}'
                                    }
                                }
                            },
                            tooltip : {
                                headerFormat: '<span style="font-size:11px">投票结果</span><br>',
                                pointFormat: '<span style="color:{point.color}">{point.name}</span>: <b>{point.y}</b> 票<br/>'
                            },
                            drilldown: {
                                activeAxisLabelStyle: {
                                    textDecoration: 'none',
                                    fontSize:'22px',
                                    color:'#fff'
                                },
                                activeDataLabelStyle: {
                                    textDecoration: 'none',
                                    fontSize:'22px',
                                    color:'#fff'
                                }
                            },
                            credits : {
                                enabled : false
                            },
                            series : [ {
                                name : '投票数',
                                data : seriesData,
                                showInLegend: false,
                                colorByPoint: true,
                                dataLabels : {
                                    enabled : true,
                                    rotation : 0,
                                    color : '#FFFFFF',
                                    align : 'center',
                                    x : 4,
                                    y : 10,
                                    style : {
                                        fontSize : '13px',
                                        fontFamily : 'Verdana, sans-serif',
                                        textShadow : '0 0 3px black'
                                    }
                                }
                            }]
                        }
                );
            });
        }
    
        Date.prototype.format = function(format) {
            var o = {
                "M+" : this.getMonth() + 1, //month
                "d+" : this.getDate(), //day
                "h+" : this.getHours(), //hour
                "m+" : this.getMinutes(), //minute
                "s+" : this.getSeconds(), //second
                "q+" : Math.floor((this.getMonth() + 3) / 3), //quarter
                "S" : this.getMilliseconds()
            };
            if (/(y+)/.test(format)) {
                format = format.replace(RegExp.$1, (this.getFullYear() + "")
                        .substr(4 - RegExp.$1.length));
            }
            for ( var k in o) {
                if (new RegExp("(" + k + ")").test(format)) {
                    format = format.replace(RegExp.$1,
                            RegExp.$1.length == 1 ? o[k] : ("00" + o[k])
                                    .substr(("" + o[k]).length));
                }
            }
            return format;
        }
    
    </script>
    </body>
    </html>

    HTML 投票 

  • 相关阅读:
    axios express设置跨域允许传递cookie
    yarn常用命令指北
    Web代理工具NProxy
    DevOps的了解
    css图片hover放大
    autoprefixer
    谈谈浏览器http缓存
    欢迎使用 MWeb
    优化关键渲染路径CRP
    chrome 61 更新
  • 原文地址:https://www.cnblogs.com/ffjiang/p/6051198.html
Copyright © 2020-2023  润新知