Pages

Correction du DS


Réponses

Question A


a :        let parent = element.parentElement;
b,c :      parent 
d :        parent.classList.add(className);
e :        parent = parent.parentElement;


Question B


tab = [];
function run(n, selector) {
   if (n.matches(selector)) {tab.push(n);}
   for (let childElt of n.children) {
       run(childElt, selector);
 }}

Question C

images.addEventListener("click", (e) => { if (e.target.nodeName == "P") e.target.closest("article").querySelector("img").toggleAttribute("hidden"); },false);

Vidéo et commentaire



Projet

Nous allons mettre en place un tableau dynamique !

Ce dernier projet regroupe l'ensemble de nos connaissances sur le DOM.

En particulier, nous verrons l'ajout

  • de nouveaux éléments
  • d'attributs
  • de classes
  • d'évènements
Voici une vue animée de notre application : 

La force de notre code est de prendre un code HTML vierge de tout marqueur de classe.

C'est le JS qui met en place les fonctionnalités de l'application.

Vidéo commentée


Le code 

Voici les code en détail : lien

Aide au DS : un grand classique

Mise en place un menu dynamique.




Entrainez vous à écrire le code JS

 

Vous allez pouvoir comparer votre code avec de nouvelles propositions !

 Amélioration 1

 

Amélioration 2


Voici un code qui permet de réduire le code JS.
Nous appliquons la règle suivante :

  1. .menu li ul {
  2.   display : none;
  3. }

Amélioration 3


Amélioration 4




Pour info : bootstrapTheme

Aide aux revisions


Révisions

La partie Grid ne sera pas au DS. 

Les partie DOM avec les événements et parcours sont à cibler.

Aides

Structure du DOM

Voici pour commencer trois vidéos reprenant le parcours dans l'arbre  vidéos

le code de la vidéo : code et une amélioration : code

Vous pourrez finalement testez vos connaissances ( lien )

DOM

Voici une série de question sur le vocabulaire du DOM (lien)


Retrouvez le programme des cours  lien

Semaine du 16 au 20

 Cours

La délégation

En action

 


Code en action

Vous trouverez les codes des vidéos : 

https://codepen.io/dupontcodepen/pen/GRqYRro

https://codepen.io/dupontcodepen/pen/gOMqwjL


TD

Introduire la délégation dans le code https://codepen.io/dupontcodepen/pen/mdExbWm 

pour pouvoir avoir plusieurs couples énoncés/solutions.

Remarques :

Pour information, la délégation est si importante, que nous pouvons dans des applications métiers PRO, créer des fonction de haut niveau.

https://codepen.io/dupontcodepen/pen/eYzxdeL


Semaine du 9 au 13

 Cours : les événements

https://dupontl2.blogspot.com/2020/11/event-video.html

TD

https://dupontl2.blogspot.com/2020/11/td-semaine-du-9-au-15.html

DM

https://dupontl2.blogspot.com/2020/11/dm-image.html

En savoir plus

https://dupontl2.blogspot.com/2020/11/allez-plus-loin.html

Allez plus loin

Voici le code pour remplacer les images par des vidéos.




code : Mes vidéos

Comment mettre en ligne vos propres vidéos 👉explications 












DM : image



Aide : 
CSS : Définir votre grille dense 👉 code DOM + JS : Compléter le codepour un ensemble d'images 👉 code

En action l'idée est de réaliser une application aux comportement suivant :



Remarque


Pour agrandir simplement une image : scale( ) 

En action


On peut reprendre le projet en remplaçant les images par des vidéos. 👉 en action

En savoir plus


Dans la vidéo je vous parle de reconnaissance d'images https://www.clarifai.com/









TD : semaine du 9 au 15

Découvrir le DOM ( lien )


Nous corrigerons les TD DOM ( lien )

ex 1 : https://youtu.be/8n8ohTjbbY4?t=192
ex 2 : https://youtu.be/8n8ohTjbbY4?t=654
ex 3 : https://youtu.be/8n8ohTjbbY4?t=900
ex 4 : https://youtu.be/8n8ohTjbbY4?t=1624
ex 5 : https://youtu.be/6aD4VSUMoEg?t=1
ex 6 : https://youtu.be/6aD4VSUMoEg?t=356
ex 7 : https://youtu.be/6aD4VSUMoEg?t=661
ex 8 : https://youtu.be/hPvJVEzEVro


En pratique



N.B.

Juste pour information, dans le TD5, j'évoque une fonction pour générer une couleur aléatoire :

Voici un code possible:  

'#'+'0123456789abcdef'.split('').map(function(v,i,a){ return i>5 ? null : a[Math.floor(Math.random()*16)] }).join('');

Pour comprendre ce code ( lien )

En action : lien

Et comme un code n'est jamais unique, voici une autre version En action : lien

Event : Vidéo



Semaine du 2 au 9

 Pas de cours nouveau cette semaine.

Je viens de vous rédiger une longue correction du projet avec des problèmes intéressants. lien




Préparation au DS

JS splice en action

Etude de splice


splice retire ou ajoute des éléments d'un tableau.


Son utilisation est fort utile. 


En action


  1. let e = [2,3,4],
  2.      t =  [0,2,2,6,1,3];

  3. function notIn(array1,array2) {

  4.   for (let i=0 ; i < array1.length; i++) {

  5.      for (let j=0 ; j < array2.length; j++) {
  6.         if ( array1[i] == array2[j]){
  7.            array2.splice(j--, 1);
  8.         }
  9.      }
  10.   }
  11. }

  12. notIn(e,t);

  13. console.log(t);

Cas des ensembles

Si nous utilisons des ensembles, le code se confond à l'algorithme.
  1. function difference (setA, setB) {
  2.   let dif = new Set(setA);
  3.   for (let elem of setB) {
  4.     dif.delete(elem);
  5.   }
  6.   return dif;
  7. }
lig.4  : On retire les éléments de l'ensemble A qui sont dans l’ensemble B.

Aide au projet

https://dupontdistanciel.blogspot.com/2020/10/aide-au-ds-parcours-du-dom.html

Projet DOM

 Ecrire le code pour parcourir l'ensemble des éléments d'une page.


En action Ecrire le code JS qui permet d'afficher le nombre de balises par type !

En action :

Injecter le code dans la console d'une page HTML prise au hasard.


allTag=(a=>{let b=[],c={};return _explore=(a=>{for(let c of a.children)b.push(c.nodeName),_explore(c)}),_explore(a),_getWordCnt=(a=>{return a.reduce(function(a,b){return a[b]=a[b]+1||1,a},[])}),c=_getWordCnt(b),_sort=(a=>{let b=[],c=Object.keys(a).sort((b,c)=>a[c]-a[b]);for(var d of c)b[d]=a[d];return b}),_sort(c)});let a=allTag(document.body);for(var b in a){a.hasOwnProperty(b)&&console.log(`la balise ${b} apparaît ${a[b]} fois `)};

Puis tapez >a;



Rappels

 Élément

Voici le vocabulaire a connaitre pour se déplacer dans le DOM/élément !


 Node


On pourra utiliser également le vocabulaire suivant au niveau Nœud  !




Parcours du DOM

Ecrire une fonction de parcours du DOM : printDomEle



HTML
utiliser hemmet pour générer le code html : 

<body>
article{article $}>section{section $}*2>p{para $}*3(puis Tab)
</body>


JS
fonctions utiles :   console.groupCollapsed(); console.groupEnd();
on utilise children pour avoir les enfants d'un nœud élément.
on utilise for of pour réaliser une boucle

printDomEle(document.body);


Voici le résultat que vous devez obtenir :

Projet : améliorer son style !

projet

Vidéo 1H /

https://dupontdistanciel.blogspot.com/

JS

 


DS

Défi pour ce WE

 Soit le HTML


<div class="conteneur" style="width: 400px; height: 400px;">
   <div id="it1">A</div>
   <div id="it2">B</div>
   <div id="it3">C</div>
   <div id="it4">D</div>
</div>

Imaginer le résultat du CSS suivant


.conteneur {
    display: grid;
    grid-template-columns: repeat(2, 100px);
 }

#it4 {
grid-column-end : 1
}

Imaginer le résultat du CSS suivant



#it1 { 
   grid-row : 2;
   grid-column : 2/3;
}

#it2 {
   grid-column : span 2;
}

#it3 {
  grid-row : 1;
}

Pour un flux row, les blocs sont traités dans l'ordre 1 (fixe row/col),3(fixe row),2(ordre flux),4(ordre flux)

 .wrapper {

    display: grid;

    grid-template-columns: repeat(4, 1cm);

    grid-auto-rows: 1cm;

    grid-gap: 0.1cm;

    grid-auto-flow: row;

}

div:nth-child(1) {

  grid-column: 3 / 5;

  grid-row: 2 / 5;

}

div:nth-child(2) {

  grid-column: 1 / 3;

  grid-row: 1 / 3;

}

div:nth-child(3) {

  grid-row-end: span 1;

}


div:nth-child(4) {

 grid-column-end: span 2;

}



Dessiner le résultat du placement des ces quatre div dans le wrapper



















































Vidéodistanciel

https://dupontdistanciel.blogspot.com/

Grid en folie !

https://codepen.io/collection/DgwjNL/

Projets : grid

Vous allez trouver trois projets : grid en action

Simulateurs

 Vous pouvez utiliser le simulateur Grid à tout moment  ( ici )

Code du simulateur de Grid : télécharger

Cours : Grid distanciel !

Nous avons conçu avec Mozilla un cours spécialement pour le distanciel. Il est fait pour vous. ( cours en D.)


 

Objectif du cours

Distanciel

Comment allons nous gérer le cours ?

Pour ne pas créer de complications supplémentaires, voici comment je vais organiser les deux prochains cours du vendredi 11 et 18 septembre.

Vendredi 11/09 : 

Présentiel : Après une courte introduction, nous introduirons Grid ! Une révolution CSS.

Distanciel : liens sur des Vidéos sur Grid à voir dans la semaine !

Vendredi 18/09 : 

Présentiel : Après une courte introduction, nous introduirons Grid ! Une révolution CSS.

Distanciel : liens sur des Vidéos sur Grid à voir dans la semaine !