【问题标题】:Activate js when snowing in users location在用户位置下雪时激活 js
【发布时间】:2017-03-23 21:45:35
【问题描述】:

所以我有 js,我只想在用户区下雪时激活它。

这是一个 JSFiddle Here

<h1 onclick="snowStorm.toggleSnow();">
text
</h1>

<script src="https://web.archive.org/web/20161109225359/http://live.superedu.ml/snow.js"></script>
<script>
snowStorm.followMouse = false;
    snowStorm.freezeOnBlur = true;
    snowStorm.autoStart = false;

</script>

如果你点击测试它会激活雪。 当用户所在的地方下雪时,我将如何使它激活雪。谢谢

【问题讨论】:

  • 如果你想知道为什么我使用 webarchive 它是因为我使用的是我自己修改过的代码
  • 我猜你得看看他们的窗外是否下雪
  • 您是否在使用任何类型的天气 API?如果满足某些条件,您可以从他们所在的区域获取用户数据并触发事件以开始下雪。

标签: javascript jquery html weather-api


【解决方案1】:

首先,您需要知道用户所在位置是否下雪。因此,您首先需要知道的是它们在哪里。为此,您使用 IP 地理定位服务。去谷歌上查询。其中之一是https://freegeoip.net/

接下来,您需要向气象服务部门询问天气情况。 查看https://darksky.net/dev/docs/forecast

要向 DarkSky API 之类的服务询问某些内容,您需要告诉他们您对预测感兴趣的位置,即您使用从上述地理定位服务收到的位置坐标的位置。

然后您将收到来自 DarkSky API 的响应“对象”,其中将包含一堆信息,其中降水信息如下所述:

precipType 可选
在给定时间发生的降水类型。如果已定义,此属性将具有以下值之一:"rain""snow""sleet"(分别指冻雨、冰粒和 “wintery mix”)。 (如果precipIntensity 为零,则不会定义此属性。)
https://darksky.net/dev/docs/response

之后,您可以按照以下方式编写代码

if (data.precipType === 'snow') { // do something }

总体来说是这样的:

  1. 向 GeoIP 发送请求(ip 8.8.8.8 在哪里?)
  2. 接收来自 GeoIP 的响应(位于 lat:1.2345 lon:1.432)
  3. 向 DarkSky 发送请求(lat:1.2345 lon:1.432 今天天气如何?)
  4. 收到来自 DarkSky 的回复(下雪了!)
  5. ……做事……

如何

为了在本练习中取得成功,您需要熟悉一点 JS 中的基本 异步编程,以及如何发送 AJAX 请求,并使用您收到的回复。

简而言之,您需要学习如何编写能够仅在功能 A 完成后才能启动功能 B 的代码(在未知的时间之后,例如通过网络请求时)

所以事情看起来更像这样:

1. Send request to GeoIP (where is ip 8.8.8.8 ?)
  2. Receive response from GeoIP (it's at lat:1.2345 lon:1.432)
    3. Send request to DarkSky (what's the weather today at lat:1.2345 lon:1.432 ?)
      4. Receive response from DarkSky (snow!)
        5. … do stuff …

搜索此内容的好关键字是 jQuery AJAX、回调和更高级的 Promises。但从前两个开始。

祝你好运!

【讨论】:

  • 谢谢你,这会很有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-22
相关资源
最近更新 更多