Skip to content

Commit f849762

Browse files
authored
Merge pull request #55 from abdouse79/Drag'n'Drop-with-mouse-events
Drag'n'drop with mouse events
2 parents aee3782 + 31f9cf1 commit f849762

File tree

14 files changed

+172
-176
lines changed

14 files changed

+172
-176
lines changed
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11

2-
We have a horizontal Drag'n'Drop here.
2+
Nous avons un glisser-déposer horizontal ici.
33

4-
To position the element we use `position:relative` and slider-relative coordinates for the thumb. Here it's more convenient here than `position:absolute`.
4+
Pour positionner l’élément nous utilisons `position:relative` et les coordonnées relativement à la barre pour le pouce. Ici c'est plus convenable que la propriété `position:absolute`.

2-ui/3-event-details/4-mouse-drag-and-drop/1-slider/solution.view/index.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,18 @@
1616
let thumb = slider.querySelector('.thumb');
1717

1818
thumb.onmousedown = function(event) {
19-
event.preventDefault(); // prevent selection start (browser action)
19+
event.preventDefault(); // empeche le declenchement de la selection (action du navigateur)
2020

2121
let shiftX = event.clientX - thumb.getBoundingClientRect().left;
22-
// shiftY not needed, the thumb moves only horizontally
22+
// on n'a pas besoin de shiftY , le pouce se deplace seulement horizontalement
2323

2424
document.addEventListener('mousemove', onMouseMove);
2525
document.addEventListener('mouseup', onMouseUp);
2626

2727
function onMouseMove(event) {
2828
let newLeft = event.clientX - shiftX - slider.getBoundingClientRect().left;
2929

30-
// the pointer is out of slider => lock the thumb within the bounaries
30+
// le pointeur est en dehors de la barre de defilement => bloque le pouce a l'interieur des limites
3131
if (newLeft < 0) {
3232
newLeft = 0;
3333
}

2-ui/3-event-details/4-mouse-drag-and-drop/1-slider/task.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ importance: 5
22

33
---
44

5-
# Slider
5+
# Barre de défilement
66

7-
Create a slider:
7+
Créer une barre de défilement:
88

99
[iframe src="solution" height=60 border=1]
1010

11-
Drag the blue thumb with the mouse and move it.
11+
Faire glisser le pouce bleu avec la souris et le déplacer -.
1212

13-
Important details:
13+
Détails importants:
1414

15-
- When the mouse button is pressed, during the dragging the mouse may go over or below the slider. The slider will still work (convenient for the user).
16-
- If the mouse moves very fast to the left or to the right, the thumb should stop exactly at the edge.
15+
- Lorsque la souris est appuyée, durant le glissement la souris peut se mettre au-dessus ou en bas de la barre de défilement. La barre de défilement va toujours fonctionner (c'est convenable pour l'utilisateur).
16+
- Si la souris se déplace très rapidement vers la gauche or la droite, le pouce doit s'arrêter exactement sur le rebord.
Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
To drag the element we can use `position:fixed`, it makes coordinates easier to manage. At the end we should switch it back to `position:absolute`.
1+
Pour déplacer l’élément nous pouvons utiliser `position:fixed`, cela rend les coordonnées plus facile à manipuler. A la fin nous devons le rechanger à la position `position:absolute`.
2+
Ensuite, lorsque les coordonnées sont en haut ou au bas de la fenêtre, nous pouvons utiliser `window.scrollTo` pour le faire défiler.
23

3-
Then, when coordinates are at window top/bottom, we use `window.scrollTo` to scroll it.
4-
5-
More details in the code, in comments.
4+
Plus de détails dans votre code, en commentaires.

2-ui/3-event-details/4-mouse-drag-and-drop/2-drag-heroes/solution.view/index.html

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,17 @@
88

99
<body>
1010

11-
<h2>Place superheroes around the soccer field.</h2>
11+
<h2>Placez les superhéros un peu partout dans le terrain de football.</h2>
1212

13-
<p>Superheroes and the ball are elements with the class "draggable". Make them really draggable.</p>
13+
<p>Les superhéros et la balle sont des éléments ayant la classe "draggable". Rendez les effectivement déplaçable.</p>
1414

15-
<p>Important: limit dragging by the window. If a draggable reaches window top or bottom, then the page should scroll to let us drag it further.</p>
15+
<p>Important: limitez le déplacement au niveau de la fenêtre. Si un élément déplaçable atteint le haut ou le bas de la fenêtre, alors la page doit défiler pour nous permettre de le déplacer d'avantage.</p>
1616

17-
<p>If your screen is big enough to fit the whole document -- make the window smaller to get vertical scrolling, so that you could test it.</p>
17+
<p> Si votre écran est assez large pour contenir tout le document -- rendez la fenêtre plus petite afin d'obtenir un défilement vertical, pour que vous puissiez le tester.</p>
1818

19-
<p>In this task it's enough to handle vertical scrolling. There's no horizontal scrolling usually, and it's handled the similar way if needed.</p>
19+
<p>dans cette tâche, il est suffisant de gérer le défilement vertical. Souvent, il n’y a pas de défilement horizontal, et il est géré de manière similaire au besoin.</p>
2020

21-
<p>And one more thing: heroes may never leave the page. If they reach the edge of the document, no dragging outside of it.</p>
21+
<p>Et aussi: Les héros ne doivent jamais quitter la page. S'ils atteignent le bord document, il ne doit pas avoir de déplacement en dehors de ce dernier.</p>
2222

2323
<div id="field">
2424

2-ui/3-event-details/4-mouse-drag-and-drop/2-drag-heroes/solution.view/soccer.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ html, body {
1010
float: left;
1111
}
1212

13-
/* heroes and the ball (dragables) */
13+
/* heros et la balle (deplacable) */
1414

1515
.hero {
1616
background: url(https://js.cx/drag-heroes/heroes.png);

2-ui/3-event-details/4-mouse-drag-and-drop/2-drag-heroes/solution.view/soccer.js

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ document.addEventListener('mousedown', function(event) {
2424
moveAt(event.clientX, event.clientY);
2525
}
2626

27-
// on drag start:
28-
// remember the initial shift
29-
// move the element position:fixed and a direct child of body
27+
// commencer a l'evenement deplacer:
28+
// se rappeler du changement initial
29+
// depalcerla position:fixed de l' element et un element enfant directe de l'element body
3030
function startDrag(element, clientX, clientY) {
3131
if(isDragging) {
3232
return;
@@ -45,7 +45,7 @@ document.addEventListener('mousedown', function(event) {
4545
moveAt(clientX, clientY);
4646
};
4747

48-
// switch to absolute coordinates at the end, to fix the element in the document
48+
// changer a absolue les coordonnees en bas, pour fixer l'element dans le document
4949
function finishDrag() {
5050
if(!isDragging) {
5151
return;
@@ -61,49 +61,49 @@ document.addEventListener('mousedown', function(event) {
6161
}
6262

6363
function moveAt(clientX, clientY) {
64-
// new window-relative coordinates
64+
// nouvelles coordonnees relatives a la fenetre
6565
let newX = clientX - shiftX;
6666
let newY = clientY - shiftY;
6767

68-
// check if the new coordinates are below the bottom window edge
68+
// controler si les nouvelles coordonneses sont au dessous sous du bord inferieur de la fenetre
6969
let newBottom = newY + dragElement.offsetHeight; // new bottom
7070

71-
// below the window? let's scroll the page
71+
// au dessous de la fenetre? on fait defiler la page
7272
if (newBottom > document.documentElement.clientHeight) {
73-
// window-relative coordinate of document end
73+
// fin de coordonne relativement a la fenetre du document
7474
let docBottom = document.documentElement.getBoundingClientRect().bottom;
7575

76-
// scroll the document down by 10px has a problem
77-
// it can scroll beyond the end of the document
78-
// Math.min(how much left to the end, 10)
76+
// fait defiler le document vers le bas par 10px contient un probleme
77+
// cela peut defiler au dela de la fin du document
78+
// Math.min(combien reste t il vers la fin du document, 10)
7979
let scrollY = Math.min(docBottom - newBottom, 10);
8080

81-
// calculations are imprecise, there may be rounding errors that lead to scrolling up
82-
// that should be impossible, fix that here
81+
// les calsculs sont imprecises, il peut subsiter des erreurs d'arrondis pouvant mener a un defilement vers le haut
82+
// cela ne devrait pas exister, on resouds cela ici
8383
if (scrollY < 0) scrollY = 0;
8484

8585
window.scrollBy(0, scrollY);
8686

87-
// a swift mouse move make put the cursor beyond the document end
88-
// if that happens -
89-
// limit the new Y by the maximally possible (right at the bottom of the document)
87+
// un deplacement rapide de la souris peut mettre le curseur au dela des limites du document
88+
// Si cela survient-
89+
// limite le nouveau Y (new Y) au maximum possible ( tout just au bas dudocument)
9090
newY = Math.min(newY, document.documentElement.clientHeight - dragElement.offsetHeight);
9191
}
9292

93-
// check if the new coordinates are above the top window edge (similar logic)
93+
// Controler si les nouvelles coordonnees sont au dessus des limites superieures de la fenetre ( logique similaire)
9494
if (newY < 0) {
95-
// scroll up
95+
// defile vers le haut
9696
let scrollY = Math.min(-newY, 10);
97-
if (scrollY < 0) scrollY = 0; // check precision errors
97+
if (scrollY < 0) scrollY = 0; // controler les erreurs de precisions
9898

9999
window.scrollBy(0, -scrollY);
100-
// a swift mouse move can put the cursor beyond the document start
101-
newY = Math.max(newY, 0); // newY may not be below 0
100+
//un deplacement rapide de la souris peut mettre le curseur au dela du debut du document
101+
newY = Math.max(newY, 0); // newY ne doit pas etre moins de 0
102102
}
103103

104104

105-
// limit the new X within the window boundaries
106-
// there's no scroll here so it's simple
105+
// limite le nouveau X (new X) dans les limites de la fenetre
106+
// il n'y a pas de defilement donc c'est simple
107107
if (newX < 0) newX = 0;
108108
if (newX > document.documentElement.clientWidth - dragElement.offsetWidth) {
109109
newX = document.documentElement.clientWidth - dragElement.offsetWidth;
@@ -113,4 +113,4 @@ document.addEventListener('mousedown', function(event) {
113113
dragElement.style.top = newY + 'px';
114114
}
115115

116-
});
116+
});

2-ui/3-event-details/4-mouse-drag-and-drop/2-drag-heroes/source.view/index.html

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,17 @@
88

99
<body>
1010

11-
<h2>Place superheroes around the soccer field.</h2>
11+
<h2>Placez les superhéros un peu partout dans le terrain de football.</h2>
1212

13-
<p>Superheroes and the ball are elements with the class "draggable". Make them really draggable.</p>
13+
<p>Les superhéros et la balle sont des éléments ayant la classe "draggable". Rendez les effectivement déplaçable.</p>
1414

15-
<p>Important: limit dragging by the window. If a draggable reaches window top or bottom, then the page should scroll to let us drag it further.</p>
15+
<p>Important: limitez le déplacement au niveau de la fenêtre. Si un élément déplaçable atteint le haut ou le bas de la fenêtre, alors la page doit défiler pour nous permettre de le déplacer d'avantage.</p>
1616

17-
<p>If your screen is big enough to fit the whole document -- make the window smaller to get vertical scrolling, so that you could test it.</p>
17+
<p> Si votre écran est assez large pour contenir tout le document -- rendez la fenêtre plus petite afin d'obtenir un défilement vertical, pour que vous puissiez le tester.</p>
1818

19-
<p>In this task it's enough to handle vertical scrolling. There's no horizontal scrolling usually, and it's handled the similar way if needed.</p>
19+
<p>dans cette tâche, il est suffisant de gérer le défilement vertical. Souvent, il n’y a pas de défilement horizontal, et il est géré de manière similaire au besoin.</p>
2020

21-
<p>And one more thing: heroes may never leave the page. If they reach the edge of the document, no dragging outside of it.</p>
21+
<p>Et aussi: Les héros ne doivent jamais quitter la page. S'ils atteignent le bord document, il ne doit pas avoir de déplacement en dehors de ce dernier.</p>
2222

2323
<div id="field">
2424

2-ui/3-event-details/4-mouse-drag-and-drop/2-drag-heroes/source.view/soccer.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ html, body {
1010
float: left;
1111
}
1212

13-
/* heroes and the ball (dragables) */
13+
/* heros et la balle (deplacable) */
1414

1515
.hero {
1616
background: url(https://js.cx/drag-heroes/heroes.png);

2-ui/3-event-details/4-mouse-drag-and-drop/2-drag-heroes/task.md

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,18 @@ importance: 5
22

33
---
44

5-
# Drag superheroes around the field
5+
# Glisser les superhéros à l’intérieur du terrain
66

7-
This task can help you to check understanding of several aspects of Drag'n'Drop and DOM.
7+
Cette tache peut vous aider à contrôler votre compréhension de plusieurs aspects du Glissez-déplacez et du DOM
88

9-
Make all elements with class `draggable` -- draggable. Like a ball in the chapter.
9+
Donnez tous les éléments la classe `draggable` -- déplaçable. Comme une balle dans le chapitre.
10+
Etapes requises:
1011

11-
Requirements:
12+
- Utilisez la délégation d’évènement pour détecter start: un gestionnaire d’évènement unique sur `document` pour l’évènement `mousedown`.
13+
- Si les éléments sont glisses jusqu’a aux limites supérieures ou inferieure de la fenêtre – la page défile en haut/bas pour permettre plus de déplacement.
14+
- IL n’y a pas de défilement horizontal.
15+
- Les éléments déplaçables éléments ne doivent jamais quitter la fenêtre, même si après un déplacement rapide de la souris.
1216

13-
- Use event delegation to track drag start: a single event handler on `document` for `mousedown`.
14-
- If elements are dragged to top/bottom window edges -- the page scrolls up/down to allow further dragging.
15-
- There is no horizontal scroll.
16-
- Draggable elements should never leave the window, even after swift mouse moves.
17+
La démonstration est trop longue pour être contenue ici, voici un lien de cette dernière.
1718

18-
The demo is too big to fit it here, so here's the link.
19-
20-
[demo src="solution"]
19+
[demo src="solution"]

0 commit comments

Comments
 (0)