You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

72 lines
1.9 KiB

import { places } from './data.js'
const body = document.querySelector('body')
export const explore = () => {
createSections()
const location = document.createElement('div')
location.className = 'location'
setLocation(location)
const direction = document.createElement('div')
direction.className = 'direction'
body.append(location, direction)
document.addEventListener('wheel', (event) =>
setLocation(location, direction, event),
)
setTimeout(() =>
document.removeEventListener('wheel', (event) =>
setLocation(location, direction, event),
),
)
}
const createSections = () => {
const sorted = places.sort(
(a, b) => getDegree(b.coordinates) - getDegree(a.coordinates),
)
sorted.map(({ name, color }) => {
const nameDashCase = name
.toLowerCase()
.split(',')[0]
.split(' ')
.join('-')
const url = `https://raw.githubusercontent.com/MarieMalarme/dom-js/master/assets/images/${nameDashCase}.jpg`
const section = document.createElement('section')
section.style.background = `center / cover url(${url})`
body.append(section)
})
}
const getDegree = (coordinates) => {
const north = coordinates.includes('N')
const degree = coordinates.split("'")[0].replace('°', '.')
return north ? degree : -degree
}
const setLocation = (location, direction, event) => {
const { name, coordinates, color } = getLocation()
location.textContent = `${name}\n${coordinates}`
location.style.color = color
location.onclick = () => {
window.open(`https://www.google.com/maps/place/${coordinates}`, '_blank')
}
if (!event) return
const scrollUp = event.deltaY < 0
direction.innerHTML = `<div style="transform: rotate(${
scrollUp ? -90 : 90
}deg)">➢</div><div>${scrollUp ? 'N' : 'S'}</div>`
}
const getLocation = () => {
const { innerHeight, scrollY } = window
const index = Math.ceil((scrollY - innerHeight / 2) / innerHeight)
return places[index]
}