Advice Generator App w/ (HTML + SASS + JS + API) đšâđ»
Design comparison
Solution retrospective
đšâđ» Hello everyone. This is my solution for Advice Generator App.
This was my first project consuming an API, I learned a lot of things, but I feel that I need to study a little more about it, that is, my next projects will have API integration, after all I need to practice and learn a little more about it!
Also for the first time using babel
and webpack
I tried to make my folders as organized as possible, with babel I made my js
code accessible to all browsers! and with webpack I compiled all the modules used in the development of the project to the dist
folder! feel free to comment on how I can improve the organization!
I have added:
- đšâđ» This API has a mechanism that only accepts a request every 2 seconds, to solve this problem and the user doesn't keep clicking on the button and doesn't see any changes, I added a slightly slower animation!
Feel free to leave comments on how I can improve my code.
Thanks! đ
Community feedback
- @vandermsPosted almost 2 years ago
Adorei sua solução! Parabéns!
Sobre babel e webpack, eu achei interessante que vocĂȘ tenha optado por configurar vocĂȘ mesmo a integração dessas duas tecnologias no projeto e imagino que deve ter sido uma experiĂȘncia incrĂvel como fonte de aprendizado.
Contudo, talvez seja importante observar que mesmo em projetos vanilla (sem uso de frameworks) o usual seria usar uma solução pronta que jå vem com transpiladores, builders, preprocessadores CSS e outras funcionalidades "out of the box", como Parcel ou Vite.
Outro ponto Ă© que, embora webpack ainda seja um bundler bastante popular, nos Ășltimos anos ele tem sido visto, nĂŁo sem alguma polĂȘmica, como um tanto ultrapassado. Recentemente, por exemplo, nextjs construiu um bundler chamado turbopack com Rust que Ă© supostamente 700 vezes mais rĂĄpido que Webpack.
O que eu particularmente nĂŁo gosto do Webpack Ă© que qualquer coisa que vocĂȘ precisa adicionar ao projeto Ă© um saco para configurar. Por exemplo, se eu quiser adicionar postcss a um projeto com webpack vou perder de uma a duas horas pesquisando como fazer isso e mais duas horas tentando entender o que deu de errado :).
Enfim, mais uma vez parabéns. Continue o excelente trabalho!
Marked as helpful2@AdrianoEscarabotePosted almost 2 years ago@vanderms Obrigado Vander!
Sim, foi bem legal e diferente fazer um projeto com o babel e o webpack, confesso que eu achei ele bem demorado kkkkk é interessante saber que existem outras opçÔes e possivelmente melhores que ele.
Eu ainda sou novo nesses termos de bundler, mas valeu demais por compartilhar o seu conhecimento!
vocĂȘ Ă© brabo!
1 - @JulioCinquinaPosted almost 2 years ago
ParabĂ©ns pela solução, Adriano! đ
Ainda quero fazer esse desafio e aprender a usar o Babel e o Webpack.
Algumas sugestÔes para melhorar a acessibilidade:
1 - Usar uma borda transparente no botĂŁo (
border: 1px solid transparent
) em vez de removĂȘ-la totalmente comborder: none
. Essa borda transparente aparece quando o sistema estĂĄ no modo de alto contraste, deixando o botĂŁo mais visĂvel.2 - Indicar que o botĂŁo estĂĄ em foco para usuĂĄrios que navegam com o teclado. Aqui, bastaria remover o
outline: none
. Assim, o próprio navegador adiciona um contorno ao focar no botão com a tecla Tab. Nos meus testes, isso não alterou o visual do botão. Esse contorno pode ser personalizado através da pseudoclassefocus-visible
.E Ă© bastante comum aplicar os estilos de
:hover
Ă pseudoclasse:focus
, o que também ajuda a indicar o foco no botão ao navegar com o teclado.Um artigo sobre essa questão da borda e do contorno (focus ring): Use transparent borders and outlines to assist with high contrast mode (Andy Bell)
3 - Fazer com que o novo conselho seja lido para usuĂĄrios de leitores de tela. No momento, usando um leitor de tela, o novo texto nĂŁo Ă© lido automaticamente depois de apertar o botĂŁo; o usuĂĄrio precisa "navegar para trĂĄs" para perceber que o texto mudou.
Um jeito fĂĄcil de fazer isso Ă© colocando o atributo
aria-live="polite"
no elemento que contĂ©m o texto do conselho. Assim, o novo texto Ă© lido automaticamente depois de carregar.PorĂ©m, testando esse mĂ©todo, vi que tanto o TalkBack no Android quanto o VoiceOver no iOS leem o novo texto com a voz do idioma do sistema (portuguĂȘs, no meu caso) em vez de no idioma da pĂĄgina, entĂŁo a pronĂșncia fica estranha. Um jeito de resolver isso Ă© voltar a focar no texto apĂłs ele ser atualizado. Este vĂdeo mostra como fazer isso: Managing Focus - A11ycasts #22
Achei uma boa ideia vocĂȘ ter colocado uma animação mais demorada para simular um carregamento do texto, jĂĄ que a API tem um cachĂȘ de dois segundos.
O usuårio ainda pode sair clicando vårias vezes no botão, o que resulta em vårias requisiçÔes por segundo (veja a aba "Rede" nas DevTools).
Se quiser implementar um mecanismo no front-end para prevenir um "spam" de requisiçÔes, vocĂȘ pode desativar o botĂŁo apĂłs o clique e sĂł reativĂĄ-lo depois do tempo do seu
setTimeout()
(adicionando e removendo o atributo "disabled"):button.addEventListener("click", () => { // ... button.setAttribute("disabled", ""); setTimeout(async () => { await loadAdvice(); button.removeAttribute("disabled"); }, 960); });
Parabéns mais uma vez pela solução! Espero ter ajudado!
Marked as helpful1@AdrianoEscarabotePosted almost 2 years ago@JulioCinquina Nossa muito obrigado Julio, ajudou muito mano!
vou anotar e ler todos os links que vocĂȘ mandou S2
0 - @hernannadottiPosted almost 2 years ago
Hi @AdrianoEscarabote awesome work! Mianly the flip square animation!! But something weird with the initial load of advices, in the first second the app show us one and quickly change to no another... Can you see it ? Thanks!
Marked as helpful1@AdrianoEscarabotePosted almost 2 years ago@hernannadotti yea! I had noticed that but I forgot to fix it hahah
this is happening due to the fact that I put the
defer
attribute in the js file, and as i imported my css in it, and used webpack to compile everything when the page loads first it renders the HTML, and then the CSS and the js!Thanks for remembering!
0
Please log in to post a comment
Log in with GitHubJoin our Discord community
Join thousands of Frontend Mentor community members taking the challenges, sharing resources, helping each other, and chatting about all things front-end!
Join our Discord