-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
143 lines (123 loc) · 6.33 KB
/
Copy pathscript.js
File metadata and controls
143 lines (123 loc) · 6.33 KB
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
let app = {
// les variables
percentage: 50,
dragging: false,
question: document.querySelector('.question'),
sliderContainer: document.querySelector('.slider-container'),
progressBar: document.querySelector('.progress'),
progressBarZero: document.querySelector('.progress-zero'),
thumbContainer: document.querySelector('.thumb-container'),
thumb: document.querySelector('.thumb'),
smileyFace: document.querySelector('.smiley-face'),
sliderContainerWidth: document.querySelector('.slider-container').offsetWidth,
sliderContainerLeft: document.querySelector('.slider-container').offsetLeft,
translate: null,
init: function () { // initialisation du script
console.log('init');
app.setPercentage();
app.thumb.classList.add('contour');
window.addEventListener('resize', app.handleReloadOnResize);
document.addEventListener('mousemove', app.handleThumbMove);
document.addEventListener('mouseup', app.handleThumbStop);
app.thumb.addEventListener('mouseover', app.pickabooSmileyShow);
app.thumb.addEventListener('mouseout', app.pickabooSmileyHide);
app.thumb.addEventListener('mousedown', app.handleDragging);
app.smileyFace.classList.add('neutral');
},
handleDragging: function () { // ça draggue ou pas?
app.dragging = true;
},
pickabooSmileyShow: function() { // met le smiley au-dessus du curseur si la souris survole ce dernier
app.question.style.opacity = 0.15;
app.smileyFace.style.opacity = 1;
app.smileyFace.style.transform = 'translate(-50%, -1.6vw)';
app.thumb.classList.add('shadow-blur');
app.thumb.classList.remove('contour');
},
pickabooSmileyHide: function() { // enlève le smiley du curseur si la souris quitte ce dernier
app.question.style.opacity = 1;
app.smileyFace.style.opacity = 0;
app.smileyFace.style.transform = 'translate(-50%, 1.6vw)';
app.thumb.classList.add('contour');
app.thumb.classList.remove('shadow-blur');
},
handleThumbMove: function(event){
if(app.dragging){
app.pickabooSmileyShow(); //continuer d'afficher le smiley du thumb même lors du mouvement
app.setPercentage(); // définir en temps réel le pourcentage
if(event.clientX < app.sliderContainerLeft) {
app.percentage = 0;
//si le déplacement de la souris arrive au limite du container, le pourcentage est a zéro
// permet de ne pas sortir des limite de la track
}
else if (event.clientX > app.sliderContainerWidth + app.sliderContainerLeft) {
percentage = 100;
// idem que ci dessus mais pour le pas sortir au delà de 100
}
else {
app.translate = event.clientX - app.sliderContainerLeft;
app.percentage = (app.translate / app.sliderContainerWidth) * 100;
app.handleMood();
// sinon dans la plage entre 0 et 100, promène toi comme tu veux, mais n'oublie pas de changer le smiley en fonction du pourcentage
}
}
},
handleMood: function() { // change le sourire du smiley en fonction du pourcentage courant
if (app.percentage < 15) {
app.smileyFace.classList.remove('fairly-unhappy');
app.smileyFace.classList.add('unhappy');
}
else if (app.percentage >= 15 && app.percentage <= 40) {
app.smileyFace.classList.remove('unhappy');
app.smileyFace.classList.remove('neutral');
app.smileyFace.classList.add('fairly-unhappy');
}
else if (app.percentage >= 40 && app.percentage <= 60) {
app.smileyFace.classList.remove('fairly-unhappy');
app.smileyFace.classList.remove('fairly-happy');
app.smileyFace.classList.add('neutral');
}
else if (app.percentage >= 60 && app.percentage <= 85) {
app.smileyFace.classList.remove('neutral');
app.smileyFace.classList.remove('happy');
app.smileyFace.classList.add('fairly-happy');
}
else if (app.percentage >= 85) {
app.smileyFace.classList.remove('fairly-happy');
app.smileyFace.classList.add('happy');
}
},
handleThumbStop: function(){
app.dragging = false;
// permet de passer l'action de déplacement à false si on relache la souris
},
setPercentage: function() {
if(app.percentage < 50){
app.progressBarZero.style.transform = 'scaleX(' + app.percentage/100 +')';
app.progressBar.style.transform = 'scaleX(' + 0.5 +')';
app.progressBarZero.style.background = '#ccc none repeat scroll 0% 0%'
app.progressBar.classList.remove('green');
app.progressBar.classList.add('red');
// si le pourcentage descend en dessous de 50, la barre progresse reste bloqué en scale à 50% et la barre
//progressZero voit sont scale baisser pour laisser apparaitre la barre progress en dessous donnant l'illusion
// d'un découvrement du centre vers la gauche
}
else if (app.percentage >= 50){
app.progressBarZero.style.transform = 'scaleX(' + 0.5 +')';
app.progressBar.style.transform = 'scaleX(' + app.percentage/100 +')';
app.progressBarZero.style.background = '#ccc none repeat scroll 0% 0%'
app.progressBar.classList.add('green');
app.progressBar.classList.remove('red');
// si le pourcentage est supérieur à 50, la barre progresse du dessous avance alors que
//la barre progressZero du dessus reste scalé à 50% et s'arrête au milieu
}
app.placeThumbContainer();
},
placeThumbContainer: function() { // placement du bouton de slider en position centrale
app.thumbContainer.style.transform = 'translateX(' + (app.percentage/100 * app.sliderContainerWidth) + 'px) ';
},
handleReloadOnResize: function () { // lors du resize de la fenêtre, tout est rechargé pour que les éléments soient centré
location.replace(location.href);
},
}
document.addEventListener('DOMContentLoaded', app.init); // chargement d'init lorsque tous les élément de la page sont chargés