<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" />
<script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
<script src="https://shademap.app/lib/leaflet-shademap.umd.min.js"></script>
<style>
body {
padding: 0px;
margin: 0px;
}
#mapid {
height: 100vh;
}
.leaflet-control-time {
padding-left: 40px;
}
</style>
<title>Shade Map Leaflet example</title>
</head>
<body>
<div id="mapid"></div>
<div class="leaflet-control-container">
<div class="leaflet-top leaflet-left">
<div class="leaflet-control-time leaflet-control">
<button id="decrement">-1 hour</button>
<button id="increment">+1 hour</button>
<button id="play">Play</button>
<button id="stop">Stop</button>
<button>
<a href="https://shademap.app/about" target="_blank">Get API key</a>
</button>
</div>
</div>
</div>
<script>
/* Leaflet setup */
var map = L.map("mapid").setView([47.69682, -121.92078], 9);
L.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png", {
attribution:
'Map data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',
maxZoom: 18,
}).addTo(map);
/* End Leaflet setup */
/* ShadeMap setup */
let now = new Date(1633358583454);
const shadeMap = L.shadeMap({
date: now,
color: '#01112f',
opacity: 0.7,
apiKey: "1e4a17816006654b9343b41818bae762cf33a5c393a92f0c919753f728a616a8"
}).addTo(map);
/* End ShadeMap setup */
/* Controls setup */
let intervalTimer;
const increment = document.getElementById('increment');
const decrement = document.getElementById('decrement');
const play = document.getElementById('play');
const stop = document.getElementById('stop');
increment.addEventListener('click', () => {
now = new Date(now.getTime() + 3600000);
shadeMap.setDate(now);
}, false);
decrement.addEventListener('click', () => {
now = new Date(now.getTime() - 3600000);
shadeMap.setDate(now);
}, false);
play.addEventListener('click', () => {
intervalTimer = setInterval(() => {
now = new Date(now.getTime() + 60000);
shadeMap.setDate(now);
}, 100);
});
stop.addEventListener('click', () => {
clearInterval(intervalTimer);
})
/* End controls setup */
</script>
</body>
</html>
Output
You can jump to the latest bin by adding /latest
to your URL
Keyboard Shortcuts
Shortcut | Action |
---|---|
ctrl + [num] | Toggle nth panel |
ctrl + 0 | Close focused panel |
ctrl + enter | Re-render output. If console visible: run JS in console |
Ctrl + l | Clear the console |
ctrl + / | Toggle comment on selected lines |
ctrl + ] | Indents selected lines |
ctrl + [ | Unindents selected lines |
tab | Code complete & Emmet expand |
ctrl + shift + L | Beautify code in active panel |
ctrl + s | Save & lock current Bin from further changes |
ctrl + shift + s | Open the share options |
ctrl + y | Archive Bin |
Complete list of JS Bin shortcuts |
JS Bin URLs
URL | Action |
---|---|
/ | Show the full rendered output. This content will update in real time as it's updated from the /edit url. |
/edit | Edit the current bin |
/watch | Follow a Code Casting session |
/embed | Create an embeddable version of the bin |
/latest | Load the very latest bin (/latest goes in place of the revision) |
/[username]/last | View the last edited bin for this user |
/[username]/last/edit | Edit the last edited bin for this user |
/[username]/last/watch | Follow the Code Casting session for the latest bin for this user |
/quiet | Remove analytics and edit button from rendered output |
.js | Load only the JavaScript for a bin |
.css | Load only the CSS for a bin |
Except for username prefixed urls, the url may start with http://jsbin.com/abc and the url fragments can be added to the url to view it differently. |