如何使用 google geochart 启用文本悬停事件

2024-03-14

是否可以将悬停效果与谷歌地理图表一起使用,以便地图上的选定区域也触发区域列表中该区域文本颜色的变化?

如果在地图地理图表上选择了蒙大拿州,我希望列表中的“蒙大拿州”一词具有不同的颜色。

我希望你明白我想要实现的目标。

function drawMap() {
  var data = google.visualization.arrayToDataTable([
    ['Province'],
    ['Montana'],
    ['Washington'],
    ['Oregon'],
    ['California'],
    ['New York'],
    ['Connecticut'],
    ['Alabama'],
    ['Idaho'],
    ['Nevada'],
    ['Nebraska'],
    ['Colorado'],
    ['Arizona'],
    ['New Mexico'],
    ['Texas'],
    ['Louisiana'],
    ['Oklahoma'],
    ['Virginia'],
    ['Kentucky'],
    ['Illinois'],
    ['Indiana'],
    ['Arkansas'],
    ['Louisiana'],
    ['Mississippi'],
    ['Georgia'],
    ['Florida'],
    ['Missouri'],
    ['Iowa'],
    ['Minnesota'],
    ['South Dakota'],
    ['North Dakota'],
    ['Wyoming'],
    ['Utah'],
    ['Illinois'],
    ['Maine'],
    ['Vermont'],
    ['Massachussets'],
    ['Maryland'],
    ['Delaware'],
    ['New Jersey'],
    ['South Carolina'],
    ['North Carolina'],
    ['Michigan'],
    ['Wisconsin'],
    ['Kansas'],
    ['Alaska'],
    ['Hawaii'],
    ['Rhode Island'],
    ['District of Colombia'],
    ['Ohio'],
    ['West Virginia'],
    ['Pennsylvania'],
    ['Tennessee'],
    ['New Hampshire']
  ]);

  var options = {
    region: 'US',
    backgroundColor: '#eee',
    datalessRegionColor: '#ffc801',
    width: 468,
    height: 265,
    resolution: 'provinces',
  };
  var container = document.getElementById('mapcontainer');
  var chart = new google.visualization.GeoChart(container);

  function myClickHandler() {
    var selection = chart.getSelection();
    var message = '';
    for (var i = 0; i < selection.length; i++) {
      var item = selection[i];
      message += '{row:' + item.row + ',column:' + item.column + '}';
      if (item.row != null) {
        message += '{row:' + item.row + '}';
      }
    }
    if (message == '') {
      message = 'nothing';
    }

    if (item.row == 0) {
      window.location = "/montana";
    }
    if (item.row == 2) {
      window.location = "/oregon";
    }
    if (item.row == 3) {
      window.location = "/california";
    }
    if (item.row == 4) {
      window.location = "/new_york";
    }
    if (item.row == 6) {
      window.location = "/alabama";
    }
    if (item.row == 7) {
      window.location = "/idaho";
    }
    if (item.row == 8) {
      window.location = "/nevada";
    }
    if (item.row == 9) {
      window.location = "/nebraska";
    }
    if (item.row == 5) {
      window.location = "/connecticut";
    }
    if (item.row == 1) {
      window.location = "/washington";
    }
    if (item.row == 10) {
      window.location = "/colorado";
    }
    if (item.row == 11) {
      window.location = "/arizona";
    }
    if (item.row == 12) {
      window.location = "/new_mexico";
    }
    if (item.row == 13) {
      window.location = "/texas";
    }
    if (item.row == 14) {
      window.location = "/louisaina";
    }
    if (item.row == 15) {
      window.location = "/oklahoma";
    }
    if (item.row == 16) {
      window.location = "/virginia";
    }
    if (item.row == 17) {
      window.location = "/kentucky";
    }
    if (item.row == 18) {
      window.location = "/illinois";
    }
    if (item.row == 19) {
      window.location = "/indiana";
    }
    if (item.row == 20) {
      window.location = "/arkansas";
    }
    if (item.row == 21) {
      window.location = "/louisiana";
    }
    if (item.row == 22) {
      window.location = "/mississippi";
    }
    if (item.row == 23) {
      window.location = "/georgia";
    }
    if (item.row == 24) {
      window.location = "/florida";
    }
    if (item.row == 25) {
      window.location = "/missouri";
    }
    if (item.row == 26) {
      window.location = "/iowa";
    }
    if (item.row == 27) {
      window.location = "/minnesota";
    }
    if (item.row == 28) {
      window.location = "/south_dakota";
    }
    if (item.row == 29) {
      window.location = "/north_dakota";
    }
    if (item.row == 30) {
      window.location = "/wyoming";
    }
    if (item.row == 31) {
      window.location = "/utah";
    }
    if (item.row == 32) {
      window.location = "/illinois";
    }
    if (item.row == 33) {
      window.location = "/maine";
    }
    if (item.row == 34) {
      window.location = "/vermont";
    }
    if (item.row == 35) {
      window.location = "/massachussets";
    }
    if (item.row == 36) {
      window.location = "/maryland";
    }
    if (item.row == 37) {
      window.location = "/delaware";
    }
    if (item.row == 38) {
      window.location = "/new_jersey";
    }
    if (item.row == 39) {
      window.location = "/south_carolina";
    }
    if (item.row == 40) {
      window.location = "/north_carolina";
    }
    if (item.row == 41) {
      window.location = "/michigan";
    }
    if (item.row == 42) {
      window.location = "/wisconsin";
    }
    if (item.row == 43) {
      window.location = "/kansas";
    }
    if (item.row == 44) {
      window.location = "/alaska";
    }
    if (item.row == 45) {
      window.location = "/hawaii";
    }
    if (item.row == 46) {
      window.location = "/rhode_island";
    }
    if (item.row == 47) {
      window.location = "/tamil_nadu/";
    }
    if (item.row == 48) {
      window.location = "/ohio";
    }
    if (item.row == 49) {
      window.location = "/west_virginia";
    }
    if (item.row == 50) {
      window.location = "/pennsylvania";
    }
    if (item.row == 51) {
      window.location = "/tennessee";
    }
    if (item.row == 52) {
      window.location = "/new_hampshire";
    }
  }

  google.visualization.events.addListener(chart, 'select', myClickHandler);
  chart.draw(data, options);
}
google.load('visualization', '1', {
  packages: ['geochart'],
  callback: drawMap
});
#regions {
  display: float:left;
}
<script type='text/javascript' src='http://www.google.com/jsapi'></script><table><tr><td><div id="mapcontainer">

</td><td>
  <ul class="regions">
    <li><a id="region_13" class="region" href="/montana">Montana</a></li>
    <li><a id="region_14" class="region" href="/nebraska">Nebraska</a>
    </li>
    <li><a id="region_15" class="region" href="/nevada">Nevada</a>
    </li>
    <li><a id="region_12" class="region" href="/new_hampshire">New Hampshire</a></li>

    <li><a id="region_14" class="region" href="/minnesota">Minnesota</a>
    </li>
    <li><a id="region_15" class="region" href="/mississippi">Mississippi</a>
    </li>
    <li><a id="region_12" class="region" href="/missouri">Missouri</a></li>

  </ul>
  </td></tr></table>

1)GeoChart 缺少其他 google 图表的许多事件和方法,
包括'onmouseover'

要手动实现,我们可以使用常规dom事件-->'mouseover'

当它发生时,派遣一个dom 'click' event

这将触发chart's 'select' event

the 'select'事件可用于获取被单击或“鼠标悬停”的区域的值,

然后可以用来突出显示列表条目

唯一的问题是将“鼠标悬停单击”事件与真正的单击事件分开

我们可以使用一个变量来保存最后发生的事件,

然后检查图表中的变量'select' event

2) 'select' event

对于此图表,在任何给定时刻只能选择一个实体,

无需循环选择数组

此外,当单击一个区域时,它是selected

当再次点击同一区域时,未选择的

意思是chart.getSelection()将返回一个空数组

当“鼠标悬停单击”事件发生时,我们需要清除图表的选择

清除选择将确保在真正的单击事件发生时选择该区域

3)其他注释...

as of 2016 年 9 月 12 日 https://developers.google.com/chart/interactive/docs/release_notes#september-12-2016,GeoChart 不再要求您包含jsapi装载机。

推荐使用较新的库loader.js反而

根据发行说明 https://developers.google.com/chart/interactive/docs/release_notes...

仍可通过以下方式获取的 Google Charts 版本jsapiloader 不再持续更新。请使用新的gstaticloader.js今后。

这只会改变load陈述

另外,您可以使用数据表查找所选区域的值,

不需要使用一堆if确定值的语句

4)请参阅以下工作片段...

数据表用于构建区域链接列表

当某个区域“鼠标悬停”时,列表中的链接将突出显示

当“单击”某个区域时,它的名称将被发送到控制台,

可以很容易地替换为window.location = ...

function drawMap() {
  var data = google.visualization.arrayToDataTable([
    ['Province'],
    ['Montana'],
    ['Washington'],
    ['Oregon'],
    ['California'],
    ['New York'],
    ['Connecticut'],
    ['Alabama'],
    ['Idaho'],
    ['Nevada'],
    ['Nebraska'],
    ['Colorado'],
    ['Arizona'],
    ['New Mexico'],
    ['Texas'],
    ['Louisiana'],
    ['Oklahoma'],
    ['Virginia'],
    ['Kentucky'],
    ['Illinois'],
    ['Indiana'],
    ['Arkansas'],
    ['Louisiana'],
    ['Mississippi'],
    ['Georgia'],
    ['Florida'],
    ['Missouri'],
    ['Iowa'],
    ['Minnesota'],
    ['South Dakota'],
    ['North Dakota'],
    ['Wyoming'],
    ['Utah'],
    ['Illinois'],
    ['Maine'],
    ['Vermont'],
    ['Massachussets'],
    ['Maryland'],
    ['Delaware'],
    ['New Jersey'],
    ['South Carolina'],
    ['North Carolina'],
    ['Michigan'],
    ['Wisconsin'],
    ['Kansas'],
    ['Alaska'],
    ['Hawaii'],
    ['Rhode Island'],
    ['District of Colombia'],
    ['Ohio'],
    ['West Virginia'],
    ['Pennsylvania'],
    ['Tennessee'],
    ['New Hampshire']
  ]);
  data.sort([{column: 0}]);

  var options = {
    region: 'US',
    backgroundColor: '#eee',
    datalessRegionColor: '#ffc801',
    width: 360,
    height: 265,
    resolution: 'provinces',
  };

  var container = document.getElementById('mapcontainer');
  var chart = new google.visualization.GeoChart(container);

  google.visualization.events.addListener(chart, 'select', myClickHandler);

  // use data table to build regions list
  var regions = document.getElementById('regions');
  for (var i = 0; i < data.getNumberOfRows(); i++) {
    regions.insertAdjacentHTML(
      'beforeEnd',
      '<li data-row="' + i + '"><a class="region" href="/' + data.getValue(i, 0) + '">' + data.getValue(i, 0) + '</a></li>'
    );
  }

  // track events
  var lastEvent = null;
  container.addEventListener('click', function (e) {
    lastEvent = e;
  }, false);
  container.addEventListener('mouseover', function (e) {
    lastEvent = e;
    // dispatch click event to get hover value
    var event = document.createEvent('SVGEvents');
    event.initEvent('click', true, true);
    e.target.dispatchEvent(event);
  }, false);

  function myClickHandler() {
    var selection = chart.getSelection();
    var message = '';
    if (selection.length > 0) {
      if (selection[0].row !== null) {
        if (lastEvent.type === 'mouseover') {
          // mouseover
          var regionLinks = regions.getElementsByTagName('li');
          for (var i = 0; i < regionLinks.length; i++) {
            var regionRow = parseInt(regionLinks[i].getAttribute('data-row'));
            regionLinks[i].style.backgroundColor = (regionRow === selection[0].row) ? 'cyan' : null;
            chart.setSelection([]);
          }
        } else {
          // click
          console.log("/" + data.getValue(selection[0].row, 0));
          //window.location = "/" + data.getValue(selection[0].row, 0);
        }
      }
    }
  }

  chart.draw(data, options);
}
google.charts.load('current', {
  packages:['geochart'],
  callback: drawMap
});
div {
  display: inline-block;
  vertical-align: top;
}
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="mapcontainer"></div>
<div id="tablecontainer">
  <ul class="regions" id="regions"></ul>
</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 google geochart 启用文本悬停事件 的相关文章

  • 检查 DOM 元素是否为复选框

    如何检查给定的 DOM 元素是否为复选框 设想 我有一组文本框和复选框 其中的值是动态分配的 我没有办法识别 DOM 元素是复选框还是文本框 只使用普通的 javascript 你就可以做到 if el type el type check
  • 在 TCPDF 中设置背景颜色

    我已经手动设置了第一页的背景颜色 如下所示 pdf gt AddPage pdf gt SetFillColor 52 21 0 76 pdf gt Rect 0 0 pdf gt getPageWidth pdf gt getPageHe
  • 通知用户消息仍在输入中

    我正在使用 Laravel 5 6 7 Socket IO 和 vue js 我没有使用 Pusher 和 redis 下面是我的代码 用于向与我一对一聊天的用户发送消息 var url http localhost 6001 apps M
  • Django css文件缓存

    我有一个 css 文件 我想修改它以满足我的需要 问题是它似乎被缓存在某个地方 因为无论我在 css 文件中做什么 我都看不到更改 我确信我指向了正确的文件 因为现在我已经对其进行了修改 并且它有效 有什么设置可以关闭缓存吗 谢谢 正如本文
  • 呈现为 Flexbox 的有序列表不显示项目符号/小数(项目也呈现为 Flexbox)

    我有一个有序列表 ol 有它的display属性设置为flex 列表项也呈现为弹性框 这样做会导致项目符号 数字 不再显示 有什么办法可以让项目符号显示在ol有课 questions questions likert 在40px的区域pad
  • ngModel.$parsers 忽略 ng-model 值末尾的空格

    我有这样的指令 directive noWhitespace parse function parse return restrict A require ngModel link function scope element attrs
  • 父>子CSS选择器

    我经常使用这个CSS选择器parent gt child 我的设计在 Mozilla 和 Opera 中看起来不错 但在 IE 中 就很糟糕了 我知道 gt 在 IE 中无法识别 但是 IE 中的替代方案是什么 一种替代方法是使用通用选择器
  • 在 JavaScript 中比较表单中的两个数字

    当我尝试比较不同的数字时 数字发生变化 但文本部分保持不变 这只发生在较大 较小的情况下 而不会发生在 NaN 或相等的情况下 这是我的代码 function check var a document getElementById a va
  • Telegram 授权无默认按钮

    使用 Telegram 第 3 方授权的唯一有记录的方法是使用其提供的脚本https core telegram org widgets login https core telegram org widgets login 这个脚本 正如
  • Bing.com 如何创建放大的缩略图?

    当我使用 Bing com 搜索图像时 我发现它们的图像经过精心裁剪和排序 当您将鼠标放在图像上时 会弹出另一个窗口 其中显示放大的图像 我想在我的程序中做同样的事情 我检查了他们页面的源代码 他们正在使用 javascript 但我仍然不
  • 使用 Javascript / Jquery 的本地存储(不使用 HTML5)

    我想在 javascript 或 jquery 中复制本地存储概念 类似于 HTML5 但不幸的是我不知道如何开始 任何人都可以建议如何使用 javascript 或 jquery 实现本地存储 不使用 HTML5 这是一个有点愚蠢的差事
  • CSS:将加载指示器放置在屏幕中央

    如何将加载指示器放置在屏幕中央 目前我正在使用一个小占位符 它似乎工作得很好 但是 当我向下滚动时 加载指示器保持在该预定义位置 我怎样才能让它跟随滚动 使其始终位于顶部 busy position absolute left 50 top
  • 光滑的轮播缓动示例

    我正在使用 Slick Carousel http kenwheeler github io slick http kenwheeler github io slick 但不知道如何合并不同的幻灯片切换 有人有例子可以分享吗 这是我目前拥有
  • 在 vue.js 模板中包含外部脚本

    我是 Vue js 和 web pack 的新手 所以我决定使用 vue cli webpack 来构建初始应用程序 我试图包含一个外部脚本 例如组件 不需要的模板中 但是 Vue 警告这是不允许的 我的 index html 文件与最初生
  • Postman - 如何计算 JSON 响应中特定对象的出现次数

    我是 JSON 和 Postman 的新手 我相信我正在尝试做一些非常简单的事情 我创建了一个 GET 请求 它将获得如下所示的 JSON 响应 在下面的例子中我想得到count响应中所有 IsArchived 属性 这些属性的数量因响应而
  • Excel 类似 HTML 表格,可在 x 轴(完整表格)和 y 轴(标题固定)上滚动

    我想建立一个具有固定宽度列的表格 在大多数情况下 表数据会水平和垂直溢出 如果列的宽度大于视图宽度 则需要水平滚动条来滚动并查看所有表列 同时滚动标题和数据 如果数据的高度大于可用视图 则会出现垂直滚动框 但在滚动时保持标题固定 以便用户关
  • 在声明组件选择器时添加指令 - Angular 7

    我正在学习 Angular 并通过单击按钮动态创建组件 我正在尝试使用 Angular Material 的拖放功能来拖动这些创建的组件以对它们进行排序 我的基本组件 html 中有以下代码 div style margin 20px di
  • ThreeJS无法加载Json文件

    首先 我已经读过这个问题 https stackoverflow com questions 17201888 three js exporter export object not working with jsonloader r58没
  • Dojo/on 和捕获阶段

    有没有办法用 dojo on 在捕获阶段 而不是冒泡阶段 触发事件 我最终在这里寻找有关 on 的前身 dojo connect 的信息 就其价值而言 dojo connect 似乎不支持捕获阶段的事件侦听器 它的工作原理是将事件处理程序作
  • FullCalendar 检查选择日是否有活动?

    我正在使用 Full Calendar js 插件 到目前为止一切顺利 但我想检查开始和结束之间的选择是否有事件 我只需要返回 true 或 false 基本上 如果日期选择中已经存在事件 我想阻止用户创建事件 var calendar c

随机推荐

  • 将现有文件夹放入存储库

    我认为直接在记事本中修改文件可能很危险 是时候进行一些适当的源代码控制了 我对源代码控制很陌生 我已在我的服务器上安装了 VisualSVN 服务器 并在我的客户端计算机上安装了 TortoiseSVN 我可以很好地创建新文件夹 检查它们等
  • 如何在Python中简单地计算时间序列的滚动/移动方差?

    我有一个简单的时间序列 我正在努力估计移动窗口内的方差 更具体地说 我无法弄清楚与实现滑动窗口函数的方式有关的一些问题 例如 当使用 NumPy 且窗口大小 20 时 def rolling window a window shape a
  • 为什么我必须将 async 关键字添加到具有 wait 关键字的函数中?

    我只想等待进程完成 不想使函数异步 请参阅下面的代码 我必须使 getUserList 异步 因为函数中有一个await 关键字 因此 我还必须编写 await UsersService getUserList 之类的内容来执行该方法 并且
  • Git/Eclipse 工作流程

    我使用 Eclipse 来编辑 Java 并使用 Git 作为我的 VCS 我应该将本地存储库放在工作区中还是工作区之外 并在每次要提交时复制文件 我知道我可以通过各种方式做到这一点 但我是 Git 新手 想知道哪种方式更好 目前最好的做法
  • 带默认子级的 Vue.js 嵌套路由

    我对 Vue js 2 中的默认子路由有疑问 当我最初访问 localhost listings 时 它会正确加载 index vue 和 map vue 作为子项 当我使用 router link 导航到 localhost listin
  • 如何在加载网页之前运行内容脚本?

    我想更改一些 dom 内容 使所有输入字段值都是 在用户可以看到网页之前先对其进行显示 我该怎么做 有什么办法可以做到这一点吗 谢谢 您需要一个运行于文档开始 https developer chrome com extensions co
  • 如何查找具有相同字段的mongo文档

    我有一个 mongo 集合 我需要在该集合中查找文档 其中字段名称和地址相等 我找了很多 只能找到MongoDb 比较 2 个字段的查询条件 https stackoverflow com questions 4442453 mongodb
  • dig (DNS Lookup) 指定 Windows 上的 DNS 服务器

    在Linux中 我会使用dig使用以下命令指定 DNS 服务器 127 0 0 1 dig google com 127 0 0 1 我安装了 Windows 的绑定工具 choco install bind toolsonly 我怎样才能
  • 带 Spring Boot 项目的 Modbus 脉冲线圈

    必须实施呼叫数字IO with Modbus协议 on 春季启动项目构建者Maven 它应该是在身体上有一定持续时间的脉冲呼叫 例如 5 秒等 以下是规范中的一个片段 关于响应和错误的更多信息 看来这个呼叫应用程序应该表现得像一个大师 在这
  • Linux:在有限空间上使用分割

    我的 Linux 机器上有一个巨大的文件 该文件约为 20GB 我的盒子上的空间约为 25GB 我想将文件分成约 100mb 的部分 我知道有一个 分割 命令 但它保留了原始文件 我没有足够的空间来保存原件 关于如何实现这一点有什么想法吗
  • 如何在 Node.js Express 中检查会话?

    我尝试检查 Express 4 中的会话是否存在 if req session user undefined 它给了我错误 Cannot read property user of undefined 如何检查会话中是否存在值 来自sour
  • Python 类中的属性是否共享? [复制]

    这个问题在这里已经有答案了 下面的代码让我很困扰 class mytest name test1 tricks list def init self name self name name self tricks name self tri
  • P_SHA1算法在PHP中的实现

    我们正在尝试实现一个函数 P SHA1 意味着 PHP 用 Python 编写的函数的模式 但不幸的是 有些东西无法正常工作 JAVA中的实现函数如下 http ws apache org wss4j xref org apache ws
  • .wav 从 AVAssetWritter ios 转换为任何压缩形式

    那么我现在面临的问题是尺寸问题 我允许用户从他们的库中选择一首歌曲 然后将其切成碎片 然后能够在启用文件共享的情况下在计算机上使用 wav 或 mp3 文件 基本上我正在使用以下 AVAssetWritter 选项 并且我不断收到一个巨大的
  • ggplot2:仅显示一组中的文本标签

    我的设置 我有一些篮球运动员和他们的统计数据 library tidyverse df lt tibble season c 2010 2011 2012 2013 2014 2010 2011 2012 2013 2014 player
  • 使用 XmlSerializer 的多个命名空间

    这是场景 我有嵌套类 需要在 xml 文档中序列化 XmlRoot Namespace http www foo bar myschema public class root XmlAttribute public string versi
  • `文件中的错误(con,“r”):无法通过运行 BRugsFit() 打开连接

    我有一个错误关于Error in file con r cannot open the connection从运行 BRugsFit 开始 我假设所有输入参数都很好 调用代码是 gt output BRugsFit model txt da
  • Visual C++ 无法推导模板模板参数

    以下 C 17 代码片段在 GCC 和 CLang 中进行编译 但在 Visual C 中会出现以下错误
  • R 中的正则表达式:匹配节点词的搭配

    我想在文本字符串中找到单词的搭配 单词的搭配是指在该单词之前或之后与其同时出现的单词 这是一个虚构的例子 GO lt c This little sentence went on and on It was going on for qui
  • 如何使用 google geochart 启用文本悬停事件

    是否可以将悬停效果与谷歌地理图表一起使用 以便地图上的选定区域也触发区域列表中该区域文本颜色的变化 如果在地图地理图表上选择了蒙大拿州 我希望列表中的 蒙大拿州 一词具有不同的颜色 我希望你明白我想要实现的目标 function drawM