/** * Created by zsq on 2016/11/13. */ //调用jsonp函数请求当前所在城市 // jsonp('https://api.map.baidu.com/api?v=2.0&ak=Dv1NMU23dh1sGS9n2tUouDEYY96Dfzh3&s=1&callback=loadCityWeather'); // // (function ($) { // $.getUrlParam = function (name) { // var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); // var r = window.location.search.substr(1).match(reg); // if (r != null) return unescape(r[2]); return null; // } // })(jQuery); function loadCityWeather() { var authCid = $.getUrlParam("auth_cid") if (authCid == "" || authCid == null) { authCid = 0 } $.ajax({ url: "/web/area/getLoginUserInfo.json", data: { authCid: authCid }, dataType: "json", success: function (jsonData) { if (jsonData.data != null) { //请求登录账号设置地区的天气数据 var cityName = jsonData.data.title if (cityName.endWith("市") || cityName.endWith("县")) { cityName = cityName.substring(0, cityName.length - 1) } jsonp(createUrl(cityName)) } else { getCity() } }, }) } // 数据请求函数 function jsonp(url) { var script = document.createElement("script") script.src = url document.body.insertBefore(script, document.body.firstChild) document.body.removeChild(script) } function getCity() { function city(result) { //去掉城市名后的"市" var city = result.name.substring(0, result.name.length - 1) //请求当前城市的天气数据 jsonp(createUrl(city)) } var cityName = new BMap.LocalCity() cityName.get(city) } //数据请求成功回调函数,用于将获取到的数据放入页面相应位置 function getWeather(response) { var oSpan = document.getElementsByClassName("info") var data = response.result //如果获取到的天气为空(地区信息有错,查不到天气)则获取当前网络IP的天气情况 if (data == null || data == "undefined") { getCity() } oSpan[0].innerHTML = data[0].citynm oSpan[1].innerHTML = data[0].weather oSpan[2].innerHTML = data[0].temperature oSpan[3].innerHTML = data[0].winp //根据返回数据,替换不同天气图片 changeImg(response) } //根据获取到的数据更改页面中相应的图片 function changeImg(data) { var firstImg = document.getElementsByTagName("img")[0] var firstWeatherId = data.result[0].weatid chooseImg(firstWeatherId, firstImg) } //选择图片 function chooseImg(id, index) { switch (id) { case "1": index.src = "images/weather_icon/1.png" break case "2": index.src = "images/weather_icon/2.png" break case "3": index.src = "images/weather_icon/3.png" break case "4": case "5": case "6": case "8": case "9": case "10": case "11": case "12": case "13": case "20": case "22": case "23": case "24": case "25": case "26": index.src = "images/weather_icon/4.png" break case "7": index.src = "images/weather_icon/6.png" break case "14": case "15": case "16": case "17": case "18": case "27": case "28": case "29": index.src = "images/weather_icon/5.png" break case "19": case "21": case "30": case "31": case "32": case "33": index.src = "images/weather_icon/7.png" break default: index.src = "images/weather_icon/8.png" } } String.prototype.endWith = function (s) { if (s == null || s == "" || this.length == 0 || s.length > this.length) return false if (this.substring(this.length - s.length) == s) return true else return false return true } //根据城市名创建请求数据及url function createUrl(cname) { var cityName = "" if (arguments.length == 0) { cityName = cname } else { cityName = arguments[0] } var urls = "https://sapi.k780.com/?app=weather.future&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json&jsoncallback=getWeather&weaid=" + encodeURI(cityName) return urls } //高德地图获取天气 function getAdcode() { return new Promise((resolve, reject) => { $.ajax({ url: "https://restapi.amap.com/v3/ip?key=ee001a52e68437f9a030eaa01c3a9646", type: "get", dataType: "json", success: function (data) { resolve(data) }, error: function (data) { reject(data) }, }) }) } function getGdWeather(mode) { getAdcode().then((adcode) => { if (adcode && adcode.status == "1") { $.ajax({ url: `https://restapi.amap.com/v3/weather/weatherInfo?key=ee001a52e68437f9a030eaa01c3a9646&city=${adcode.adcode}&extensions=base`, type: "get", dataType: "json", success: function (data) { if (data && data.status == "1") { var weather = data.lives[0] let nowText = new Date(weather.reporttime).toLocaleDateString("zh").replaceAll("/", "-") if (mode == "classic") { var name = weather.city + " " + nowText + " " + weather.temperature + "°C" + " " + weather.winddirection + " " + weather.windpower + "级" $("#weatherWX").html(name) } else { var oSpan = document.getElementsByClassName("info") oSpan[0].innerHTML = weather.city oSpan[1].innerHTML = nowText oSpan[2].innerHTML = weather.temperature + "°C" oSpan[3].innerHTML = weather.winddirection + " " + weather.windpower + "级" var firstImg = document.getElementsByTagName("img")[0] var code = getWeatherImage(weather.weather) firstImg.src = "./images/weather_icon/" + encodeURI(code) + ".png" } } }, error: function (data) { console.error(data) }, }) } }) } const iconWeatherMap = { 风: ["有风", "平静", "微风", "和风", "清风", "强风/劲风", "疾风", "大风", "烈风", "风暴", "狂爆风", "飓风", "热带风暴", "龙卷风"], 多云: ["少云", "晴间多云", "多云"], 雪: ["雪", "阵雪", "小雪", "中雪", "大雪", "暴雪", "小雪-中雪", "中雪-大雪", "大雪-暴雪", "冷"], 雾: ["浮尘", "扬沙", "沙尘暴", "强沙尘暴", "雾", "浓雾", "强浓雾", "轻雾", "大雾", "特强浓雾"], 晴: ["晴", "热"], 雨夹雪: ["雨雪天气", "雨夹雪", "阵雨夹雪"], 雨: ["阵雨", "雷阵雨", "雷阵雨并伴有冰雹", "小雨", "中雨", "大雨", "暴雨", "大暴雨", "特大暴雨", "强阵雨", "强雷阵雨", "极端降雨", "毛毛雨/细雨", "雨", "小雨-中雨", "中雨-大雨", "大雨-暴雨", "暴雨-大暴雨", "大暴雨-特大暴雨", "冻雨"], 阴: ["阴", "霾", "中度霾", "重度霾", "严重霾", "未知"], } function getWeatherImage(weather) { for (const weatherKey in iconWeatherMap) { if (Object.hasOwnProperty.call(iconWeatherMap, weatherKey)) { const weatherNames = iconWeatherMap[weatherKey] const findWeatherItem = weatherNames.find((name) => weather === name) // 如果找了某一类的图标了,那重新赋值url if (findWeatherItem) { return weatherKey } } } }