-
Notifications
You must be signed in to change notification settings - Fork 0
/
wall3d.js
44 lines (35 loc) · 1.49 KB
/
wall3d.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
(function () {
const stageElem = document.querySelector('.stage');
const houseElem = document.querySelector('.house');
const barElem = document.querySelector('.progress-bar');
const selectCharacterElem = document.querySelector('.select-character');
const mousePos = { x: 0, y: 0 };
let maxScrollValue;
function resizeHandler() {
maxScrollValue = document.body.offsetHeight - window.innerHeight;
}
window.addEventListener('scroll', function () {
const scrollPer = pageYOffset / maxScrollValue;
const zMove = scrollPer * 980 - 490;
houseElem.style.transform = 'translateZ(' + zMove + 'vw)';
// progress bar
barElem.style.width = scrollPer * 100 + '%';
});
window.addEventListener('mousemove', function (e) {
mousePos.x = -1 + (e.clientX / window.innerWidth) * 2;
mousePos.y = 1 - (e.clientY / window.innerHeight) * 2;
stageElem.style.transform = 'rotateX(' + (mousePos.y * 5) + 'deg) rotateY(' + (mousePos.x * 5) + 'deg)';
});
window.addEventListener('resize', resizeHandler);
stageElem.addEventListener('click', function (e) {
new Character({
xPos: e.clientX / window.innerWidth * 100,
speed: Math.random() * 0.5 + 0.2
});
});
selectCharacterElem.addEventListener('click', function (e) {
const value = e.target.getAttribute('data-char');
document.body.setAttribute('data-char', value);
});
resizeHandler();
})();