mirror of https://github.com/01-edu/public.git
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
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] |
|
}
|
|
|