创新实训——扩展Chart.js实现翻页式折线图

相信做前端的程序员门都使用过各式各样的图表,但博主在找了很多种图表都没有发现具有翻页功能的图表,于是在Chart.js的基础上写了一些算法实现了可翻页式的折线图,用于显示在数据量过大的情况下的数据(120个数据),由于是刚完成,所以还没有进行优化和封装,只供大家借鉴——



展开:


第二页(由于没有后面的数据,所以默认显示成这样):



下面给出具体思路和代码——

思路:根据大概数据量先指定页数和坐标数值,以二维数组形式存储并赋值给Chart.js,然后通过ajax获取通过php传递过来的数据,并根据指定的页数和坐标值用for循环分成三个数组,分别表示三页的内容,然后当按下上下页后判断当前应该显示那一页,然后赋值相应的Chart.js.


代码:

这是Chart.js声明Chart的格式(有7条线):

 var ctx2 = document.getElementById("myChart2");
                    var myChart2 = new Chart(ctx2, {
                        type: 'line',
                        data: {
                            labels: R,
                            datasets: [{
                                   label: 'happiness',
                                   data: hppiness[i],
                                   borderWidth: 3,
                                   fill:false ,
                                   lineTension:0.1,
                                   borderColor: ['rgba(255, 206, 86, 1)',],
                                   backgroundColor: ['rgba(255, 206, 86, 0.2)',],
                               },
                               {
                                   label: 'fear',
                                   data: fear[i],
                                   borderWidth: 3,
                                   fill:false ,
                                   lineTension:0.1,
                               },
                               {
                                   label: 'surprise',
                                   data: surprise[i],
                                   borderWidth: 3,
                                   fill:false ,
                                   lineTension:0.1,
                                   borderColor: ['rgba(255, 159, 64, 1)'],
                                   backgroundColor: ['rgba(255, 159, 64, 0.2)'],
                               },
                               {
                                   label: 'anger',
                                   data: anger[i],
                                   borderWidth: 3,
                                   fill:false ,
                                   lineTension:0.1,
                                   borderColor: ['rgba(255, 99, 132, 1)',],
                                   backgroundColor: ['rgba(255, 99, 132,0.2)',],
                               },
                               {
                                   label: 'disgust',
                                   data: disgust[i],
                                   borderWidth: 3,
                                   fill:false ,
                                   lineTension:0.1,
                                   borderColor: ['rgba(153, 102, 255, 1)',],
                                   backgroundColor: ['rgba(153, 102, 255, 0.2)',],
                               },
                               {
                                   label: 'sadness',
                                   data: sadness[i],
                                   borderWidth: 3,
                                   fill:false ,
                                   lineTension:0.1,
                                   borderColor: ['rgba(54, 162, 235, 1)',],
                                   backgroundColor: ['rgba(54, 162, 235, 0.2)',],
                               },
                               {
                                   label: 'neutral',
                                   data: neutral[i],
                                   borderWidth: 3,
                                   fill:false ,
                                   lineTension:0.1,
                                   borderColor: ['rgba(75, 192, 192, 1)',],
                                   backgroundColor: ['rgba(75, 192, 192, 0.2)',],
                               },]

                        },
                        options: {

                        }

js:

<sccript>

    var hppiness = new Array();
    var h1 = new Array();
    var h2 = new Array();
    var h3 = new Array();

    var fear = new Array();
    var f1 = new Array();
    var f2 = new Array();
    var f3 = new Array();

    var surprise = new Array();
    var su1 = new Array();
    var su2 = new Array();
    var su3 = new Array();

    var anger = new Array();
    var a1 = new Array();
    var a2 = new Array();
    var a3 = new Array();

    var disgust = new Array();
    var d1 = new Array();
    var d2 = new Array();
    var d3 = new Array();

    var neutral = new Array();
    var n1 = new Array();
    var n2 = new Array();
    var n3 = new Array();

    var sadness = new Array();
    var sa1 = new Array();
    var sa2 = new Array();
    var sa3 = new Array();


    var R = new Array();
    var RadarArray = new Array();
    var RadarArray1 = new Array();
    var RadarArray2 = new Array();
    var RadarArray3 = new Array();


    for (var i=0;i<40;i++)
    {
        RadarArray1.push(i);
    }

    for (var i=40;i<80;i++)
    {
        RadarArray2.push(i);
    }

    for (var i=80;i<120;i++)
    {
        RadarArray3.push(i);
    }

    RadarArray.push(RadarArray1);
    RadarArray.push(RadarArray2);
    RadarArray.push(RadarArray3);


    var i = 0;
    R=RadarArray[i];



    $(document).ready(function(){

        var id1 = "{$id}";

        $.post('{:url("courseqq")}',{id:id1},function(data){

                for (var i = 0; i < data.length; i++) { 
                    if(i<=40){
                        h1.push(data[i].hppiness_avg);
                        f1.push(data[i].fear_avg);
                        su1.push(data[i].surprise_avg);
                        a1.push(data[i].anger_avg);
                        d1.push(data[i].disgust_avg);
                        n1.push(data[i].neutral_avg);
                        sa1.push(data[i].sadness_avg);

                    }
                    else if(40<i<=80){
                        h2.push(data[i].hppiness_avg);
                        f2.push(data[i].fear_avg);
                        su2.push(data[i].surprise_avg);
                        a2.push(data[i].anger_avg);
                        d2.push(data[i].disgust_avg);
                        n2.push(data[i].neutral_avg);
                        sa2.push(data[i].sadness_avg);
                    }
                    else if(80<i<=120){
                        h3.push(data[i].hppiness_avg);
                        f3.push(data[i].fear_avg);
                        su3.push(data[i].surprise_avg);
                        a3.push(data[i].anger_avg);
                        d3.push(data[i].disgust_avg);
                        n3.push(data[i].neutral_avg);
                        sa3.push(data[i].sadness_avg);
                    } 
                } 

                hppiness.push(h1);
                hppiness.push(h2);
                hppiness.push(h3);

                fear.push(f1);
                fear.push(f2);
                fear.push(f3);

                surprise.push(su1);
                surprise.push(su2);
                surprise.push(su3);

                anger.push(a1);
                anger.push(a2);
                anger.push(a3);

                disgust.push(d1);
                disgust.push(d2);
                disgust.push(d3);

                neutral.push(n1);
                neutral.push(n2);
                neutral.push(n3);

                sadness.push(sa1);
                sadness.push(sa2);
                sadness.push(sa3);

               


        });

                $("#btn1").click(function(){
                     if(i<2){
                        i++;
                        R=RadarArray[i];
                        var ctx2 = document.getElementById("myChart2");
                        var myChart2 = new Chart(ctx2, {
                            type: 'line',
                            data: {
                                labels: R,
                                datasets: [{
                                    label: 'happiness',
                                    data: hppiness[i],
                                    borderWidth: 3,
                                    fill:false ,
                                    lineTension:0.1,
                                    borderColor: ['rgba(255, 206, 86, 1)',],
                                    backgroundColor: ['rgba(255, 206, 86, 0.2)',],
                                },
                                {
                                    label: 'fear',
                                    data: fear[i],
                                    borderWidth: 3,
                                    fill:false ,
                                    lineTension:0.1,
                                },
                                {
                                    label: 'surprise',
                                    data: surprise[i],
                                    borderWidth: 3,
                                    fill:false ,
                                    lineTension:0.1,
                                    borderColor: ['rgba(255, 159, 64, 1)'],
                                    backgroundColor: ['rgba(255, 159, 64, 0.2)'],
                                },
                                {
                                    label: 'anger',
                                    data: anger[i],
                                    borderWidth: 3,
                                    fill:false ,
                                    lineTension:0.1,
                                    borderColor: ['rgba(255, 99, 132, 1)',],
                                    backgroundColor: ['rgba(255, 99, 132,0.2)',],
                                },
                                {
                                    label: 'disgust',
                                    data: disgust[i],
                                    borderWidth: 3,
                                    fill:false ,
                                    lineTension:0.1,
                                    borderColor: ['rgba(153, 102, 255, 1)',],
                                    backgroundColor: ['rgba(153, 102, 255, 0.2)',],
                                },
                                {
                                    label: 'sadness',
                                    data: sadness[i],
                                    borderWidth: 3,
                                    fill:false ,
                                    lineTension:0.1,
                                    borderColor: ['rgba(54, 162, 235, 1)',],
                                    backgroundColor: ['rgba(54, 162, 235, 0.2)',],
                                },
                                {
                                    label: 'neutral',
                                    data: neutral[i],
                                    borderWidth: 3,
                                    fill:false ,
                                    lineTension:0.1,
                                    borderColor: ['rgba(75, 192, 192, 1)',],
                                    backgroundColor: ['rgba(75, 192, 192, 0.2)',],
                                },]


                            },
                            options: {

                            }
                        });
                     }
                     else{

                     }
                     $('#slpk1').selectpicker('refresh');  
                });

                $("#btn2").click(function(){
                     if(i>0){
                        i--;
                        R=RadarArray[i];
                        var ctx2 = document.getElementById("myChart2");
                        var myChart2 = new Chart(ctx2, {
                            type: 'line',
                            data: {
                                labels: R,
                                datasets: [{
                                       label: 'happiness',
                                       data: hppiness[i],
                                       borderWidth: 3,
                                       fill:false ,
                                       lineTension:0.1,
                                       borderColor: ['rgba(255, 206, 86, 1)',],
                                       backgroundColor: ['rgba(255, 206, 86, 0.2)',],
                                   },
                                   {
                                       label: 'fear',
                                       data: fear[i],
                                       borderWidth: 3,
                                       fill:false ,
                                       lineTension:0.1,
                                   },
                                   {
                                       label: 'surprise',
                                       data: surprise[i],
                                       borderWidth: 3,
                                       fill:false ,
                                       lineTension:0.1,
                                       borderColor: ['rgba(255, 159, 64, 1)'],
                                       backgroundColor: ['rgba(255, 159, 64, 0.2)'],
                                   },
                                   {
                                       label: 'anger',
                                       data: anger[i],
                                       borderWidth: 3,
                                       fill:false ,
                                       lineTension:0.1,
                                       borderColor: ['rgba(255, 99, 132, 1)',],
                                       backgroundColor: ['rgba(255, 99, 132,0.2)',],
                                   },
                                   {
                                       label: 'disgust',
                                       data: disgust[i],
                                       borderWidth: 3,
                                       fill:false ,
                                       lineTension:0.1,
                                       borderColor: ['rgba(153, 102, 255, 1)',],
                                       backgroundColor: ['rgba(153, 102, 255, 0.2)',],
                                   },
                                   {
                                       label: 'sadness',
                                       data: sadness[i],
                                       borderWidth: 3,
                                       fill:false ,
                                       lineTension:0.1,
                                       borderColor: ['rgba(54, 162, 235, 1)',],
                                       backgroundColor: ['rgba(54, 162, 235, 0.2)',],
                                   },
                                   {
                                       label: 'neutral',
                                       data: neutral[i],
                                       borderWidth: 3,
                                       fill:false ,
                                       lineTension:0.1,
                                       borderColor: ['rgba(75, 192, 192, 1)',],
                                       backgroundColor: ['rgba(75, 192, 192, 0.2)',],
                                   },]

                            },
                            options: {

                            }
                        });
                     }
                     else{
                        
                     }
                });

                
            $("#btn3").click(function(){


                    R=RadarArray[i];
                    var ctx2 = document.getElementById("myChart2");
                    var myChart2 = new Chart(ctx2, {
                        type: 'line',
                        data: {
                            labels: R,
                            datasets: [{
                                   label: 'happiness',
                                   data: hppiness[i],
                                   borderWidth: 3,
                                   fill:false ,
                                   lineTension:0.1,
                                   borderColor: ['rgba(255, 206, 86, 1)',],
                                   backgroundColor: ['rgba(255, 206, 86, 0.2)',],
                               },
                               {
                                   label: 'fear',
                                   data: fear[i],
                                   borderWidth: 3,
                                   fill:false ,
                                   lineTension:0.1,
                               },
                               {
                                   label: 'surprise',
                                   data: surprise[i],
                                   borderWidth: 3,
                                   fill:false ,
                                   lineTension:0.1,
                                   borderColor: ['rgba(255, 159, 64, 1)'],
                                   backgroundColor: ['rgba(255, 159, 64, 0.2)'],
                               },
                               {
                                   label: 'anger',
                                   data: anger[i],
                                   borderWidth: 3,
                                   fill:false ,
                                   lineTension:0.1,
                                   borderColor: ['rgba(255, 99, 132, 1)',],
                                   backgroundColor: ['rgba(255, 99, 132,0.2)',],
                               },
                               {
                                   label: 'disgust',
                                   data: disgust[i],
                                   borderWidth: 3,
                                   fill:false ,
                                   lineTension:0.1,
                                   borderColor: ['rgba(153, 102, 255, 1)',],
                                   backgroundColor: ['rgba(153, 102, 255, 0.2)',],
                               },
                               {
                                   label: 'sadness',
                                   data: sadness[i],
                                   borderWidth: 3,
                                   fill:false ,
                                   lineTension:0.1,
                                   borderColor: ['rgba(54, 162, 235, 1)',],
                                   backgroundColor: ['rgba(54, 162, 235, 0.2)',],
                               },
                               {
                                   label: 'neutral',
                                   data: neutral[i],
                                   borderWidth: 3,
                                   fill:false ,
                                   lineTension:0.1,
                                   borderColor: ['rgba(75, 192, 192, 1)',],
                                   backgroundColor: ['rgba(75, 192, 192, 0.2)',],
                               },]

                        },
                        options: {

                        }
                    });

            });




                
    });



        

</script>

php:

    public function courseq($id){


        $data1=Db::table('zanghua')->where('course_id',$id)->paginate(1);
        $happiness=Db::table('emotion_avg_courseid')->where('course_id',$id)->value('happiness_avg');
        $fear=Db::table('emotion_avg_courseid')->where('course_id',$id)->value('fear_avg');
        $surprise=Db::table('emotion_avg_courseid')->where('course_id',$id)->value('surprise_avg');
        $anger=Db::table('emotion_avg_courseid')->where('course_id',$id)->value('anger_avg');
        $disgust=Db::table('emotion_avg_courseid')->where('course_id',$id)->value('disgust_avg');
        $neutral=Db::table('emotion_avg_courseid')->where('course_id',$id)->value('neutral_avg');
        $sadness=Db::table('emotion_avg_courseid')->where('course_id',$id)->value('sadness_avg');


        $this->assign("data1",$data1);
        $this->assign("happiness",$happiness);
        $this->assign("fear",$fear);
        $this->assign("surprise",$surprise);
        $this->assign("anger",$anger);
        $this->assign("disgust",$disgust);
        $this->assign("neutral",$neutral);
        $this->assign("sadness",$sadness);
        $this->assign("id",$id);

   
        return view();
    }
 
    public function courseqq(){//course ajax 调用方法

        $h=Db::query("select hppiness_avg from emotion_avg_minute where course_id='".input('post.id')."' order by emotion_time2");
        $f=Db::query("select fear_avg from emotion_avg_minute where course_id='".input('post.id')."' order by emotion_time2");
        $su=Db::query("select surprise_avg from emotion_avg_minute where course_id='".input('post.id')."' order by emotion_time2");
        $a=Db::query("select anger_avg from emotion_avg_minute where course_id='".input('post.id')."' order by emotion_time2");
        $d=Db::query("select disgust_avg from emotion_avg_minute where course_id='".input('post.id')."' order by emotion_time2");
        $n=Db::query("select neutral_avg from emotion_avg_minute where course_id='".input('post.id')."' order by emotion_time2");
        $sa=Db::query("select sadness_avg from emotion_avg_minute where course_id='".input('post.id')."' order by emotion_time2");
        $hh=Db::query("select * from emotion_avg_minute where course_id='".input('post.id')."' order by emotion_time2");



        return $hh;
    }
实现方法比较本,但也比较有效,如果有时间会进行一定的优化,并且将其融入到Chart.js种。

猜你喜欢

转载自blog.csdn.net/qq_38530808/article/details/80654089