Minicurso de ReactJS - Construindo um Tocador de Audiobook - Aula 6

Hashtag Programação
31 Jul 202424:24

Summary

TLDRThis video script details the development of an audiobook player in React.js, focusing on implementing core functionalities such as track switching and playback control. The tutorial covers creating functions to advance and rewind the audio track by 15 seconds, as well as adjusting the UI for better readability and user experience. The instructor also explains how to enable direct track progression by clicking on the progress bar, utilizing React's state management and HTML5 audio features to synchronize the UI with the audio playback. The script concludes with a call to action for feedback on the React.js experience compared to traditional JavaScript.

Takeaways

  • 🎥 The video is a tutorial focused on enhancing an audiobook player application using React JS.
  • 🔄 The main objective is to finalize the core functionalities of the audiobook player, including play, pause, and track switching.
  • ⏯ The tutorial addresses the issue of not being able to control the progress within the track and introduces a solution for it.
  • 🕒 A function named 'advance 15 seconds' is created to move the audio track forward by 15 seconds, demonstrating basic React state manipulation.
  • 🔧 The script explains the process of refactoring the code for better readability, emphasizing the importance of clean code practices.
  • 📖 It introduces the concept of 'props' in React, detailing how to use them to pass functions and states between components.
  • ⏪ A similar function to 'advance 15 seconds' is created for 'retract 15 seconds', showcasing the symmetry in functionality development.
  • 📊 The video explains how to use the 'useRef' hook to create a reference to the HTML progress bar, allowing for click interactions.
  • 🖱️ A new feature is introduced where clicking on the progress bar advances the audio to the corresponding time, using event handling in React.
  • 🛠️ The tutorial touches on the automatic update of the UI in React when state variables change, and how HTML5 audio properties work outside of React's state.
  • 👍 The video concludes by encouraging viewers to share their thoughts on React JS compared to traditional JavaScript and to subscribe for more programming content.

Q & A

  • What is the main focus of the video script?

    -The main focus of the video script is to demonstrate how to finalize the main functionalities of an audiobook player application using React JS.

  • What issue was addressed in the previous lesson mentioned in the script?

    -In the previous lesson, the issue addressed was the inability to control the progression within the audio track, meaning the user couldn't click and adjust their position within the track.

  • What functionality does the 'avançar 15 segundos' function in the script perform?

    -The 'avançar 15 segundos' function increases the current time of the audio track by 15 seconds, allowing the user to skip forward in the audiobook.

  • How does the script improve code readability?

    -The script improves code readability by refactoring the code to explicitly state the props being used, making it easier to identify and understand the properties at the beginning of the component.

  • What is the purpose of the 'useRef' in the script?

    -The 'useRef' is used to create a reference to the HTML elements, such as the audio tag and the progress bar, allowing the script to interact with and manipulate these elements directly.

  • How does the script handle the synchronization of the audio track with the progress bar?

    -The script uses the 'onTimeUpdate' event of the audio tag to automatically update the state variable controlling the current time, which in turn updates the progress bar and other related UI elements.

  • What is the 'retroceder 15 segundos' function and how does it differ from the 'avançar 15 segundos' function?

    -The 'retroceder 15 segundos' function decreases the current time of the audio track by 15 seconds, allowing the user to rewind the audiobook. It is the opposite of the 'avançar 15 segundos' function.

  • How does the script enable the user to jump to a specific point in the audio track by clicking on the progress bar?

    -The script calculates the new time based on the proportion of the progress bar clicked by the user, and then sets the audio track's current time to this new calculated time.

  • What is the significance of the 'offsetX' property in the script?

    -The 'offsetX' property is significant as it provides the horizontal distance from the beginning of the element where the click event occurred, which is used to calculate the new time to jump to in the audio track.

  • How does the script ensure that clicking outside the progress bar but within the container still triggers the jump function?

    -The script assigns the jump function to the 'onClick' event of the container element, ensuring that any click within the container, not just on the progress bar itself, will trigger the function.

  • What is the final functionality implemented in the script and how does it enhance the user experience?

    -The final functionality implemented allows the user to control the playback position of the audiobook by clicking on the progress bar or the container, enhancing the user experience by providing a more intuitive and flexible way to navigate the audio content.

Outlines

00:00

🎥 Introduction to Audiobook Player Development

This paragraph introduces a video tutorial focused on the development of an audiobook player in a programming context. The speaker welcomes viewers and mentions that the tutorial will continue to build upon the main functionalities of the audiobook player, which was previously started. The speaker also hints at the goal of the session, which is to finalize the player's main features, and invites viewers to watch the video after the intro sequence.

05:02

🔄 Implementing Forward and Backward Navigation

The speaker discusses the process of adding forward and backward navigation functionalities to the audiobook player. They explain how to create a function in the app.jsx file that advances the audio track by 15 seconds when called. The function utilizes the audio tag's 'currentTime' property to determine the current playback position and then increments it by 15 seconds. This feature is then integrated into the control buttons component of the application, demonstrating how to bind the new function to a button press event for advancing the audio track.

10:02

🔄 Enhancing Control with Progress Bar Interaction

The tutorial continues with the speaker explaining how to enhance the audiobook player's control by allowing users to click on the progress bar to jump to a specific point in the audio track. The speaker details the importance of using React's state to automatically update the UI components like the progress bar and time indicator when the audio 'currentTime' changes. They also demonstrate how to bind the 'onTimeUpdate' event of the audio tag to a state variable to keep the UI in sync with the audio playback.

15:04

⏮️ Creating a 15-Second Rewind Function

Building on the previous functionalities, the speaker introduces a new function to rewind the audio track by 15 seconds. They show how to create a similar function to the 'advance 15 seconds' but with the logic reversed to subtract 15 seconds from the current time. This function is then passed to the control component, specifically to the rewind button, allowing users to move back in the audio track with a single click.

20:07

🖱️ Enabling Click-to-Seek on the Progress Bar

The speaker describes the process of implementing a click-to-seek feature on the progress bar. They explain how to use the 'useRef' hook to create a reference to the progress bar element and then calculate the new playback time based on the click's position within the progress bar. The calculation involves determining the proportion of the click's horizontal offset relative to the total width of the progress bar and then applying this proportion to the total duration of the audio track to find the new current time.

🔄 Finalizing the Audiobook Player with Enhanced Controls

In the final paragraph, the speaker wraps up the tutorial by demonstrating the completed functionalities of the audiobook player. They show how users can now click on the progress bar to jump to any point in the audio track and how the player responds to forward and backward navigation commands. The speaker also addresses potential usability issues, such as accidentally clicking outside the narrow progress bar, by suggesting enhancements to make the feature more accessible. The video concludes with an invitation for feedback and a tease for future projects.

Mindmap

Keywords

💡React

React is a popular JavaScript library used for building user interfaces, particularly single-page applications. It allows developers to create reusable UI components. In the video, React is used to build an audiobook player, demonstrating its capability to handle dynamic updates and user interactions, such as changing the audio track and controlling playback.

💡Audiobook Player

An audiobook player is a software application that enables users to play, pause, and navigate through audiobooks. The script describes the development of a player with functionalities such as track switching and playback control, which are central to the user experience of listening to audiobooks.

💡Functionality

Functionality refers to the specific features or capabilities that a software program or system offers to the user. In the context of the video, functionalities such as 'advance' and 'rewind' are being implemented to enhance the user's interaction with the audiobook player.

💡Props

In React, props (short for properties) are a way to pass data from a parent component to a child component. The script mentions using props to pass functions like 'advance 15 seconds' and 'rewind 15 seconds' to child components, which are then used to control the audio playback.

💡State

State in React refers to a plain JavaScript object used to record and react to user interactions or other events. The video discusses using state to keep track of the current time of the audio track, which is crucial for features like the progress bar and playback position.

💡Refactoring

Refactoring is the process of restructuring existing computer code without changing its external behavior. In the script, the developer refactors the code to improve readability by directly using properties from props instead of the entire props object, making the code cleaner and more maintainable.

💡Progress Bar

A progress bar is a graphical representation of the progress of a task, in this case, the playback progress of an audiobook. The script describes implementing a feature where clicking on the progress bar allows the user to jump to a specific point in the audio track.

💡Event Handling

Event handling is a programming concept where certain functions are executed in response to user actions, such as clicks or key presses. The video script describes using event handling to execute functions like advancing or rewinding the audio when the user interacts with the player controls.

💡UseRef

UseRef is a React hook that allows developers to create a reference to a DOM element. In the script, useRef is used to create references to the audio tag and the progress bar, enabling the developer to directly manipulate these elements within the component.

💡Click Event

A click event is a user action that occurs when the user clicks on an element. In the video, the click event is used to trigger functions that advance or rewind the audio, as well as to calculate the new playback position when the user clicks on the progress bar.

Highlights

Introduction to the video on continuing the development of an audiobook player with main functionalities.

Review of the previous lesson where the player was set up and basic operations were functioning correctly.

The current issue with the player is the inability to control progress within the audio track.

Explanation of the need to implement functionality to advance and rewind within the audio track.

Introduction of a new function to advance the audio by 15 seconds.

Technical details on how to use the audio tag's current time property to implement the advance function.

Integration of the advance function into the control buttons component of the player.

Code refactoring for improved readability by directly using properties instead of the props object.

Explanation of the difference between state variables and regular variables in React.

Demonstration of the player's advance function working with a button click.

Discussion on the automatic update of the progress bar due to state variables.

Introduction of a similar function to rewind the audio by 15 seconds.

Explanation of how the HTML5 audio tag's native capabilities are utilized.

Implementation of functionality to jump to a specific point in the audio by clicking on the progress bar.

Technical explanation on calculating the new time position based on the click's offset within the progress bar.

Solution to ensure the progress bar click functionality works even if not clicked precisely on the bar.

Conclusion of the video with the audiobook player functionalities implemented successfully.

Invitation for feedback on the React JS experience compared to traditional JavaScript.

Closing remarks and预告 of the next video in the series.

Transcripts

play00:00

fala impressionador bem-vindo a mais um

play00:02

vídeo aqui da # programação e no vídeo

play00:05

de hoje a gente continua aqui o nosso

play00:06

Player do audiobook mas com um detalhe é

play00:09

que agora a gente vai finalizar as

play00:11

funcionalidades principais do nosso

play00:12

Player e tudo isso aqui na aula de hoje

play00:14

logo após da vinheta Então bora

play00:16

[Música]

play00:21

lá então vamos lá galera na aula passada

play00:24

a gente fez o seguinte a gente preparou

play00:26

aqui todo o nosso Player que tá aqui

play00:28

funcionando

play00:30

a gente consegue trocar a

play00:32

faixa a gente consegue fazer a troca de

play00:34

faixa a gente consegue operar tudo

play00:35

corretamente você vê que tudo funciona

play00:37

aqui bem certinho só que a gente não

play00:39

consegue fazer o controle aqui de bom

play00:42

progressão dentro da faixa isso é eu não

play00:44

consigo clicar aqui e modificar onde eu

play00:47

estou dentro da faixa não é verdade bom

play00:50

nesse caso eu tenho que fazer alguma

play00:52

coisa a respeito e é isso que a gente

play00:53

vai fazer vamos lá então para isso eu

play00:56

venho aqui no

play00:57

app.jsx e o que que eu quero fazer eu

play00:59

quero estabelecer aquelas

play01:01

funcionalidades primeiro de avançar e de

play01:03

retroceder ali dentro daquela faixa e

play01:05

você vai ver que elas são bem simples na

play01:07

verdade bem intuitivas para isso eu vou

play01:09

fazer uma função aqui aqui ó escrever

play01:12

uma nova

play01:13

função

play01:15

avançar 15 segundos beleza isso aqui é o

play01:19

nome da função não podia ser mais

play01:21

descritivo vou pegar aqui vou construir

play01:24

essa função aqui e o que que ela vai

play01:26

fazer adivinha ela vai pegar exatamente

play01:28

ela vai fazer exatamente o que a gente

play01:30

imagina que é pegar a tag de áudio tá eu

play01:34

tenho uma referência tag de áudio já

play01:35

preparada ali que a gente já preparou

play01:37

das aulas passadas tag de audio. current

play01:40

para pegar ali o elemento de fato tag de

play01:42

áudio que tem uma propriedade chamada

play01:45

current time beleza que é o tempo atual

play01:49

o tempo atual da faixa E olha que

play01:51

maravilha o tempo atual da faixa dá

play01:52

justamente Qual é o momento da faixa

play01:54

Qual é o momento que ele se encontra aí

play01:56

no tocar da faixa E se eu quero avançar

play01:59

aqui segundos eu vou simplesmente fazer

play02:01

isso aqui ó mais igual a 15 beleza super

play02:05

tranquilo super simples isso aqui que é

play02:08

o equivalente a pegar e falar que isso

play02:10

aqui que esse valor aqui vai ser

play02:12

atualizado pelo qu por isso aqui pelo

play02:14

mesmo valor acrescido de 15 entendeu

play02:17

então eu quero acrescer 15 segundos eu

play02:19

quero acrescentar 15 segundos a esse

play02:21

elemento eu vou fazer exatamente isso eu

play02:23

vou botar mais ig a 15 que é uma forma

play02:25

reduzida mais elegante de escrever isso

play02:27

aqui beleza e isso aqui olha só se eu

play02:32

pegar essa função colocar aqui passar

play02:34

aqui essa função pro nosso componente

play02:37

botões controle Então vou botar aqui ó

play02:39

avançar avançar 15 segundos é igual a eu

play02:43

vou botar aqui avançar 15 segundos Isso

play02:47

significa que agora eu tenho essa função

play02:50

sendo recebida aqui dentro desse meu

play02:53

dentro desse meu componente por meio

play02:54

desse objeto props a gente também

play02:56

aprendeu em aulas anteriores e eu vou

play02:58

até fazer um ajuste aqui no meu código

play03:00

para melhorar a legibilidade baseado

play03:02

nisso que a gente aprendeu que é o quê

play03:04

que a gente não precisa botar

play03:05

necessariamente props aqui a gente pode

play03:08

simplesmente E aí fica mais legal mais

play03:10

elegante mais bonito aqui o código mais

play03:12

legível se a gente simplesmente ao invés

play03:14

do objeto props a gente coloca já quais

play03:17

são as propriedades que a gente vai

play03:18

utilizar e aqui ó retroceder faixa tocar

play03:22

ou pausar faixa essas todas aqui que eu

play03:25

tô tirando aqui do props tá vendo tá

play03:27

tocando avançar faixa

play03:31

beleza Daniel qual é a diferença disso O

play03:35

que que é qual é a diferença do que você

play03:36

tá fazendo agora porque a gente tinha

play03:38

antes então é a mesma coisa na verdade o

play03:40

que eu tô dizendo é o seguinte aqui

play03:42

quando eu faço essa estrutura eu tô

play03:43

dizendo por isso que tem essas chaves

play03:45

aqui olha eu tô recebendo um objeto de

play03:47

props aqui E esse objeto de props Contém

play03:50

todas essas informações e essas

play03:52

informações são relevantes para mim

play03:53

então já me entrega essas informações É

play03:56

isso que eu tô dizendo eu tô

play03:57

explicitando que eu vou utilizar essas

play03:58

informações e aí Quando eu for utilizar

play04:00

nos pontos do código em que eu for

play04:02

utilizar eu não preciso escrever props

play04:04

pon nome da informação eu só invoco a

play04:06

informação direto Beleza então você vai

play04:08

ver que eu tenho uma preocupação com

play04:09

legibilidade aqui do código e isso aqui

play04:12

é mais legível né torna a estrutura mais

play04:15

legível não que anterior estivesse

play04:17

errado na verdade o resultado é o mesmo

play04:19

beleza Tá Daniel Por que que você fez

play04:22

isso exclusivamente por legibilidade do

play04:24

código e também por quê Porque agora

play04:26

como essa estrutur assim repara eu

play04:28

escrevi quatro props aqui aqui eu já

play04:30

tinha quatro props aqui que eu estava

play04:31

utilizando e eu vou adicionar uma quinta

play04:34

pô se eu quiser depois adicionar uma

play04:36

sexta prop aqui nesse componente vai ser

play04:38

mais fácil para mim ao entrar no

play04:40

componente identificar o que que já está

play04:41

presente aqui sacou porque eu já tenho

play04:43

uma listagem logo de início beleza é por

play04:46

isso que eu fiz para melhorar para

play04:47

facilitar minha vida enquanto

play04:49

desenvolvedor bom com isso aqui feito eu

play04:51

tenho acesso a essa funcionalidade aqui

play04:53

dentro desse componente que significa

play04:55

que eu posso pegar esse botão aqui por

play04:56

exemplo de Ah esse botão aqui que é o

play04:59

botão de avançar 15 segundos na faixa eu

play05:01

vou fazer o nele on Click belza on Click

play05:06

eu vou pegar eu vou acessar esse

play05:08

atributo aqui dentro dessa tag e eu V

play05:10

dizer que ele vai invocar a função

play05:11

avançar 15 segundos e aí olha só o que

play05:14

acontece

play05:18

aqui qu Gal você tá vendo aqui que tá

play05:21

funcionando tá vendo eu t clicando aqui

play05:23

eu t adicionando 15 segundos e ele tá

play05:25

respeitando ess essa adição Olha só

play05:27

cliquei aqui cliquei

play05:30

cliquei cliquei Você tá vendo que tem 15

play05:32

segundos sendo adicionado toda vez que

play05:34

eu clico agora eu quero chamar atenção

play05:36

para você chamar sua atenção para um

play05:38

detalhe muito importante que é o

play05:40

seguinte eu disse para você que o lance

play05:42

do react era fazer uma instrutura que

play05:45

reagia que atualizava automaticamente a

play05:47

página na medida em que variáveis de

play05:49

estado eram atualizadas isso aqui não é

play05:51

uma variável de estado Putz o minha tag

play05:54

de áudio não é variável de est variável

play05:57

de estado é uma variável normal que tá

play05:59

olhando para uma tag pra tag de áudio né

play06:01

A minha variável tag áudio ela tá

play06:03

olhando pra tag de áudio beleza por que

play06:06

que tá atualizando automaticamente

play06:08

porque tá né porque eu tenho aqui ó toda

play06:10

vez que eu clico aqui olha só barra de

play06:11

progresso avança o tempo aqui atualiza

play06:14

Por que que tá atualizando

play06:16

automaticamente se você dar uma olhada

play06:18

aqui ó no contêiner

play06:21

Progresso beleza no contêiner Progresso

play06:25

a gente tem aqui a definição olha do

play06:28

tempo aqui no tempo atual da faixa sendo

play06:32

usada para calcular tanto a barra ali de

play06:34

progresso quanto esse marcador de

play06:36

posição quanto o a indicação aqui de

play06:39

qual é o tempo ou seja todas essas

play06:42

informações aqui são utilizadas em

play06:44

função dessa variável de estado aqui

play06:46

beleza então essa variável de estado tá

play06:49

sendo utilizada para calcular Todas

play06:51

aquelas informações Isso é o que a gente

play06:52

fez na aula passada e o que que tá

play06:54

acontecendo também aqui no gerenciador

play06:57

de faixa a gente tem aqui essa essa

play07:00

função aqui esse atributo aqui On Time

play07:02

update O que que significa ele significa

play07:05

que quando a tag de áudio tem uma

play07:07

atualização no tempo dela E é isso que a

play07:08

gente tá fazendo porque a gente tá

play07:10

adicionando 15 segundos ela vem e

play07:12

automaticamente Define um novo valor

play07:13

para variável de estado para quê para

play07:15

sincronizar a variável de estado que tá

play07:17

controlando o tempo atual com o novo

play07:19

valor lá da tag de áudio Beleza então

play07:22

isso aqui tá atualizando a variável de

play07:25

estado e aí a variável de estado sendo

play07:27

atualizada tudo que é calculado a partir

play07:28

da variável estado também é atualizado

play07:31

beleza é por causa disso aqui que a

play07:33

gente tá conseguindo que as coisas real

play07:36

estejam todas sincronizadas tudo

play07:38

certinho beleza então é a gente tá

play07:41

usando o poder da variável de estado

play07:42

somado a uma característica a uma a um

play07:45

poder a uma capacidade do próprio HTML

play07:48

porque as funcionalidades da tag de

play07:50

áudio aqui são do próprio HTML eu tô

play07:52

tirando de lá beleza com isso entendido

play07:55

o que que eu vou fazer agora eu vou vir

play07:57

aqui pro app.jsx e eu vou fazer uma

play07:59

funcionalidade muito parecida só que é

play08:01

olha só con retroceder 15

play08:05

segundos que adivinha só vai ser uma

play08:08

função Idêntica só que ela vai fazer o

play08:11

oposto

play08:13

né current time vai ser menos igual

play08:18

menos igual 15 e aí com isso eu tenho

play08:22

aqui uma função que vai retroceder 15

play08:25

segundos na faixa de áudio toda vez que

play08:27

ela foi executada E aí o que que eu vou

play08:29

fazer vou passar essa função para esse

play08:30

componente aqui que tem os meus botões ó

play08:32

então retrocede aqui em

play08:35

segundos e aqui dentro do meu componente

play08:38

botões de controle Ah é por isso que eu

play08:41

fiz aquela aquela pequena alteração

play08:43

Aquela pequena refatoração do meu código

play08:46

beleza refatoração gente isso é um termo

play08:48

usado para quando a gente vai e quando a

play08:50

gente reescreve o código fazendo

play08:52

pequenas alterações não para mudar a

play08:53

funcionalidade não para corrigir nada

play08:55

nem para alterar nada mas só para

play08:57

melhorar a legibilidade do código aqui

play08:59

eu fiz aquela refatoração porque agora

play09:01

olha só eu tenho aqui todas essas propós

play09:02

e eu posso ver aqui que ah ah não

play09:04

Realmente eu ainda tenho que adicionar

play09:05

essa retroceder 15 segundos porque ela

play09:07

ainda não tá presente aqui eu tenho que

play09:09

dizer que ela é recebida aqui por esse

play09:12

componente por quê Porque ela sendo

play09:14

recebida Então ela pode ser utilizada

play09:16

aqui dentro do componente

play09:17

especificamente no botão de a flecha no

play09:20

sentido antihorário aqui ó Arrow Counter

play09:23

clockwise aqui um

play09:25

click E aí eu vou dizer que ele vai usar

play09:28

quando for clicado esse botão aqui vai

play09:30

retroceder 15 vai Executar a função que

play09:32

retrocede 15 segundos aí na minha faixa

play09:34

e olha só o resultado retrocedeu 15

play09:36

segundos 15 segundos 15 segundos 15

play09:38

segundos a gente tem aqui tá funcionando

play09:41

beleza pô errado bacana isso aqui na

play09:44

verdade foi até relativamente simples a

play09:46

gente conseguiu fazer aqui a

play09:47

funcionalidade de avançar e de

play09:49

retroceder aqui a faixa Pô legal Mas tem

play09:52

uma funcionalidade a mais que eu

play09:53

gostaria de colocar que é a seguinte eu

play09:54

gostaria de clicar aqui na barra de

play09:56

progresso e fazer o progresso aqui fazer

play09:58

a minha pular pro ponto em que eu

play10:00

cliquei Beleza então como é que a gente

play10:02

vai fazer isso a gente vai vir aqui no

play10:05

app.jsx primeiro de tudo eu quero

play10:08

estabelecer mais uma referência porque

play10:10

eu vou pilotar mais uma tag

play10:11

HTML então aqui ó

play10:14

const barra Progresso é igual a use

play10:20

Breath no Ou seja eu vou preparar essa

play10:23

variável para ela ter uma referência

play10:25

mais uma tag exatamente como eu fiz na

play10:27

tag de áudio ela começa com uma

play10:28

referência vazia eu vou passar essa

play10:31

referência aqui pra pro componente que

play10:34

tem a barra de progresso que é o

play10:36

componente contêiner Progresso tá então

play10:38

eu vou botar aqui ó ele tem uma nova

play10:39

propriedade referência que é igual ao

play10:42

quê Barra Progresso Ou seja eu passei

play10:45

essa variável que tem uma referência

play10:46

vazia aqui para dentro do componente

play10:48

então aqui dentro do contêiner Progresso

play10:50

eu vou fazer o seguinte eu vou dizer que

play10:52

ele recebe essa variável barra Progresso

play10:55

tá bom tá aqui barra Progresso E aí o

play10:58

que que eu quero que ele faça com ela eu

play11:00

quero que ele pegue essa div aqui ó o

play11:02

progresso Total Essa div é o que

play11:04

determina Qual é a barra de é que

play11:06

determina a barra de progresso eu vou

play11:08

dizer que ela vai estabelecer aqui ó

play11:11

ref e o que que ela vai usar como

play11:13

referência essa variável aqui barra de

play11:15

progresso então com essa estrutura aqui

play11:17

agora eu eu linki eu juntei eu conectei

play11:20

aquela variável que eu criei com use RF

play11:22

aqui nesse atributo aqui basicamente

play11:25

determinando então que aquela variável

play11:27

agora vai ter as informações dessa di E

play11:29

por que que isso aqui é importante para

play11:31

mim porque eu preciso das informações

play11:32

dessa div que é responsável pela barra

play11:34

de progresso inteira para determinar

play11:37

onde foi o meu clique sacou porque eu

play11:39

quero clicar na barra de progresso e eu

play11:41

quero que a música ou que a faixa avance

play11:44

pro ponto correspondente ao meu clique

play11:46

beleza como é que a gente faz isso vamos

play11:48

play11:49

app.jsx eu vou criar mais uma função e o

play11:52

nome da minha função vai ser avançar

play11:55

para beleza avançar para porque ele vai

play11:58

avançar para onde eu cliquei tá bom

play12:01

botar

play12:02

aqui construir aqui uma estrutura de

play12:05

função vazia e aí o que que eu quero que

play12:07

aconteça bom primeiro de tudo eu vou

play12:09

pegar a largura da minha barra de

play12:11

progresso tá porque eu vou fazer uma

play12:12

continha matemática mas que ela vai

play12:14

fazer sentido eu vou explicar PR você

play12:15

então aqui ó const largura da barra de

play12:18

progresso ela vai ser o quê Ah barra de

play12:21

progresso Ponto current beleza porque é

play12:24

aquilo é mesmo mesma forma lá que a

play12:27

gente lidava com a tag de áudio para

play12:29

quando a gente cria uma variável com

play12:30

esse use ref a gente tem um campo

play12:33

current e esse campo ele aponta pro

play12:35

elemento que a gente lincou a essa

play12:37

variável do use ref beleza ponto a gente

play12:41

vai botar aqui ó client with client with

play12:46

é uma propriedade que qualquer elemento

play12:48

HTML tem que me informa qual é a largura

play12:50

desse elemento em pixels beleza Pixel

play12:53

que é a medida ali de que é a medida ali

play12:56

de comprimento do computador então aqui

play12:58

ó largura client with beleza que tá aqui

play13:02

na referência que é uma que tá aqui na

play13:03

referência do elemento Beleza então aqui

play13:06

eu tenho a largura do elemento agora eu

play13:08

vou fazer o seguinte agora eu vou

play13:11

primeiro de tudo eu vou pegar e vou

play13:13

botar essa função aqui ó avançar para eu

play13:16

vou pegar ela e vou passar ela paraa

play13:18

barra de progresso Beleza então aqui ó

play13:19

avançar para e eu vou dizer que o

play13:22

componente contêiner Progresso tem

play13:24

acesso a essa função por quê Porque eu

play13:26

quero que essa função esteja associada

play13:31

que ela seja executada no Clique no

play13:33

momento em que ela ouviu é um clique na

play13:35

barra de progresso Beleza então aqui ó

play13:39

onclick e ele vai executar essa função

play13:42

avançar para

play13:43

beleza gente vamos lá isso aqui é do

play13:46

próprio JavaScript beleza isso aqui é do

play13:48

próprio JavaScript quando eu clico em

play13:50

algum elemento houve um evento de clique

play13:54

beleza houve um evento de clique isso é

play13:57

o a página da internet o navegador ele é

play14:00

capaz de perceber que Opa o usuário

play14:02

clicou aqui beleza então quando eu falo

play14:04

ou clique eu boto ali a função eu tô

play14:06

dizendo que o US que o o navegador

play14:10

identifica um clique naquele elemento e

play14:12

vai reagir com aquela função Beleza

play14:15

então o que que eu posso fazer bom aqui

play14:17

então todas as funções que a gente

play14:18

estava colocando a gente colocava que

play14:20

elas não recebiam nenhuma informação mas

play14:22

tem uma informação que o navegador

play14:24

disponibiliza por padrão e que a gente

play14:25

pode usar e aí a gente só precisa

play14:28

explicitar ela que é uma informação é um

play14:30

objeto com as informações desse evento

play14:32

no caso o evento de clique Então vou

play14:34

botar aqui ó evento Beleza então isso

play14:38

aqui é padrão eu podia ter usado esse

play14:40

objeto aqui em qualquer uma dessas

play14:42

outras funções aqui que eu associei a

play14:43

qualquer a todos os outros botões ali

play14:46

que eu botei funcionalidade de clique

play14:47

lembra Mas aqui é que para nenhum deles

play14:49

era necessário para esse é por quê

play14:52

Porque o que que eu vou fazer aqui eu

play14:54

vou fazer o

play14:56

seguinte conste a aqui

play15:00

ah tempo Novo Tempo beleza novo tempo

play15:04

por quê Porque eu quero pular para um

play15:05

novo tempo ali na minha faixa e como é

play15:07

que eu vou fazer esse cálculo bom eu vou

play15:09

fazer o cálculo do Novo Tempo baseado no

play15:11

seguinte eu cliquei em algum lugar ali

play15:15

da minha barra de progresso se eu

play15:16

cliquei no fim da minha barra de

play15:18

progresso bom eu cliquei lá no fim da

play15:19

minha barra de progresso se eu cliquei

play15:21

no início eu cliquei lá no início vamos

play15:23

supor que eu cliquei na metade vamos

play15:24

supor que eu cliquei na metade como é

play15:27

que eu vou identificar um eu cliquei é

play15:30

aí que entra esse elemento aqui o evento

play15:32

por o evento ele tem um campo chamado

play15:35

Native event beleza Native event e

play15:40

dentro desse Campo Native event ele tem

play15:42

um negócio aqui muito legal que é

play15:45

offset x beleza offset x o que que é

play15:49

isso offset X é o seguinte ele o evento

play15:53

o evento e aqui foi um evento de clique

play15:56

aqui no Native event ele tem explicação

play15:59

de qual é a partir do início do elemento

play16:02

onde eu cliquei quanto na horizontal eu

play16:05

andei Beleza o basicamente quanto da

play16:08

largura do elemento em pixels eu andei

play16:10

aqui do início do elemento por que que

play16:12

eu tô fazendo isso aqui isso aqui na

play16:13

verdade é uma coisa maior doida mas

play16:15

Acompanha comigo basicamente é o

play16:16

seguinte se eu tiver clicado aqui ó

play16:18

vamos supor que aqui é a metade do

play16:20

elemento vamos supor que aqui é a metade

play16:22

do elemento se eu cliquei aqui E esse

play16:24

elemento tem sei lá 1000 pixels eu

play16:26

cliquei aqui na parte aqui 500 pixels

play16:30

Beleza se aqui é a metade do elemento eu

play16:32

cliquei e ele já tem até aqui 500 pixels

play16:35

sacou então 500 pixels é a metade de

play16:37

1000 pixels beleza é isso que eu quero

play16:40

identificar quantos pixels eu já andei

play16:42

essa informação vai vir aqui para mim no

play16:44

offset x beleza essa informação vai vir

play16:47

no offset x vamos supor que aqui É 10%

play16:49

aqui da minha barra de progresso eu

play16:51

cliquei aqui então vai ser um Déo aí dos

play16:53

Tais 1000 pixels ou seja vai ser 100

play16:56

pixels sacou E aí a partir dessa

play16:58

informação do offset X eu vou calcular

play17:01

Qual é o momento da faixa que eu tenho

play17:03

que ir para qual momento da faixa eu

play17:04

tenho que ir por uma questão de

play17:06

proporcionalidade Beleza você vai ver

play17:08

isso comigo Olha só offset x ou seja

play17:12

quanto a partir do início do elemento eu

play17:15

já em que quanto a partir do início do

play17:17

elemento eu cliquei sabe em quantos

play17:19

pixels a partir do início do elemento eu

play17:21

cliquei Beleza então vou pegar esse

play17:23

elemento aqui e eu vou dividir pelo qu

play17:26

pela largura pela cura do elemento sabe

play17:30

por quê Porque isso aqui agora passa a

play17:32

não ser uma informação de pixels isso

play17:34

aqui passa a ser uma informação só de

play17:36

proporção sacou porque se eu divido pela

play17:39

largura a largura do elemento é tudo né

play17:41

é o é a largura inteira da barra vai ser

play17:43

sei lá os 1000 pixels então se eu clicar

play17:45

aqui vai ser 1000 so 1000 que dá 1 por

play17:49

quê Porque eu já tô no final eu já um é

play17:51

100% né É porque eu já andei a a barra

play17:54

inteira se eu clicar aqui sei lá se aqui

play17:56

é 60% da Barra eu cliquei aqui vai ficar

play18:00

o 600 pixels sobre 1000 pixels que dá

play18:03

0,6 que dá o 60% sacou Então eu tenho

play18:07

aqui uma proporção da faixa o quanto da

play18:09

faixa eu tô para onde percentualmente da

play18:12

faixa eu tô querendo ir saô esse

play18:13

percentual ele vai me dar essa

play18:15

informação é isso que eu quero e aí Olha

play18:17

só eu vou pegar aqui ó evento Native

play18:20

event ofs x eu vou dividir pela largura

play18:22

Isso aqui vai me dar uma informação de

play18:25

proporção aqui de onde eu quero é uma

play18:27

proporção ali da barra de Progresso de

play18:29

onde eu cliquei E aí eu vou pegar isso

play18:31

aqui e vou fazer o seguinte essa

play18:32

proporção eu vou pegar e vou multiplicar

play18:34

ela pelo tempo total da faixa sabe por

play18:39

quê Porque aí com essa proporção vamos

play18:41

supor que eu ti tinha aqui sei lá 0,6

play18:44

60% né 60% vezes o tempo total da faixa

play18:47

isso vai me gerar um novo nova

play18:49

informação do tempo que é o quê com 60%

play18:51

da faixa já completa isso aqui na

play18:54

verdade vai me dar informação de qual é

play18:56

o novo tempo que eu quero que eu quero

play18:58

estabelecer com esse meu clique sacou Se

play19:02

eu clico aqui que eu quero que aqui que

play19:05

é sei lá 60% da Barra aqui eu quero que

play19:08

ele vá para 60% da música concluída

play19:10

faltando só 40% ou seja eu quero que ele

play19:13

vá para um lugar da minha música que é

play19:14

correspondente ao lugar da Barra em que

play19:16

eu cliquei sacou Se eu clicar aqui no

play19:18

final eu quero que ele vá pro fim da

play19:20

música se eu clicar aqui no início eu

play19:22

quero que ele vá pro início da música se

play19:23

eu clicar aqui no meio Eu quero que ele

play19:25

vá pro meio da música se eu clicar aqui

play19:27

eu quero que ele vá para salá 60% da

play19:29

música se eu clicar aqui 70% da música

play19:32

sacou É isso que eu tô fazendo E aí com

play19:34

isso feito que que eu vou fazer eu vou

play19:36

pegar aqui olha só vou pegar aqui eu vou

play19:40

pegar aquele tag

play19:42

audio ponto

play19:45

current ponto current time Ou seja a

play19:48

mesma informação que eu tava usando lá

play19:50

no avançar e retroceder 15 segundos só

play19:52

que eu vou fazer o seguinte o tempo

play19:54

atual da faixa vai ser atualizado para

play19:56

quê para essa variável novo tempo aqui

play19:58

que é o Clei beleza com isso aqui feito

play20:01

Olha

play20:02

só eu tenho isso aqui então olha só isso

play20:06

aqui e gente só um segundo se não deu

play20:10

certo pera aí

play20:12

Ah tá gente bobagem olha só tá vendo

play20:16

aqui o componente contêiner barra de

play20:17

progresso aqui ó contêiner Progresso eu

play20:20

passei a variável para ele barra de

play20:21

progresso só que eu variei passei com

play20:24

esse nome aqui referência então aqui

play20:26

dentro ele tem que usar esse mesmo nome

play20:28

né referência beleza

play20:32

referência E aí aqui ele tá pegando

play20:37

referência e tá usando aqui não é barra

play20:39

de progresso beleza aqui fora no app.jsx

play20:42

é que eu falei ó esse componente espera

play20:45

uma propriedade referência e eu tô

play20:46

passando para ele a variável barra de

play20:48

progresso que vai fazer a vez Dessa

play20:50

propriedade beleza e aqui dentro tá bom

play20:52

então ele esperava a propriedade de

play20:54

referência e ele vai usar essa

play20:56

propriedade de referência Tá bom eu só

play20:57

tenho que usar aqui tudo com os nomes

play21:00

correspondentes se eu tivesse usando

play21:02

barra de progresso aqui ela teria que

play21:03

ser barra de progresso aqui para lá

play21:04

dentro eu poder utilizar barra de

play21:06

progresso lá dentro do componente mas

play21:08

com isso tudo aqui feito Vamos lá olha

play21:10

só com isso aqui feito eu tenho aqui a

play21:12

capacidade de clicar aqui na minha barra

play21:14

de progresso e ver o meu progresso sendo

play21:16

atualizado para onde eu cliquei tá vendo

play21:18

ó cliquei aqui e aí eu vi aqui o meu

play21:21

progresso sendo atualizado para onde eu

play21:22

cliquei beleza gente a gente aqui

play21:25

manipulou essas informações e conseguiu

play21:27

com isso gerar aqui aquela

play21:29

funcionalidade de clicar e aí controlar

play21:32

o momento atual da faixa baseado em onde

play21:35

a gente clicou para encerrar eu vou só

play21:37

dar uma dica aqui tá vendo que ó eu

play21:40

cliquei aqui beleza tá funcionando tudo

play21:42

certo ó cliquei aqui também mas se eu

play21:44

clicar um pouquinho aqui embaixo ele não

play21:46

vai por quê Porque eu tenho que clicar

play21:48

especificamente na barra de progresso só

play21:50

que a barra de progresso é fininha às

play21:52

vezes assim pô eu erro a mão clico ali

play21:53

um pouquinho embaixo e aí não vai como é

play21:55

que eu resolvo isso como é que eu faço

play21:57

ficar mais fácil de ar essa

play21:59

funcionalidade aqui eu posso vir aqui no

play22:01

contêiner de progresso tá vendo

play22:03

contêiner de progresso eu disse que essa

play22:06

funcionalidade de avançar a faixa ela

play22:08

vai ser executada quando eu clicar na

play22:12

barra de progresso mas olha só a

play22:15

malandragem aqui eu vou pegar esse on

play22:17

Click igual avançar para e eu vou

play22:19

colocar aqui também na tag de cima que é

play22:21

a tag container que a tag aqui section

play22:24

que é o contêiner desse componente aqui

play22:27

beleza basicamente eu T dizendo o

play22:29

seguinte que todo elemento aqui desse

play22:32

componente onde eu clicar eu vou

play22:34

conseguir executar essa função e a isso

play22:37

aqui é bom porque aqui ó eu não preciso

play22:39

clicar exatamente na barra de progresso

play22:41

eu posso clicar aqui um pouco embaixo tá

play22:42

vendo porque ele ainda responde beleza

play22:45

isso aqui é muito bom né porque às vezes

play22:46

sei lá você imagina que você tá fazendo

play22:47

um aplicativo do celular por exemplo o

play22:49

usuário às vezes ali tá com um dedo né

play22:51

operando o seu aplicativo ele erra um

play22:53

pouco né não clica exatamente ali na

play22:54

barra de progresso Mas não tem problema

play22:56

se você botou num elemento maior que a

play22:58

graça barra de progresso você garante

play23:00

que a funcionalidade vale pra Barra de

play23:02

progresso aqui ó tá valendo pra Barra de

play23:04

progresso mas tá valendo também aqui

play23:05

para baixo

play23:06

sabe beleza é isso gente a gente

play23:09

conseguiu então aqui implementar as

play23:10

funcionalidades fundamentais aqui dessa

play23:12

página a gente então fez aqui o nosso

play23:14

tocador de audiobook aqui inspirado no

play23:16

tocador do audible e é isso aqui bom

play23:19

esse é o nosso projeto feito com react

play23:22

JS Eu espero que você tenha gostado se

play23:24

você gostou deixa o seu like aproveita

play23:27

se inscreve aqui no canal para não

play23:28

perder futuros projetos que a gente vai

play23:30

lançar aqui dentro do dentro aqui do

play23:33

universo da programação e também os

play23:35

vários outros conteúdos aqui do universo

play23:37

da programação que a gente lança

play23:38

diariamente aqui no nosso canal e fazer

play23:40

o seguinte Aproveita e deixa aqui para

play23:42

mim Você gostou foi o seuu primeiro

play23:44

contato com react JS O que que você

play23:46

achou como é que você acha que o react

play23:49

funciona comparado com o JavaScript

play23:51

tradicional você preferiu um você

play23:53

preferiu o outro Fala aí para mim eu tô

play23:55

interessado em saber aí o que que vocês

play23:56

TM a dizer beleza gente é isso para essa

play23:59

aula mas a gente volta na semana que vem

play24:02

então até lá

Rate This

5.0 / 5 (0 votes)

Related Tags
React JSAudiobook PlayerProgress ControlFrontend DevelopmentUser ExperienceVideo TutorialProgrammingWeb DevelopmentState ManagementEvent Handling