日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

原生JS實現天氣預報

瀏覽:223日期:2024-05-04 10:55:57

本文實例為大家分享了JS實現天氣預報的具體代碼,供大家參考,具體內容如下

HTML代碼

<!doctype html><html lang='en'><head> <meta charset='UTF-8'> <meta name='viewport' content='width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0'> <meta http-equiv='X-UA-Compatible' content='ie=edge'> <title>Document</title> <link rel='stylesheet' href='http://m.b3g6.com/bcjs/tianqi.css' > <link rel='stylesheet' href='http://m.b3g6.com/bcjs/iconfont/iconfont.css' ></head><body> <!-- 搜索 --> <div class='search'> <span>Tq</span> <form target='sou' id='search_from'> <input type='search' placeholder='輸入搜索的城市'> <iframe name='sou' style = 'display: none'></iframe> </form> <div class='search-btn'><img src='http://m.b3g6.com/bcjs/images/search.png' alt=''></div> </div> <!-- 歷史記錄--> <div class='history'> <div class='la'> <span>歷史查詢</span> <img src='http://m.b3g6.com/bcjs/images/more.png' alt=''> </div> <div class='historys'> <!-- 歷史記錄 --> </div> <div class='clearbtn'> 清除歷史記錄 </div> </div> <!-- 今日天氣 --> <div class='information'> </div> <!-- 天氣預報 --> <div class='forecast'> </div> <!-- 生活指數 --> <div class='lifestyle'> <h2>生活指數</h2> <div class='lifestyle-box'> <div data-indexs='0'> <i class='iconfont icon-shushidu'></i> <span>舒適度指數</span> </div> <div data-indexs='1'> <i class='iconfont icon-3chuanyixiguan'></i> <span>穿衣指數</span> </div> <div data-indexs='2'> <i class='iconfont icon-ganmaoyaowu'></i> <span>感冒指數</span> </div> <div data-indexs='3'> <i class='iconfont icon-yundong'></i> <span>運動指數</span> </div> <div data-indexs='4'> <i class='iconfont icon-lvyou'></i> <span>旅游指數</span> </div> <div data-indexs='5'> <i class='iconfont icon-iconset0451'></i> <span>紫外線指數</span> </div> <div data-indexs='6'> <i class='iconfont icon-xiche'></i> <span>洗車指數</span> </div> <div data-indexs='7'> <i class='iconfont icon-kongqiwuranfenxi'></i> <span>空氣污染擴散條件指數</span> </div> </div> </div> <!-- 生活指數彈窗 --> <div class='lifestyle-tc'> </div> <script src='http://m.b3g6.com/bcjs/rem.js'></script> <script src='http://m.b3g6.com/bcjs/Ajax.js'></script> <script src='http://m.b3g6.com/bcjs/tianqi.js'></script></body></html>

CSS代碼

* { margin: 0; padding: 0;}ul,li { list-style: none;}body { background-size: 120%; color: white;}.search { position: fixed; width: 100%; height: 0.5rem; background-color: rgba(0,0,0,.0); display: flex; justify-content: space-between; align-items: center;}#search_from { width: 2.8rem; height: 0.4rem; position: relative;}.search > span { width: 0.5rem; font-size: 0.25rem; line-height: 0.5rem; text-align: center; font-family: 'Segoe UI Symbol'; color: white;}.search #search_from > input { width: 2.8rem; height: 0.4rem; border-radius: 0.1rem; text-indent: 0.1rem; outline: none; position: absolute; border: none; border-bottom: 0.01rem solid white; background-color: rgba(255,255,255,.05); color: white;}.search #search_from > input::-webkit-input-placeholder { color: white;}.search > .search-btn { width: 0.5rem; position: relative;}.search > .search-btn > img { width: 0.25rem; position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%);}.history { height: 0.9rem; overflow: auto; background-color: rgba(255,255,255,.05); transition-duration: 0.5s;}.historys { margin-top: 0.8rem; overflow: hidden;}.history .history-item { display: flex; height: 0.4rem; border-bottom: 0.01rem dashed #cccccc; align-items: center; justify-content: space-evenly;}.history .history-item > .history-time { font-size: 0.14rem;}.history .history-item > .history-city { font-size: 0.18rem;}.history .la { height: 0.3rem; display: flex; position: fixed; top: 0.45rem; width: 90%; background-color: rgba(255,255,255,.0); justify-content: space-between; font-size: 0.16rem; border-bottom: 0.01rem solid white; margin: 0.1rem 0.2rem; font-family: 幼圓; line-height: 0.3rem;}.history .la > span { color: white;}.history .la > img { width: 0.2rem; height: 0.2rem; padding: 0.03rem; border: 0.01rem solid #cccccc; border-radius: 0.05rem;}.clearbtn { height: 0.3rem; text-align: center; text-decoration: underline; font-size: 0.2rem; margin-top: 0.1rem; line-height: 0.3rem;}.information { /*background-color: gold;*/}.now { padding-top: 0.2rem; display: flex; flex-direction: column;}.now .city { font-size: 0.4rem; text-align: center;}.now .situation { padding-top: 0.2rem; display: flex; justify-content: space-evenly; font-size: 0.15rem; align-items: center;}.now .situation > img { width: 1rem; height: 1rem; vertical-align: bottom;}.now .temp { display: flex; flex-direction: column; align-items: center;}.now .temp > h3 { font-size: 0.2rem; margin-top: 0.1rem;}.forecast { background-color: rgba(0,0,0,.3); margin: 0 0.2rem; border-radius: 0.1rem;}.forecast-item { height: 0.3rem; display: flex; justify-content: space-between; margin: 0.1rem 0.2rem 0; padding-top: 0.1rem;}.forecast-item:last-of-type { padding-bottom: 0.1rem;}.forecast-item .forecast-situation > img { width: 0.2rem; height: 0.2rem;}.forecast-item .forecast-situation { font-size: 0.16rem;}.forecast-temp { font-size: 0.18rem;}.lifestyle { display: none; margin: 0 0.2rem; background-color: rgba(0,0,0,.3); border-radius: 0.1rem;}.lifestyle > h2 { text-align: center; margin-top: 0.2rem; font-size: 0.2rem; padding-top: 0.15rem; font-family: 幼圓;}.lifestyle .lifestyle-box { display: flex; flex-wrap: wrap; justify-content: space-between;}.lifestyle .lifestyle-box .lifestyle-item { display: flex; flex-direction: column; width: 0.7rem; height: 0.4rem; font-size: 0.14rem; text-align: center; padding-top: 0.1rem; padding-bottom: 0.05rem;}.lifestyle .lifestyle-box .lifestyle-item > i { font-size: 0.2rem;}.lifestyle .lifestyle-box .lifestyle-item > span { white-space: nowrap; text-overflow:ellipsis; overflow:hidden;}.lifestyle-tc { height: 100vh; position: fixed; top: 0; left: 0; background-color: gold; font-family: 幼圓; line-height: 0.4rem;}.lifestyle-tc .fanghui { width: 0.3rem; height: 0.3rem; position: absolute; left: 0.2rem; top: 0.1rem;}.lifestyle-tc .fanghui > img { width: 100%;}.lifestyle-tc > h2 { font-size: 0.3rem; width: 2.2rem; margin: 0.3rem auto 0; text-align: center;}.lifestyle-tc > span { width: 100%; font-size: 0.2rem; margin-top: 1.5rem; display: block; font-weight: 700; text-indent: 0.16rem;}.lifestyle-tc > p { text-indent: 0.32rem; font-size: 0.2rem;}

JS代碼

let searchtext = document.querySelector(’.search #search_from > input’);let searchbtn = document.querySelector(’.search-btn’);let information = document.querySelector(’.information’); //當前天氣divlet forecast = document.querySelector('.forecast'); //獲取天氣預報 divlet lifestyle = document.querySelector(’.lifestyle’); if (localStorage.tq == undefined) { /*如果默認沒搜索過 就自動搜索普寧*/ var tqList = []; let defauleCity = '普寧'; autorend(defauleCity); } else { /*如果有搜索記錄,就自動搜索最后一次機城市*/ var tqList = JSON.parse(localStorage.tq); let endcityName = tqList[tqList.length - 1].cityName; autorend(endcityName);} /* 自動渲染方法*/ function autorend (cityName) { let nowurl = 'https://free-api.heweather.net/s6/weather/now?location='+cityName+'&key=26be256aca2c43a7bb7f9a72e0f99a6b'; let dailyurl = 'https://free-api.heweather.net/s6/weather/forecast?location='+cityName+'&key=26be256aca2c43a7bb7f9a72e0f99a6b'; let lifestyleurl = 'https://free-api.heweather.net/s6/weather/lifestyle?location='+cityName+'&key=26be256aca2c43a7bb7f9a72e0f99a6b'; console.log('執行自動渲染') rendweather(nowurl,cityName,dailyurl,lifestyleurl);} function getTime() { let date = new Date(); let year = date.getFullYear(); let month = date.getMonth() + 1; let day = date.getDate(); let house = date.getHours(); house = house < 10 ? ’0’ + house : house; let minutes = date.getMinutes(); minutes = minutes < 10 ? ’0’ + minutes : minutes; let second = date.getMinutes(); second = second < 10 ? ’0’ + second : second; let time = year + '年 - ' + month + '月 - ' + day + '日 - ' + house + ':' + minutes + ':' + second; return time; } /*搜索按鈕事件*/ searchbtn.addEventListener(’click’,function () { let time = getTime(); let cityName = searchtext.value; /*如果輸入框不為空才執行 不加這條件 會導致傳入一個空的字符串 導致歷史記錄添加到一個空的*/ if (cityName != '') { let List = { 'cityName' : cityName, 'time' : time } tqList.push(List); localStorage.tq = JSON.stringify(tqList); rendhistory(tqList); let nowurl = 'https://free-api.heweather.net/s6/weather/now?location='+cityName+'&key=26be256aca2c43a7bb7f9a72e0f99a6b'; let dailyurl = 'https://free-api.heweather.net/s6/weather/forecast?location='+cityName+'&key=26be256aca2c43a7bb7f9a72e0f99a6b'; let lifestyleurl = 'https://free-api.heweather.net/s6/weather/lifestyle?location='+cityName+'&key=26be256aca2c43a7bb7f9a72e0f99a6b'; rendweather(nowurl,cityName,dailyurl,lifestyleurl); /*調用渲染方法*/ searchtext.value = ''; }}); /*手機鍵盤搜索鍵事件*/ document.getElementById(’search_from’).onsubmit = function () { searchbtn.click(); document.activeElement.blur(); } /*主頁面渲染*/ function rendweather (nowurl,cityName,dailyurl,lifestyleurl) { /*獲取今日天氣信息*/ getAjax(nowurl,function (xhr) { let databoj = JSON.parse(xhr.response); let now = databoj.HeWeather6[0].now; if (now == undefined) { /* 如果獲取到的為now 說明用戶輸入的城市有誤*/ if (tqList.length > 1) {//如果長度大于1 說明之前用戶正確輸入過城市 tqList.splice(tqList.length - 1 , 1 ); //執行刪除最后一個元素 即輸入錯誤的城市 rendhistory(tqList); // 執行歷史記錄渲染 cityName = tqList[tqList.length - 1].cityName; //將城市名賦值為數組最后一個元素 即最后一次正確搜索的城市 } else if (tqList.length == 1) { /* 如果長度為1 說明現在為止用戶沒輸入一個正確的城市*/ cityName = '普寧'; //將城市名賦值為 普寧 // tqList.splice(tqList.length - 1 , 1 ); tqList.pop(); //刪除輸入錯誤的文字 rendhistory(tqList); //執行歷史記錄渲染 } autorend(cityName); //最后執行自動渲染 } else { //如果以上都沒錯誤 說明用戶輸入的城市正確 正常執行代碼 /* 渲染今日天氣*/ information.innerHTML = ` <div class='now'> <span class='city'>${cityName}</span> <div class='situation'> <img src='https://cdn.heweather.com/cond_icon/${now.cond_code}.png' alt=''> <!-- 天氣圖標 --> <h1 class='text'>${now.cond_txt}</h1> <!-- 天氣狀況 --> <div class='temp'> <h3 class='tmp'>溫度:${now.tmp}℃</h3> <!-- 溫度 --> <h3 class='fl'>體感溫度:${now.fl}℃</h3> <!-- 體感溫度 --> </div> </div> `; /*渲染背景圖片*/ let nowcondtxt = now.cond_code; switch(nowcondtxt) { case '101': case '102': case '103': case '104': document.body.style.backgroundImage = 'url(’images/2.jpg’)'; break; case '100': case '200': case '201': case '202': case '203': case '204': document.body.style.backgroundImage = 'url(’images/1.jpg’)'; break; case '205': case '206': case '207': case '208': case '209': document.body.style.backgroundImage = 'url(’images/7.jpg’)'; break; case '210': case '211': case '212': case '213': document.body.style.backgroundImage = 'url(’images/8.jpg’)'; break; case '300': case '301': case '302': case '303': case '304': case '305': case '306': case '307': case '308': case '309': case '310': case '311': case '312': case '313': case '314': case '315': case '316': case '317': case '318': case '399': document.body.style.backgroundImage = 'url(’images/3.jpg’)'; break; case '400': case '401': case '402': case '403': case '404': case '405': case '406': case '407': case '408': document.body.style.backgroundImage = 'url(’images/4.jpg’)'; break; case '500': case '501': case '502': case '503': case '504': case '505': case '506': case '507': case '508': document.body.style.backgroundImage = 'url(’images/5.jpg’)'; break; case '509': case '510': case '511': case '512': case '513': case '514': case '515': document.body.style.backgroundImage = 'url(’images/6.jpg’)'; break; default: document.body.style.backgroundImage = 'url(’images/9.jpg’)'; } /*獲取天氣預告信息*/ getAjax(dailyurl,function (xhr) { forecast.innerHTML = ''; /*清除之前的渲染*/ let databoj = JSON.parse(xhr.response); let daily = databoj.HeWeather6[0].daily_forecast; daily.forEach(function (item,index) { /*如果當天天氣早上和晚上一樣就輸出一個 如果不一樣 就早上轉晚上(天氣類型)*/ var txt = item.cond_txt_d == item.cond_txt_n ? item.cond_txt_d : item.cond_txt_d + '轉' + item.cond_txt_n; let date = ’今天’; /*默認今天*/ if (index == 1) { /* 第二個賦值為明天*/ date = '明天'; } else if (index == 2) { /* 第三個賦值為后天*/ date = '后天'; } /*渲染天氣預報*/ forecast.innerHTML += ` <div class='nowday forecast-item'> <div class='forecast-situation'> <img src='https://cdn.heweather.com/cond_icon/${item.cond_code_d}.png' alt=''> ${date} * <span class='txt'>${txt}</span> </div> <div class='forecast-temp'> <span class='max'>${item.tmp_max}°/</span> <span class='min'>${item.tmp_min}°</span> </div> </div>`; }) }); lifestyle.style.display = ’block’; /*顯示生活指數模板*/ /*獲取生活指數*/ getAjax(lifestyleurl,function (xhr) { let databoj = JSON.parse(xhr.response); let lifestyle = databoj.HeWeather6[0].lifestyle; lifestyleclick(lifestyle); /*調用生活指數渲染方法*/ }); } }); } /*生活指數渲染方法*/ let lifestyleitem = document.querySelectorAll(’.lifestyle-item’); function lifestyleclick (lifestyle) { for (let j = 0; j < lifestyleitem.length; j ++) { lifestyleitem[j].onclick = function () { let index = lifestyleitem[j].dataset.indexs; let li = lifestyle[index]; let lifestyletc = document.querySelector(’.lifestyle-tc’); lifestyletc.innerHTML = `<div class='fanghui'> <img src='http://m.b3g6.com/bcjs/images/fanghui.png' alt=''> </div> <h2>${lifestyleitem[j].children[1].childNodes[0].data}</h2> <span>${li.brf}</span> <p>'${li.txt}'</p>`; lifestyletc.style.display = ’block’; /*關閉按鈕*/ let fanghuibtn = document.querySelector(’.fanghui’); console.log(fanghuibtn); fanghuibtn.onclick = function () { lifestyletc.style.display = ’none’; } } } } //歷史記錄事件 let historys = document.querySelector(’.historys’); function rendhistory(tqList) { historys.innerHTML = ''; /*每次執行歷史記錄渲染都清除之前的記錄 防止出現重復*/ tqList.forEach(function (item,index) { /*將歷史記錄寫入*/ historys.innerHTML += ` <div data-indexs='${index}'> <span class='history-time'>${item.time}</span> <span class='history-city'>${item.cityName}</span> </div> `; }) /*獲取歷史記錄div 添加點擊事件 * 點擊后跳轉點擊的城市 * */ let historyitem = document.querySelectorAll(’.history-item’); for (let j = 0; j < historyitem.length; j ++) { historyitem[j].onclick = function() { let index = historyitem[j].dataset.indexs; let thecityName = tqList[index].cityName; let time = getTime(); let List = { 'cityName' : thecityName, 'time' : time } tqList.push(List); localStorage.tq = JSON.stringify(tqList); rendhistory(tqList); autorend(thecityName); } } } rendhistory(tqList); xiala(); //下拉菜單事件 function xiala () { let historybtn = document.querySelector(’.la > img’); let historyDiv = document.querySelector(’.history’); let clearhistory = document.querySelector(’.clearbtn’); let flag = true; historybtn.addEventListener(’click’,function () { if (flag) { flag = false; historybtn.style.backgroundColor = 'rgba(0,0,0,.3)'; let height = (tqList.length * 0.4) + 1.7; historyDiv.style.height = height + ’rem’; } else { flag = true; historybtn.style.backgroundColor = 'rgba(0,0,0,.0)'; historyDiv.style.height = ’0.9rem’; } }); clearhistory.addEventListener(’click’,function () { /*清除歷史記錄事件*/ localStorage.removeItem(’tq’); /*刪除本地存儲*/ tqList = []; /*將數組清空*/ rendhistory(tqList); /*渲染歷史記錄*/ historybtn.click(); /*執行下拉按鈕點擊*/ }); searchtext.addEventListener(’click’,function () { //點擊輸入框 如果下拉菜單打開 就關閉 if (!flag) { historybtn.click(); } }); }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产色播av在线| 国产精品日本一区二区不卡视频| 国语精品一区| 日本不良网站在线观看| 亚洲一级影院| 亚洲专区在线| 亚洲高清久久| 亚洲精品国产偷自在线观看| 视频一区欧美日韩| 欧美日韩18| 国产精品一区二区99| 国产成人精品亚洲线观看| 偷拍精品精品一区二区三区| 国产精品婷婷| 欧美日韩一区二区三区不卡视频| 欧美经典一区| 久久亚洲国产| 日本成人在线视频网站| 麻豆精品av| 美女亚洲一区| 日韩中文一区二区| 国产麻豆一区| 激情欧美一区| 国产伦精品一区二区三区在线播放| 91日韩在线| 国产精品嫩草99av在线| 国产日产精品_国产精品毛片| 岛国av免费在线观看| 怡红院精品视频在线观看极品| 日本aⅴ亚洲精品中文乱码| 日本一二区不卡| 日韩精品一区第一页| 久久精品国产网站| 蜜臀久久久久久久| 成人福利av| 日本亚洲不卡| 中文字幕在线视频网站| 视频在线观看91| 成人亚洲欧美| 国产午夜一区| 99国产精品99久久久久久粉嫩| 一区二区国产在线观看| 一本大道色婷婷在线| 国产探花在线精品| 亚洲午夜一级| 久久精品国产免费| 亚洲精品极品| 91综合网人人| 欧美视频一区| 久久福利精品| 午夜精品成人av| 日韩在线二区| 欧美激情视频一区二区三区免费| 免费av一区二区三区四区| 美女性感视频久久| 免费欧美日韩| 激情丁香综合| 91一区二区| 免费视频一区二区三区在线观看 | 丁香婷婷久久| 偷拍亚洲精品| 夜夜嗨网站十八久久| 高清一区二区三区av| 欧美亚洲色图校园春色| 午夜在线视频观看日韩17c| 欧美天堂视频| 久草精品视频| 国产精品久久免费视频| 日韩超碰人人爽人人做人人添| 国产一区二区高清| 不卡中文字幕| 在线观看精品| 正在播放日韩精品| 精品视频一区二区三区在线观看| 青青青国产精品| 日韩三区四区| 日韩三级精品| 中文字幕乱码亚洲无线精品一区| 怡红院精品视频在线观看极品| 久久激情网站| 久久久久午夜电影| 国产在线|日韩| www.com.cn成人| 97精品国产一区二区三区 | 国产精品久久久久久模特 | 日韩伦理一区| 国产乱码午夜在线视频| 国产精品xxx在线观看| 国产欧美日韩免费观看| 国产欧美啪啪| 精品国产一区二区三区av片| 欧美激情91| 成人午夜亚洲| 精品捆绑调教一区二区三区| 日韩欧美一区二区三区免费观看| 日韩欧美一区二区三区在线视频 | 日韩av在线播放网址| 国产一区二区三区四区五区| 成人国产精选| 日韩专区精品| 欧美日韩色图| 午夜欧美精品久久久久久久| 国产农村妇女精品一区二区| 亚洲区国产区| 久久99精品久久久久久园产越南 | 红桃视频亚洲| 亚洲精品日韩久久| 国产精品欧美一区二区三区不卡| 国产精品欧美三级在线观看| 麻豆国产欧美一区二区三区| 9999国产精品| 欧美亚洲国产精品久久| 在线视频亚洲| 日韩av字幕| 国产96在线亚洲| 激情久久久久久| 亚洲97av| 四季av一区二区凹凸精品| 亚洲欧美一区在线| 日韩久久99| av免费不卡国产观看| 欧美va天堂在线| 日本精品久久| 鲁鲁在线中文| 免费久久99精品国产| 欧美精品二区| 久久中文字幕二区| 蜜桃久久精品一区二区| 国产精品4hu.www| 99免费精品| 亚洲精品乱码日韩| 精品久久99| 久久国产福利| 久久亚洲精精品中文字幕| 亚洲天堂成人| 久久国产日韩欧美精品| 日本久久成人网| 日韩激情一二三区| 日韩欧美一区二区三区免费观看| 免费成人在线视频观看| 久久av中文| 日韩视频在线一区二区三区 | 欧美日韩亚洲国产精品| 精品欧美一区二区三区在线观看| 最新亚洲国产| 日韩精品中文字幕第1页| 无码日韩精品一区二区免费| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 蜜乳av另类精品一区二区| 青草国产精品| 精品免费av在线| 日韩高清三区| 五月婷婷亚洲| 91亚洲国产高清| 日韩国产精品久久久| 久久国产精品成人免费观看的软件| 日韩精品一区二区三区免费视频| 日韩国产一区| 国产精品密蕾丝视频下载| 99综合视频| bbw在线视频| 欧美精品三级在线| 亚洲欧美久久久| 欧美黄色网页| 国产美女视频一区二区| 99久久精品费精品国产| 国产精品男女| 日精品一区二区三区| 亚洲女同中文字幕| 国产v日韩v欧美v| 国产精品乱战久久久| 久久国产88| 欧美91精品| 久久精品99久久无色码中文字幕| 免费在线欧美黄色| 日韩精品第二页| 日韩一级不卡| 日韩在线短视频| 精品理论电影在线| 国产精品成人国产| 黄色精品网站| 欧美日韩国产综合网| 中文另类视频| 国产一区二区精品久| 国产精品视频一区二区三区综合| 亚洲精品福利| 亚洲色图综合| 日av在线不卡| 久久亚洲影院| 老鸭窝毛片一区二区三区| 91精品成人| 亚洲精品2区| 99久久视频| 国产黄大片在线观看| 福利一区在线| 麻豆国产精品视频| 国内一区二区三区| 国产一区二区三区不卡视频网站 | 国产精品网址| 国产精品久久久久久av公交车|