因此,我有一个仅在用户区域下雪时才要激活的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>


如果单击测试,它将激活积雪。
当用户在下雪的时候,我该如何激活雪呢?谢谢

最佳答案

首先,您需要知道在用户所在地是否正在下雪。因此,您首先需要知道的是它们的位置。为此,您使用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 }


总的来说,它是这样的:


向GeoIP发送请求(ip 8.8.8.8在哪里?)
接收来自GeoIP的响应(时间为:1.2345 lon:1.432)
向DarkSky发送请求(今天几点:1.2345 lon:1.432?)
收到DarkSky的回应(雪!)
… 做东西 …


怎么样

为了成功完成此练习,您将需要熟悉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来搜索此关键字。但是从前两个开始。

祝好运!

07-24 18:07