【问题标题】:How To Get Multiple Areas From Dragging Selection Box in HighMaps如何在 HighMaps 中通过拖动选择框获取多个区域
【发布时间】:2019-05-10 19:18:01
【问题描述】:

使用 HighMaps,我们试图让用户选择多个区域。如果用户单击然后按住 SHIFT 单击他们想要的其他区域,则此方法可以正常工作。在 HighCharts 中,我们可以使用可拖动的框来选择多个点(就像在散点图中一样)。我想允许这种类似的拖动来选择 HighMaps 中的选项。一个天真的例子是here。这是无效的。

我认为解决方案涉及鼠标悬停效果。这样当鼠标光标进入该区域时,整个区域都会被突出显示。如果我可以根据我的目的修改此代码,以便可拖动框的范围也将成为悬停的触发器。

chart: {
  events: {
    selection: function(event) {
      for (var i = 0; i < this.series[0].data.length; i++) {
        var point = this.series[0].data[i];
        if (point.x > event.xAxis[0].min &&
          point.x < event.xAxis[0].max &&
          point.y > event.yAxis[0].min &&
          point.y < event.yAxis[0].max) {
          point.select(true, true);
        }
      }
      return false;
    }
  },
  zoomType: 'xy'
},

【问题讨论】:

    标签: javascript highcharts geojson


    【解决方案1】:

    您需要比较正确的xy 值:

    events: {
        selection: function(event) {
            for (var i = 0; i < this.series[0].data.length; i++) {
                var point = this.series[0].data[i],
                    xAxis = event.xAxis[0],
                    yAxis = event.yAxis[0];
    
                if (point.graphic) {
                    if (point._minX > xAxis.min &&
                        point._maxX < xAxis.max &&
                        point._minY > yAxis.min &&
                        point._maxY < yAxis.max) {
    
                        point.select(true, true);
                    }
                }
            }
            return false;
        }
    }
    

    现场演示: https://jsfiddle.net/BlackLabel/m4ubd0z2/

    【讨论】:

    • 这几乎可以工作。它要求整个形状都在可拖动的框中。例如 - 尝试选择美国或尝试选择英国。我希望,如果可拖动框的任何部分与该区域的区域相交,它将被包含在选择中。
    • 嗨@wergeld,是的,我认为应该是这样的。请检查此示例:jsfiddle.net/BlackLabel/k5nduz1r
    • 那肯定更近了。我认为仍然有几个问题与使用 x/y 来表示国家的形状有关。例如,如果您在整个澳大利亚境内绘制一个框,它也会选择法国。同样,如果您完全在美国境内绘制一个框,它也会选择加拿大。
    • @wergeld,国家的形状不规则,很难将它们的坐标与选定的矩形进行比较。我试图将国家的形状简化为矩形,但是分开的路径存在问题。我们可以将分离的路径渲染为不同的元素,但结果无论如何都不会准确。
    • 是的,这是我的问题。我希望 highmaps 使用的悬停代码可能会有所帮助,但它只跟踪鼠标的单个 x/y。
    猜你喜欢
    • 1970-01-01
    • 2011-08-21
    • 2020-11-18
    • 2015-08-07
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多