x 轴上日期的滑块实现在 Highcharts 中无法正常工作

问题描述

我需要在折线图中添加一个滑块,允许用户跳转到 x 轴上的特定日期。我已经在图表中添加一个滑块,但由于某种原因它无法正常工作,我无法弄清楚是什么问题。有人可以帮忙吗?

https://jsfiddle.net/samwhite/t5sabeyv/1/

afterSetExtremes: function(e) {
                        $("#slider-range").slider("values",1975 + e.min);
                        $("#slider-range").slider("values",1,1975 + e.max);
                        $("#year").val(Math.round(e.min + 1975) +
                            " - " + Math.round(e.max + 1975));
                    }

$("#slider-range").slider({
      range: true,min: 1975,max: 2020,values: [1975,2020],slide: function(event,ui) {
        $("#year").val(ui.values[0] + " - " + ui.values[1]);
        chart.xAxis[0].setExtremes(ui.values[0] - 1975,ui.values[1] - 1975)
      }
    });
    $("#year").val($("#slider-range").slider("values",0) +
      " - " + $("#slider-range").slider("values",1));

这是我试图实现的相同行为的示例 https://jsfiddle.net/uvat8u05/27/

如有任何帮助,我们将不胜感激。

解决方法

您需要使用 Date.UTC 在图表内设置新的间隔。因此,您可以更新滑块函数内的代码,即:

slide: function(event,ui) {
         $("#amount").val(ui.values[0] + " - " + ui.values[1]);
        chart.xAxis[0].setExtremes(Date.UTC(ui.values[0],1),Date.UTC(ui.values[1],1) )            
 }

然后,您遇到错误图表未定义,所以我使用 this.axis.chart 访问系列和工具提示。

工作代码

$(function() {
  let result = {
    "data": [
      [31536000000.0,63.4],[34214400000.0,63.6],[36633600000.0,62.0],[39312000000.0,60.8],[41904000000.0,60.2],[44582400000.0,63.0],[47174400000.0,59.6],[49852800000.0,51.3],[52531200000.0,46.5],[55123200000.0,44.4],[57801600000.0,43.2],[60393600000.0,50.2],[63072000000.0,48.9],[65750400000.0,48.0],[68256000000.0,[70934400000.0,49.9],[73526400000.0,51.1],[76204800000.0,50.7],[78796800000.0,51.7],[81475200000.0,51.4],[84153600000.0,55.4],[86745600000.0,[89424000000.0,52.2],[92016000000.0,66.0],[94694400000.0,63.2],[97372800000.0,64.7],[99792000000.0,62.6],[102470400000.0,[105062400000.0,81.9],[128908800000.0,121.3],[131328000000.0,119.9],[134006400000.0,105.8],[136598400000.0,107.6],[139276800000.0,115.0],[141868800000.0,126.9],[144547200000.0,150.0],[147225600000.0,139.3],[149817600000.0,150.5],[152496000000.0,142.2],[155088000000.0,142.8],[157766400000.0,132.3],[160444800000.0,123.6],[162864000000.0,116.4],[165542400000.0,113.3],[233971200000.0,88.3],[236563200000.0,81.6],[239241600000.0,73.2],[241920000000.0,73.0],[244512000000.0,71.8],[247190400000.0,84.3],[249782400000.0,87.3],[252460800000.0,[255139200000.0,87.7],[257558400000.0,93.5],[260236800000.0,102.0],[262828800000.0,100.6],[265507200000.0,99.9],[268099200000.0,92.7],[270777600000.0,[273456000000.0,85.3],[276048000000.0,87.5],[278726400000.0,90.1],[281318400000.0,88.9],[283996800000.0,[286675200000.0,92.9],[289094400000.0,94.5],[291772800000.0,100.2],[294364800000.0,104.2],[297043200000.0,106.6],[299635200000.0,[302313600000.0,113.0],[304992000000.0,109.3],[307584000000.0,111.4],[336614400000.0,138.1],[339206400000.0,137.6],[341884800000.0,132.8],[344476800000.0,136.8],[347155200000.0,[349833600000.0,137.9],[352252800000.0,136.7],[354931200000.0,138.0],[357523200000.0,135.9],[360201600000.0,[362793600000.0,139.6],[365472000000.0,127.0],[368150400000.0,110.2],[370742400000.0,106.8],[373420800000.0,102.2],[376012800000.0,96.3],[378691200000.0,104.8],[381369600000.0,103.9],[383788800000.0,104.7],[386467200000.0,[389059200000.0,[391737600000.0,108.9],[394329600000.0,[397008000000.0,97.2],[399686400000.0,83.7],[402278400000.0,82.9],[404956800000.0,94.1],[407548800000.0,95.9],[410227200000.0,98.7],[412905600000.0,111.7],[415324800000.0,115.8],[418003200000.0,127.1],[420595200000.0,128.6],[423273600000.0,130.9],[425865600000.0,130.6],[428544000000.0,141.8],[431222400000.0,141.1],[578448000000.0,81.3],[581126400000.0,102.4],[583718400000.0,115.5],[586396800000.0,113.4],[589075200000.0,112.8],[591667200000.0,114.4],[594345600000.0,[596937600000.0,106.4],[599616000000.0,[602294400000.0,108.7],[604713600000.0,111.6],[607392000000.0,106.9],[609984000000.0,111.1],[612662400000.0,103.1],[615254400000.0,[617932800000.0,94.8],[620611200000.0,94.7],[623203200000.0,91.8],[625881600000.0,[628473600000.0,94.2],[631152000000.0,93.9],[633830400000.0,96.9],[636249600000.0,99.2],[638928000000.0,108.8],[641520000000.0,113.5],[644198400000.0,[646790400000.0,112.6],[649468800000.0,[652147200000.0,94.9],[654739200000.0,90.8],[873072000000.0,106.2],[875664000000.0,109.5],[878342400000.0,106.7],[880934400000.0,107.9],[883612800000.0,106.3],[886291200000.0,[888710400000.0,109.2],[891388800000.0,98.4],[893980800000.0,96.7],[896659200000.0,92.4],[899251200000.0,89.8],[901929600000.0,80.2],[904608000000.0,72.5],[907200000000.0,80.5],[909878400000.0,84.1],[912470400000.0,83.6],[915148800000.0,[917827200000.0,84.5],[920246400000.0,84.7],[922924800000.0,83.2],[925516800000.0,85.5],[928195200000.0,81.7],[930787200000.0,67.3],[933465600000.0,79.2],[936144000000.0,72.7],[938736000000.0,68.7],[941414400000.0,74.4],[944006400000.0,[946684800000.0,77.1],[949363200000.0,82.8],[951868800000.0,87.8],[954547200000.0,[957139200000.0,[959817600000.0,76.1],[962409600000.0,65.3],[965088000000.0,61.7],[967766400000.0,65.5],[970358400000.0,71.9],[973036800000.0,78.3],[975628800000.0,78.9],[978307200000.0,83.8],[980985600000.0,77.2],[983404800000.0,[986083200000.0,78.6],[988675200000.0,74.3],[991353600000.0,72.4],[993945600000.0,[996624000000.0,83.0],[999302400000.0,80.8],[1001894400000.0,75.8],[1004572800000.0,77.5],[1422748800000.0,152.9],[1425168000000.0,152.8],[1427846400000.0,149.8],[1430438400000.0,145.1],[1433116800000.0,[1435708800000.0,165.5],[1438387200000.0,148.4],[1441065600000.0,149.5],[1443657600000.0,147.2],[1446336000000.0,141.0],[1448928000000.0,[1451606400000.0,140.3],[1454284800000.0,141.5],[1456790400000.0,143.9],[1459468800000.0,141.9],[1462060800000.0,145.9],[1464739200000.0,168.2],[1467331200000.0,135.0],[1470009600000.0,124.7],[1472688000000.0,122.1],[1475280000000.0,125.5],[1477958400000.0,128.8],[1480550400000.0,134.9],[1483228800000.0,136.5],[1485907200000.0,142.4],[1488326400000.0,140.0],[1491004800000.0,139.9],[1493596800000.0,140.8],[1496275200000.0,143.2],[1498867200000.0,149.9],[1501545600000.0,132.1],[1504224000000.0,127.7],[1506816000000.0,126.7],[1509494400000.0,125.2],[1512086400000.0,[1514764800000.0,132.7],[1517443200000.0,[1519862400000.0,148.2],[1522540800000.0,[1525132800000.0,154.2],[1527811200000.0,144.9],[1530403200000.0,132.2],[1533081600000.0,[1535760000000.0,133.6],[1538352000000.0,133.8],[1541030400000.0,139.5],[1543622400000.0,145.6],[1546300800000.0,140.9],[1548979200000.0,146.2],[1551398400000.0,[1554076800000.0,[1593561600000.0,127.2],[1596240000000.0,120.2],[1598918400000.0,140.5],[1601510400000.0,152.0],[1604188800000.0,166.6],[1606780800000.0,170.7],[1609459200000.0,209.0],[1612137600000.0,224.8],[1614556800000.0,222.8],[1617235200000.0,239.5]
    ]
  };
  var $report = $('#report');
  var chart = $('#corn_container').highcharts({
    chart: {
      zoomType: 'x'
    },colors: ['#00429d'],title: {
      text: "Producer Price Index For Corn Products",align: 'left',style: {
        color: '#2B2B2B',fontSize: '20px',fontWeight: 'bold',}
    },subtitle: {
      text: 'Source: U.S. Bureau of Labor Statistics',style: {
        color: '#2B2B2B'
      },align: 'left'
    },credits: {
      enabled: false
    },xAxis: {
      type: 'datetime',min: Date.UTC(1970,1,max: Date.UTC(2021,12,tickInterval: 12 * 30 * 24 * 3600 * 1000 * 5,labels: {
        style: {
          color: '#2B2B2B'
        }
      },plotBands: [{
          color: '#C7EA46',from: Date.UTC(2020,2,to: Date.UTC(2050,1)
        },{
          color: '#DEE8E9',from: Date.UTC(1973,11,to: Date.UTC(1975,events: {
            click: function(e) {
              $report.html(e.type)
            },mouseover: function(e) {
       
       //use it like this ..to access series and chart..
       this.axis.chart.tooltip.refresh(this.axis.chart.series[1].points[2]);
              $report.html(`Recession period from November 1973 to February 1975`)
            },mouseout: function(e) {
              $report.html('')
            }
          },},from: Date.UTC(1980,to: Date.UTC(1980,7,mouseover: function(e) {
               this.axis.chart.tooltip.refresh(this.axis.chart.series[1].points[2]);
              $report.html(`Recession period from January 1980 to July 1980`)
            },from: Date.UTC(1981,8,to: Date.UTC(1982,mouseover: function(e) {
              this.axis.chart.tooltip.refresh(this.axis.chart.series[1].points[2]);
              $report.html(`Recession period from August 1981 to November 1982`)
            },from: Date.UTC(1990,to: Date.UTC(1991,3,mouseover: function(e) {
              this.axis.chart.tooltip.refresh(this.axis.chart.series[1].points[2]);
              $report.html(`Recession period from July 1990 to March 1991`)
            },from: Date.UTC(2001,4,to: Date.UTC(2001,mouseover: function(e) {
              this.axis.chart.tooltip.refresh(this.axis.chart.series[1].points[2]);
              $report.html(`Recession period from April 2001 to November 2001`)
            },from: Date.UTC(2007,to: Date.UTC(2009,6,mouseover: function(e) {
              this.axis.chart.tooltip.refresh(this.axis.chart.series[1].points[2]);
              $report.html(`Recession period from December 2007 to June 2009`)
            },}
      ],events: {
        afterSetExtremes: function(e) {
   //i don't thnk this needed
        }
      },minRange: 1,tickColor: '#2B2B2B',lineColor: '#2B2B2B',lineWidth: 1
    },yAxis: [{
      title: {
        text: 'Index 1982=100',style: {
          color: '#2B2B2B'
        }
      },min: 40,max: 320,tickInterval: 40,showFirstLabel: true,gridLineWidth: 0,minorGridLineWidth: 0,lineWidth: 1
    }],legend: {
      enabled: false,align: 'center',verticalAlign: 'bottom',borderWidth: 0
    },tooltip: {
      shared: true,crosshairs: true,outside: true,backgroundColor: '#fff',formatter: function() {
        var date = new Date(this.x);
        var formattedDate = moment(date).format('MMM YYYY');
        return '<strong>' + formattedDate + ':</strong> ' + this.y;
      }
    },plotOptions: {
      series: {
        cursor: 'pointer',marker: {
          lineWidth: 1
        }
      }
    },series: [{
        name: '',data: result.data
      },{
        name: "hiddenSeries",visible: false,color: '#4572A7',data: [0,150,0],pointStart: Date.UTC(2010,pointInterval: 24 * 3600 * 1000
      }
    ]
  },function(chart) {

    $("#slider-range").slider({
      range: true,min: 1975,max: 2020,values: [1975,2020],slide: function(event,ui) {
        $("#amount").val(ui.values[0] + " - " + ui.values[1]);
        chart.xAxis[0].setExtremes(Date.UTC(ui.values[0],1)) ///use data.utc to set extreme
      }
    });
    $("#amount").val($("#slider-range").slider("values",0) +
      " - " + $("#slider-range").slider("values",1));

  });
});
<script src="https://code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.2/jquery-ui.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/data.js"></script>
<script src="https://code.highcharts.com/modules/series-label.js"></script>
<link rel="stylesheet" type="text/css" href="https://code.jquery.com/ui/1.11.2/themes/ui-lightness/jquery-ui.css">
<div class="charting_div">
  <figure class="highcharts-figure">
    <div id="corn_container"></div>
    <div id="report"></div>
    <div style="margin: 20px 0px 0px 60px">


      <p>
        <label for="amount">Year(s):</label>
        <input type="text" id="amount" readonly style="border:0; color:#f6931f; font-weight:bold;">
      </p>

      <div id="slider-range"></div>
    </div>
  </figure>
</div>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...