for code camp
A Pen by Liberty Montano on CodePen.
<html> | |
<head> | |
<meta charset="UTF-8"> | |
<title>Local Weather </title> | |
<link rel="stylesheet prefetch" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"> | |
<link rel="stylesheet" href="css/style.css"> | |
<link href="../../dist/css/bootstrap.min.css" rel="stylesheet"> | |
<link href="https://fonts.googleapis.com/css?family=Nixie+One|Hind+Vadodara:500" rel="stylesheet" type="text/css"> | |
<script src="../../assets/js/ie-emulation-modes-warning.js"></script> | |
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> | |
<script src="//js.maxmind.com/js/apis/geoip2/v2.1/geoip2.js" type="text/javascript"></script> | |
</head> | |
<body> | |
<div id="clouds"> | |
<div class="cloud x1"></div> | |
<div class="cloud x2"></div> | |
<div class="cloud x3"></div> | |
<div class="cloud x4"></div> | |
<div class="cloud x5"> </div> | |
<div class="site-wrapper"> | |
<div class="site-wrapper-inner"> | |
<div class="cover-container"> | |
<div class="masthead clearfix"> | |
<div class="inner"> | |
<div class="bk-cover"> | |
<div class="inner cover"> | |
<h1>Your Local Weather</h1> | |
<div class="row"> | |
<div id="icon"></div> | |
<div id="tempF" class="temp"></div><span class="temp"> / </span> | |
<div id="tempC" class="temp"></div> | |
</div> | |
<div id="address" class="btn btn-lg btn-default"></div> | |
<div id="sky" class="btn btn-lg btn-default"></div> | |
<div id="wind" class="btn btn-lg btn-default"></div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> | |
<script src="../../dist/js/bootstrap.min.js"></script> | |
<script src="../../assets/js/ie10-viewport-bug-workaround.js"></script> | |
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> | |
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> | |
<script src="js/index.js"></script> | |
</body> | |
</html> |
for code camp
A Pen by Liberty Montano on CodePen.
$(document).ready(function() { | |
getLocation(); | |
var appId = 'f9ac58d42469c107ee28a3aba7afd53a'; | |
var $address = $('#address'); | |
var $tempF = $('#tempF'); | |
var $tempC = $('#tempC'); | |
var $sky = $('#sky'); | |
var $icon = $('#icon'); | |
var $wind = $('#wind'); | |
var sunrise = []; | |
var sunset = []; | |
function getLocation() { | |
$.get('http://ipinfo.io', function(ipInfo) { | |
var latsplit = ipInfo.loc.split(',', 2); | |
var lat = latsplit[0]; | |
var lon = latsplit[1]; | |
getWeather(lat, lon); | |
}, 'jsonp'); | |
$.get(('http://ip-api.com/json/?'), function(data) { | |
var city = data.city; | |
var region = data.regionName; | |
$address.html(data.city + ', ' + data.region); | |
}, 'jsonp'); | |
} | |
function degToCompass(num) { | |
var val = Math.floor((num / 22.5) + 0.5); | |
var arr = ['N', 'NNE', 'NE', 'ENE', 'E', 'ESE', 'SE', 'SSE', 'S', 'SSW', 'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW']; | |
return arr[(val % 16)]; | |
} | |
function getWeather(lat, lon) { | |
$.get(('http://api.openweathermap.org/data/2.5/weather?lat=' + lat + '&lon=' + lon + '&APPID=' + appId), | |
function(weather) { | |
var tempK = (weather.main.temp).toFixed(0); | |
var tempF = (((weather.main.temp - 273.15) * 9 / 5) + 32).toFixed(0); | |
var tempC = ((weather.main.temp) - 273.15).toFixed(0); | |
var icon = 'http://openweathermap.org/img/w/' + weather.weather[0].icon + '.png'; | |
var wind = (weather.wind.speed * 1.94).toFixed(0); | |
var degree = degToCompass(weather.wind.deg); | |
var clouds = (weather.clouds.all); | |
var sunR = (weather.sys.sunrise); | |
var sunS = (weather.sys.sunset); | |
cloudy(clouds); | |
$wind.text(degree + ' ' + wind + ' knots'); | |
$tempF.text(tempF + '\xB0' + 'F'); | |
$sky.text(weather.weather[0].description); | |
$tempC.text(tempC + '\xB0' + 'C'); | |
$('#tempK').text(tempK + '\xB0' + 'K'); | |
$icon | |
.append("<img src='http://openweathermap.org/img/w/" + weather.weather[0].icon + ".png'>"); | |
function sRTime() { | |
var sunrise1 = new Date(sunR * 1000); | |
var sH = sunrise1.getHours(); | |
var sM = sunrise1.getMinutes(); | |
sunrise.push(sH, sM); | |
} | |
function sSTime() { | |
var sunset1 = new Date(sunS * 1000); | |
var sSH = sunset1.getHours(); | |
var sSM = sunset1.getMinutes(); | |
sunset.push(sSH, sSM); | |
} | |
function tillSun() { | |
sRTime(); | |
sSTime(); | |
var now = new Date(); | |
var nowM = now.getHours() * 60 + now.getMinutes(); | |
var sunriseM = sunrise[0] * 60 + sunrise[1]; | |
var sunsetM = sunset[0] * 60 + sunset[1]; | |
if (nowM > sunsetM - 60 && nowM <= sunsetM + 60) { | |
console.log("dusk"); | |
$('#clouds').css({ | |
"background-color": "rgba(246, 160, 147, 0.5)", | |
"background-blend-mode": "multiply" | |
}); | |
} else if (nowM > sunriseM - 60 && nowM <= sunriseM + 60) { | |
console.log("dawn"); | |
$('#clouds').css({ | |
"background-color": "rgba(237, 171, 227, 0.5)", | |
"background-blend-mode": "multiply" | |
}); | |
} else if (nowM > sunriseM + 60 && nowM <= sunsetM - 60) { | |
console.log("day"); | |
} else { | |
console.log("night"); | |
$('#clouds').css({ | |
"background-color": "rgba(73, 61, 111, 0.1)", | |
"background": "-webkit-linear-gradient(top, #493D6F 0%, #333 100%)", | |
"background": "-linear-gradient(top, #493D6F 0%, #333 100%)", | |
"background": "-moz-linear-gradient(top, #493D6F 0%, #333 100%)", | |
"background": "-o-linear-gradient(top, #493D6F 0%, #333 100%)", | |
"background": "-ms-linear-gradient(top, #493D6F 0%, #333 100%)" | |
}); | |
/* $('body').css({ "background": "rgba(73, 61, 111, 0.1)" });*/ | |
} | |
} | |
tillSun(); | |
}, 'jsonp'); | |
} | |
function cloudy(clouds) { | |
var $cloudNode = $('#clouds'); | |
var $cloudNode1 = $('.x1'); | |
var $cloudNode2 = $('.x2'); | |
var $cloudNode3 = $('.x3'); | |
var $cloudNode4 = $('.x4'); | |
var $cloudNode5 = $('.x5'); | |
if (clouds < 20) { | |
$('.cloud').css({ | |
"display": "none" | |
}); | |
$('#clouds').css({ | |
"padding": "300px 0px" | |
}); | |
} else if (clouds > 80) { | |
function twiceCloud() { | |
$cloudNode2.append($cloudNode2); | |
$cloudNode3.append($cloudNode3); | |
$cloudNode4.append($cloudNode4); | |
$cloudNode5.append($cloudNode5); | |
$cloudNode1.append($cloudNode1); | |
}; | |
} else if (81 < clouds > 100) { | |
twiceCloud(2); | |
} else { | |
} | |
} | |
}(jQuery)); | |
// Google Fonts // | |
WebFontConfig = { | |
google: { | |
families: ['Nixie+One::latin', 'Hind+Vadodara:500:latin'], | |
}, | |
}; | |
(function() { | |
var wf = document.createElement('script'); | |
wf.src = ('https:' == document.location.protocol ? 'https' : 'http') + | |
'://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js'; | |
wf.type = 'text/javascript'; | |
wf.async = 'true'; | |
var s = document.getElementsByTagName('script')[0]; | |
s.parentNode.insertBefore(wf, s); | |
}); |
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> | |
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> | |
<script src="//js.maxmind.com/js/apis/geoip2/v2.1/geoip2.js"></script> |
/* To Dos */ | |
/* add a thermometer slider */ | |
/* check on weather description return - switch to console.log*/ | |
/* look for better weather icons */ | |
/* change units based on location */ | |
#lat, | |
#lon { | |
display: none; | |
} | |
h1 { | |
font-family: 'Nixie One', cursive; | |
text-transform: uppercase; | |
font-size: 4em; | |
color: #000; | |
} | |
h2 { | |
font-family: 'Hind Vadodara', sans-serif; | |
text-transform: none; | |
font-size: 4em; | |
color: #000; | |
} | |
a, | |
a:focus, | |
a:hover { | |
color: #000; | |
text-decoration: none; | |
} | |
.btn-default, | |
.btn-default:hover, | |
.btn-default:focus { | |
color: #000; | |
text-shadow: none; | |
opacity: 1.0; | |
margin: 10px; | |
text-transform: uppercase; | |
text-decoration: bold; | |
background-color: #fff; | |
border: 1px solid #fff; | |
} | |
html, | |
body { | |
height: 100%; | |
background-color: #333; | |
font-family: 'Nixie One', cursive; | |
} | |
body { | |
color: #fff; | |
text-align: center; | |
text-shadow: 0 1px 3px rgba(0, 0, 0, .5); | |
} | |
.site-wrapper { | |
display: table; | |
width: 100%; | |
height: 100%; | |
top: 0; | |
} | |
.site-wrapper-inner { | |
display: table-cell; | |
vertical-align: top; | |
} | |
.cover-container { | |
margin-right: auto; | |
margin-left: auto; | |
} | |
.inner { | |
margin: -200px 25px; | |
top: 0; | |
} | |
.masthead-brand { | |
margin: 10px 40%; | |
} | |
.masthead-nav > li { | |
display: inline-block; | |
} | |
.masthead-nav > li + li { | |
margin-left: 20px; | |
} | |
.masthead-nav > li > a { | |
padding-right: 0; | |
padding-left: 0; | |
font-size: 16px; | |
font-weight: bold; | |
color: #fff; | |
/* IE8 proofing */ | |
color: rgba(255, 255, 255, .75); | |
border-bottom: 2px solid transparent; | |
} | |
.masthead-nav > li > a:hover, | |
.masthead-nav > li > a:focus { | |
background-color: transparent; | |
border-bottom-color: #a9a9a9; | |
border-bottom-color: rgba(255, 255, 255, .25); | |
} | |
.masthead-nav > .active > a, | |
.masthead-nav > .active > a:hover, | |
.masthead-nav > .active > a:focus { | |
color: #fff; | |
border-bottom-color: #fff; | |
} | |
.cover { | |
padding: 0 20px; | |
margin: 35px 0; | |
} | |
.bk-cover { | |
background-color: #f5f5f5; | |
opacity: .75; | |
border-radius: 20px; | |
padding: 10px 0; | |
} | |
.cover .btn-lg { | |
padding: 20px 20px; | |
font-weight: bold; | |
} | |
#icon, | |
.temp { | |
display: inline-block; | |
font-size: 2em; | |
} | |
#icon { | |
height: 20px; | |
position: relative; | |
} | |
.mastfoot { | |
color: #999; | |
color: rgba(255, 255, 255, .5); | |
} | |
@media (min-width: 992px) { | |
.masthead, .mastfoot, .cover-container { | |
width: 800px; | |
} | |
} | |
/*Clouds*/ | |
* { | |
margin: 0; | |
padding: 0; | |
} | |
body { | |
/*To hide the horizontal scroller appearing during the animation*/ | |
overflow: hidden; | |
} | |
#clouds { | |
padding: 100px 0; | |
background: #c9dbe9; | |
background: -webkit-linear-gradient(top, #c9dbe9 0%, #fff 100%); | |
background: -linear-gradient(top, #c9dbe9 0%, #fff 100%); | |
background: -moz-linear-gradient(top, #c9dbe9 0%, #fff 100%); | |
background: -ms-linear-gradient(top, #c9dbe9 0%, #fff 100%); | |
background: -o-linear-gradient(top, #c9dbe9 0%, #fff 100%); | |
} | |
/*Time to finalise the cloud shape*/ | |
.cloud { | |
width: 200px; | |
height: 60px; | |
background: #fff; | |
-moz-border-radius: 200px; | |
-ms-border-radius: 200px; | |
-o-border-radius: 200px; | |
-webkit-border-radius: 200px; | |
border-radius: 200px; | |
position: relative; | |
z-index: -10; | |
} | |
.cloud:before, | |
.cloud:after { | |
content: ''; | |
position: absolute; | |
background: #fff; | |
width: 100px; | |
height: 80px; | |
top: -15px; | |
left: 10px; | |
-moz-border-radius: 100px; | |
-o-border-radius: 100px; | |
-webkit-border-radius: 100px; | |
border-radius: 100px; | |
-webkit-transform: rotate(30deg); | |
-moz-transform: rotate(30deg); | |
-ms-transform: rotate(30deg); | |
-o-transform: rotate(30deg); | |
transform: rotate(30deg); | |
} | |
.cloud:after { | |
width: 120px; | |
height: 120px; | |
top: -55px; | |
left: auto; | |
right: 15px; | |
} | |
/*Time to animate*/ | |
.x1 { | |
-webkit-animation: moveclouds 15s linear infinite; | |
-moz-animation: moveclouds 15s linear infinite; | |
-o-animation: moveclouds 15s linear infinite; | |
} | |
/*variable speed, opacity, and position of clouds for realistic effect*/ | |
.x2 { | |
left: 200px; | |
-webkit-transform: scale(0.6); | |
-moz-transform: scale(0.6); | |
-ms-transform: scale(0.6); | |
-o-transform: scale(0.6); | |
transform: scale(0.6); | |
opacity: 0.6; | |
/*opacity proportional to the size*/ | |
/*Speed will also be proportional to the size and opacity*/ | |
/*More the speed. Less the time in 's' = seconds*/ | |
-webkit-animation: moveclouds 25s linear infinite; | |
-moz-animation: moveclouds 25s linear infinite; | |
-o-animation: moveclouds 25s linear infinite; | |
} | |
.x3 { | |
left: -250px; | |
top: -200px; | |
-webkit-transform: scale(0.8); | |
-moz-transform: scale(0.8); | |
-ms-transform: scale(0.8); | |
-o-transform: scale(0.8); | |
transform: scale(0.8); | |
opacity: 0.8; | |
/*opacity proportional to the size*/ | |
-webkit-animation: moveclouds 20s linear infinite; | |
-moz-animation: moveclouds 20s linear infinite; | |
-o-animation: moveclouds 20s linear infinite; | |
} | |
.x4 { | |
left: 470px; | |
top: -250px; | |
-webkit-transform: scale(0.75); | |
-moz-transform: scale(0.75); | |
-ms-transform: scale(0.75); | |
-o-transform: scale(0.75); | |
transform: scale(0.75); | |
opacity: 0.75; | |
/*opacity proportional to the size*/ | |
-webkit-animation: moveclouds 18s linear infinite; | |
-moz-animation: moveclouds 18s linear infinite; | |
-o-animation: moveclouds 18s linear infinite; | |
} | |
.x5 { | |
left: -150px; | |
top: -150px; | |
-webkit-transform: scale(0.8); | |
-moz-transform: scale(0.8); | |
-ms-transform: scale(0.8); | |
-o-transform: scale(0.8); | |
transform: scale(0.8); | |
opacity: 0.8; | |
/*opacity proportional to the size*/ | |
-webkit-animation: moveclouds 20s linear infinite; | |
-moz-animation: moveclouds 20s linear infinite; | |
-o-animation: moveclouds 20s linear infinite; | |
} | |
@-webkit-keyframes moveclouds { | |
0% { | |
margin-left: 1000px; | |
} | |
100% { | |
margin-left: -1000px; | |
} | |
} | |
@-moz-keyframes moveclouds { | |
0% { | |
margin-left: 1000px; | |
} | |
100% { | |
margin-left: -1000px; | |
} | |
} | |
@-o-keyframes moveclouds { | |
0% { | |
margin-left: 1000px; | |
} | |
100% { | |
margin-left: -1000px; | |
} | |
} |
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" /> |