2012-10-04 88 views
1

如何在鼠标悬停的饼图上调用鼠标单击事件? 我尝试了一些东西,但点击并不像我需要的那么顺利。 下面是代码示例:Highchart饼图点击悬停

plotOptions: { 
     pie: { 
      innerSize: '50%', 
      size: 100, 
      cursor: 'pointer', 
      dataLabels: false 
     }, 
     series: { 
      allowPointSelect: true, 
      type: 'pie', 
      name: 'Coordinates', 
      point: { 
       events: { 
        mouseOver: function (e) { 
         pieChart.tooltip.hide(); 
         var serie = this.series.data[this.x]; 
         var waitBeforeSelect = setTimeout(function() { 
          clearTimeout(waitBeforeSelect); 
          serie.select(); 
          serie.series.show(); 
          pieChart.tooltip.refresh(serie); 
         }, 500); 

         var serieName = serie.name; 
         var textToShow = serieName.substr(0, serieName.indexOf(';')); 
         $('#pieChartInfoText').children().text(textToShow); 
         $('#pieChartInfoText').children().css('color', serie.color); 
        }, 
        mouseOut: function() { 
         pieChart.tooltip.hide(); 
        } 
       } 
      } 
     } 
    }, 

回答

0

谢谢伊戈尔。 是的,它帮助我很多,但它作为我自己有一些缺点(如果您将鼠标悬停在图表多次,它会反复来回,尤其是在甜甜圈图表上可见),但我已修复它。这里是代码片段:

series: { 
      allowPointSelect: true, 
      type: 'pie', 
      name: 'Coordinates', 
      point: { 
       events: { 
        mouseOver: function (e) { 
         var serie = this.series.data[this.x]; 
         if ((undefined == previousSerie) || (serie != previousSerie)) { 
          var point = this; 

          if (!point.selected) { 
           pieChart.tooltip.shared = true; 

           var timeout = setTimeout(function() { 
            clearTimeout(timeout); 
            point.firePointEvent('click'); 

            pieChart.tooltip.shared = false; 
            pieChart.tooltip.refresh(point); 
           }, 700); 
          } 

          var serieName = serie.name; 
          var textToShow = serieName.substr(0, serieName.indexOf(';')); 
          $('#pieChartInfoText').children().text(textToShow); 
          $('#pieChartInfoText').children().css('color', serie.color); 
          previousSerie = serie; 
         } else { 
          previousSerie = serie; 
         } 
        }, 
        mouseOut: function() { 
         // pieChart.tooltip.hide(); 
        } 
       } 
      } 
     } 

再次感谢。

+0

你能像igor那样在小提琴上展示过吗?我不能跟着你。 – Rinzler

1

如果你真的想要做的只是选择mouseOver上的点(我需要做的事情导致我的问题),你可以在你的mouseOver函数中调用this.select(true)。这没有超时延迟,但仍然可以添加。