├── .github ├── logo.png └── preview.png ├── README.md ├── index.html ├── index.js └── style.css /.github/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rocketseat-education/nlw-expert-html-css-js/b84307d525e191002244f947fa6fcad8fe12bfbe/.github/logo.png -------------------------------------------------------------------------------- /.github/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rocketseat-education/nlw-expert-html-css-js/b84307d525e191002244f947fa6fcad8fe12bfbe/.github/preview.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | Logo NLW Expert - Rocketseat 3 |

4 | 5 |

6 | Aplicação desenvolvida no NLW Expert da Rocketseat na trilha HTML+CSS+JS. 7 |

8 | 9 |

10 | Tecnologias   |    11 | Projeto   |    12 | Licença 13 |

14 | 15 |

16 | License 17 |

18 | 19 |
20 | 21 |

22 | Preview do projeto desenvolvido. 23 |

24 | 25 | ## 🚀 Tecnologias 26 | 27 | Esse projeto foi desenvolvido com as seguintes tecnologias: 28 | 29 | - HTML 30 | - CSS 31 | - JavaScript 32 | 33 | 34 | ## 💻 Projeto 35 | 36 | Nesse projeto você vai desenvolver um quiz pra testar os seus conhecimentos técnicos e ter um retorno sobre a quantidade de questões que você acertou. 37 | 38 | 39 | ## 📝 Licença 40 | 41 | Esse projeto está sob a licença MIT. -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | NLW Expert 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 | Logo da NLW 17 |

Teste seus conhecimentos

18 |
19 | 20 |
21 | 22 | 37 | 38 |
39 | Acertos 40 | 0 de 10 41 |
42 | 43 | 44 |
45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const perguntas = [ 2 | { 3 | pergunta: "Qual é a finalidade do comando 'console.log()' em JavaScript?", 4 | respostas: [ 5 | "Exibir uma mensagem de erro", 6 | "Imprimir dados no console", 7 | "Criar uma variável" 8 | ], 9 | correta: 1 10 | }, 11 | { 12 | pergunta: "Qual é a função do operador '===' em comparações em JavaScript?", 13 | respostas: [ 14 | "Comparação de valores sem considerar o tipo", 15 | "Atribuição de valores", 16 | "Comparação estrita de valores e tipos" 17 | ], 18 | correta: 2 19 | }, 20 | { 21 | pergunta: "Como se declara uma variável em JavaScript?", 22 | respostas: [ 23 | "let myVar;", 24 | "const myVar = 10;", 25 | "ambas as opções acima estão corretas" 26 | ], 27 | correta: 2 28 | }, 29 | { 30 | pergunta: "O que é uma função em JavaScript?", 31 | respostas: [ 32 | "Um tipo de dado", 33 | "Um bloco de código reutilizável", 34 | "Uma variável global" 35 | ], 36 | correta: 1 37 | }, 38 | { 39 | pergunta: "Qual é a diferença entre 'let' e 'const' na declaração de variáveis?", 40 | respostas: [ 41 | "Nenhuma, são sinônimos", 42 | "let é usado para valores constantes, const para variáveis", 43 | "let permite reatribuição, const cria variáveis imutáveis" 44 | ], 45 | correta: 2 46 | }, 47 | { 48 | pergunta: "O que é o DOM em JavaScript?", 49 | respostas: [ 50 | "Um método de criptografia", 51 | "Um modelo de objeto para manipular documentos HTML", 52 | "Uma linguagem de programação" 53 | ], 54 | correta: 1 55 | }, 56 | { 57 | pergunta: "Como se realiza uma iteração sobre os elementos de um array em JavaScript?", 58 | respostas: [ 59 | "Usando a estrutura 'if-else'", 60 | "Com a declaração 'switch'", 61 | "Utilizando loops como 'for' ou 'forEach'" 62 | ], 63 | correta: 2 64 | }, 65 | { 66 | pergunta: "O que é o JSON em JavaScript?", 67 | respostas: [ 68 | "Um método de formatação de texto", 69 | "Uma linguagem de estilização", 70 | "Um formato de dados leve e intercambiável" 71 | ], 72 | correta: 2 73 | }, 74 | { 75 | pergunta: "Qual é a diferença entre 'null' e 'undefined' em JavaScript?", 76 | respostas: [ 77 | "São iguais, usados de forma intercambiável", 78 | "'null' representa a ausência de valor, 'undefined' é atribuído explicitamente", 79 | "Ambos representam valores vazios" 80 | ], 81 | correta: 1 82 | }, 83 | { 84 | pergunta: "Como se adiciona um evento a um elemento HTML usando JavaScript?", 85 | respostas: [ 86 | "Apenas com CSS", 87 | "Usando o atributo 'event'", 88 | "Através do método 'addEventListener'" 89 | ], 90 | correta: 2 91 | }, 92 | ]; 93 | 94 | const quiz = document.querySelector('#quiz') 95 | const template = document.querySelector('template') 96 | 97 | const corretas = new Set() 98 | const totalDePerguntas = perguntas.length 99 | const mostrarTotal = document.querySelector('#acertos span') 100 | mostrarTotal.textContent = corretas.size + ' de ' + totalDePerguntas 101 | 102 | // loop ou laço de repetição 103 | for (const item of perguntas) { 104 | const quizItem = template.content.cloneNode(true) 105 | quizItem.querySelector('h3').textContent = item.pergunta 106 | 107 | for (let resposta of item.respostas) { 108 | const dt = quizItem.querySelector('dl dt').cloneNode(true) 109 | dt.querySelector('span').textContent = resposta 110 | dt.querySelector('input').setAttribute('name', 'pergunta-' + perguntas.indexOf(item)) 111 | dt.querySelector('input').value = item.respostas.indexOf(resposta) 112 | dt.querySelector('input').onchange = (event) => { 113 | const estaCorreta = event.target.value == item.correta 114 | 115 | corretas.delete(item) 116 | if (estaCorreta) { 117 | corretas.add(item) 118 | } 119 | 120 | mostrarTotal.textContent = corretas.size + ' de ' + totalDePerguntas 121 | } 122 | quizItem.querySelector('dl').appendChild(dt) 123 | } 124 | 125 | 126 | quizItem.querySelector('dl dt').remove() 127 | 128 | 129 | // coloca a pergunta na tela 130 | quiz.appendChild(quizItem) 131 | } 132 | -------------------------------------------------------------------------------- /style.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&display=swap'); 2 | 3 | *, 4 | :root { 5 | margin: 0; 6 | padding: 0; 7 | box-sizing: border-box; 8 | 9 | font-family: 'Inter', sans-serif; 10 | font-synthesis: none; 11 | text-rendering: optimizeLegibility; 12 | -webkit-font-smoothing: antialiased; 13 | -moz-osx-font-smoothing: grayscale; 14 | -webkit-text-size-adjust: 100%; 15 | } 16 | 17 | body { 18 | background-color: #0F172A; 19 | } 20 | 21 | main { 22 | padding: 20px; 23 | max-width: 640px; 24 | margin: 0 auto 64px; 25 | } 26 | 27 | header { 28 | margin-top: 64px; 29 | padding-bottom: 24px; 30 | border-bottom: 1px solid #334155; 31 | } 32 | 33 | header h1 { 34 | margin-top: 24px; 35 | font-size: 30px; 36 | color: #f1f5f9; 37 | } 38 | 39 | #quiz { 40 | counter-reset: quiz-item; 41 | } 42 | 43 | 44 | .quiz-item { 45 | margin-top: 24px; 46 | border: 1px solid #475569; 47 | border-radius: 6px; 48 | 49 | overflow: hidden; 50 | } 51 | 52 | .quiz-item h3 { 53 | padding: 16px 20px; 54 | color: #E2E8F0; 55 | 56 | display: flex; 57 | align-items: center; 58 | gap: 12px; 59 | 60 | background-color: #1e293B; 61 | } 62 | 63 | .quiz-item h3:before { 64 | counter-increment: quiz-item; 65 | content: counter(quiz-item); 66 | 67 | background-color: #475569; 68 | width: 28px; 69 | height: 28px; 70 | font-size: 12px; 71 | border-radius: 50%; 72 | 73 | display: flex; 74 | align-items: center; 75 | justify-content: center; 76 | flex-shrink: 0; 77 | } 78 | 79 | .quiz-item dl { 80 | padding: 20px 24px; 81 | 82 | display: grid; 83 | gap: 8px; 84 | } 85 | 86 | .quiz-item dl dt { 87 | font-size: 14px; 88 | line-height: 24px; 89 | letter-spacing: 0; 90 | 91 | display: flex; 92 | align-items: center; 93 | gap: 8px; 94 | 95 | color: #E2E8F0; 96 | } 97 | 98 | input { 99 | all: unset; 100 | border: 1px solid #94a3b8; 101 | width: 16px; 102 | height: 16px; 103 | 104 | border-radius: 50%; 105 | 106 | display: flex; 107 | align-items: center; 108 | justify-content: center; 109 | 110 | flex-shrink: 0; 111 | } 112 | 113 | input:checked { 114 | border: 1px solid #A3E635; 115 | } 116 | 117 | input:checked:before { 118 | content: ""; 119 | width: 10px; 120 | height: 10px; 121 | 122 | background-color: #A3E635; 123 | border-radius: 50%; 124 | } 125 | 126 | 127 | #acertos { 128 | text-align: center; 129 | background-color: #A3E635; 130 | 131 | position: fixed; 132 | bottom: 0; 133 | left: 0; 134 | 135 | width: 100%; 136 | padding: 12px; 137 | } --------------------------------------------------------------------------------