Capítulos 61 a 82
Você pode usar os atributos min
e max
para limitar as datas inseridas em um campo de entrada date
.
<form> <label for="datemax">Data (antes de 1980-01-01):</label> <input type="date" id="datemax" name="datemax" max="1979-12-31"><br><br> <label for="datemin">Data (depois de 2000-01-01):</label> <input type="date" id="datemin" name="datemin" min="2000-01-02"> </form>
min
e max
limitam o intervalo de datas permitido.O datetime-local
permite que o usuário selecione uma data e hora local, sem fuso horário.
<form> <label for="birthdaytime">Aniversário (data e hora):</label> <input type="datetime-local" id="birthdaytime" name="birthdaytime"> </form>
datetime-local
coleta data e hora local.O email
valida endereços de e-mail e o image
permite usar uma imagem como botão de envio.
<form> <label for="email63">Digite seu e-mail:</label> <input type="email" id="email63" name="email"> </form> <form> <input type="image" src="https://via.placeholder.com/48x48?text=Enviar" alt="Enviar" width="48" height="48"> </form>
input type="email"
valida o formato de e-mail.input type="image"
utiliza uma imagem como botão de envio.O file
permite selecionar arquivos para upload e o hidden
armazena valores sem exibição visual.
<form> <label for="myfile">Selecione um arquivo:</label> <input type="file" id="myfile" name="myfile" multiple> </form> <form> <input type="hidden" id="custId" name="custId" value="3487"> </form>
file
possibilita o upload de arquivos.hidden
guarda valores que não são exibidos na interface.O month
permite selecionar um mês e ano, enquanto o number
coleta valores numéricos.
<form> <label for="bdaymonth">Aniversário (mês e ano):</label> <input type="month" id="bdaymonth" name="bdaymonth"><br><br> <label for="num65">Número:</label> <input type="number" id="num65" name="num65" value="10"> </form>
month
coleta mês e ano.number
permite entrada numérica e pode ter restrições.Utilize atributos como min
, max
, step
, pattern
e placeholder
para controlar e validar os dados inseridos pelo usuário.
<form> <label for="quantity">Quantidade (0 a 100, passo 10):</label> <input type="number" id="quantity" name="quantity" min="0" max="100" step="10" value="30"> </form>
min
, max
e step
definem intervalos e limites.pattern
e placeholder
auxiliam na validação e orientação do usuário.O range
cria um controle deslizante para selecionar valores e o search
é destinado a campos de pesquisa.
<form> <label for="vol">Volume:</label> <input type="range" id="vol" name="vol" min="0" max="100"> </form> <form> <label for="gsearch">Pesquisar:</label> <input type="search" id="gsearch" name="gsearch"> </form>
range
cria controles deslizantes para valores numéricos.search
é destinado à pesquisa de texto.Esses tipos garantem que o usuário insira dados no formato correto: telefone, tempo e URL.
<form> <label for="phone68">Telefone:</label> <input type="tel" id="phone68" name="phone" placeholder="123-45-678"><br><br> <label for="time68">Tempo:</label> <input type="time" id="time68" name="time"><br><br> <label for="url68">URL:</label> <input type="url" id="url68" name="url" placeholder="https://exemplo.com"> </form>
tel
para números de telefone;time
para seleção de hora;url
para endereços web.O week
permite que o usuário selecione uma semana e um ano.
<form> <label for="week69">Selecione uma semana:</label> <input type="week" id="week69" name="week"> </form>
week
coleta a semana e o ano.<input>
Atributos como value
, readonly
, disabled
, size
e maxlength
controlam os campos de entrada.
<form> <label for="fname70">First name:</label><br> <input type="text" id="fname70" name="fname" value="John" size="50" maxlength="50"> </form>
min
, max
, multiple
, pattern
e placeholder
Esses atributos validam e orientam a entrada do usuário.
<form> <label for="country_code">Código do país (3 letras):</label> <input type="text" id="country_code" name="country_code" pattern="[A-Za-z]{3}" title="Três letras" placeholder="Ex: BRA"> </form>
min
e max
definem intervalos.multiple
permite múltiplas seleções (em e-mail e arquivo).pattern
valida com expressões regulares.placeholder
exibe uma dica no campo.required
, step
, autofocus
e height
/width
Esses atributos melhoram a experiência do usuário, tornando campos obrigatórios, definindo intervalos e configurando foco e dimensões (para inputs de imagem).
<form> <label for="fname72">First name:</label><br> <input type="text" id="fname72" name="fname" autofocus><br> <label for="pin72">PIN (4 dígitos):</label><br> <input type="number" id="pin72" name="pin" min="0" max="9999" step="1" size="4"> </form>
required
obriga o preenchimento do campo.step
define intervalos.autofocus
posiciona o foco automaticamente.height
e width
são usados para inputs do tipo imagem.list
e autocomplete
O atributo list
vincula um campo a um conjunto de opções do <datalist>; autocomplete
ativa ou desativa sugestões automáticas.
<form> <input list="browsers73" id="browser73" placeholder="Digite ou escolha"> <datalist id="browsers73"> <option value="Edge"> <option value="Firefox"> <option value="Chrome"> <option value="Opera"> <option value="Safari"> </datalist> </form>
list
associa um <input> a um <datalist> de opções.autocomplete
ativa ou desativa sugestões automáticas.<canvas>
O <canvas>
permite desenhar gráficos dinamicamente com JavaScript.
<canvas id="canvas74" width="300" height="150" style="border:1px solid #000;"></canvas> <script> var c = document.getElementById("canvas74"); var ctx = c.getContext("2d"); ctx.fillStyle = "#FF0000"; ctx.fillRect(20, 20, 150, 100); </script>
<canvas>
Veja exemplos avançados como gradientes e efeitos no canvas.
// Exemplo de gradiente linear: var c = document.getElementById("canvas75"); var ctx = c.getContext("2d"); var grd = ctx.createLinearGradient(0, 0, c.width, 0); grd.addColorStop(0, "red"); grd.addColorStop(1, "white"); ctx.fillStyle = grd; ctx.fillRect(10, 10, c.width - 20, c.height - 20);
O SVG permite criar gráficos vetoriais escaláveis sem perda de qualidade.
<svg width="400" height="120"> <rect x="10" y="10" width="200" height="100" stroke="red" stroke-width="6" fill="blue" /> </svg>
<video>
O elemento <video>
permite incorporar vídeos na página com controles.
<video id="video77" width="320" height="240" controls> <source src="https://www.w3schools.com/html/mov_bbb.mp4" type="video/mp4"> <source src="https://www.w3schools.com/html/mov_bbb.ogg" type="video/ogg"> Seu navegador não suporta o vídeo. </video>
<audio>
O elemento <audio>
é usado para reproduzir arquivos de áudio.
<audio id="audio78" controls> <source src="https://www.w3schools.com/html/horse.mp3" type="audio/mpeg"> <source src="https://www.w3schools.com/html/horse.ogg" type="audio/ogg"> Seu navegador não suporta o áudio. </audio>
Utilize o atributo draggable="true"
e os eventos ondragstart
, ondragover
e ondrop
para permitir que elementos sejam arrastados e soltos.
<div id="div79" ondrop="drop79(event)" ondragover="allowDrop79(event)" style="width:200px; height:100px; border:1px solid black;"> Solte aqui </div> <img id="drag79" src="https://via.placeholder.com/200x100?text=Drag+Me" draggable="true" ondragstart="drag79(event)" width="200" height="100"> <script> function allowDrop79(ev) { ev.preventDefault(); } function drag79(ev) { ev.dataTransfer.setData("text", ev.target.id); } function drop79(ev) { ev.preventDefault(); var data = ev.dataTransfer.getData("text"); ev.target.appendChild(document.getElementById(data)); } </script>
draggable="true"
para tornar um elemento arrastável.ondragstart
, ondragover
e ondrop
para gerenciar o processo.A API de Armazenamento Web permite que você armazene dados localmente no navegador usando localStorage
e sessionStorage
.
// Exemplo com localStorage localStorage.setItem("nome80", "João"); document.getElementById("resultado80").innerHTML = localStorage.getItem("nome80");
localStorage
armazena dados permanentemente.sessionStorage
armazena dados apenas durante a sessão.Crie um contador de cliques que é reiniciado a cada sessão usando sessionStorage
.
if (sessionStorage.clicks) { sessionStorage.clicks = Number(sessionStorage.clicks) + 1; } else { sessionStorage.clicks = 1; } document.getElementById("resultado81").innerHTML = "Você clicou " + sessionStorage.clicks + " vez(es).";
sessionStorage
armazena dados temporários durante a sessão.Web Workers permitem que scripts sejam executados em segundo plano, sem bloquear a interface do usuário.
<!-- Exemplo com Web Worker usando Blob --> <script> var worker82; function createWorker82() { var blob = new Blob([` var i = 0; function timedCount() { i++; postMessage("Contador: " + i); setTimeout(timedCount, 500); } timedCount(); `], { type: "application/javascript" }); return new Worker(URL.createObjectURL(blob)); } function startWorker82() { if (typeof(Worker) !== "undefined") { if (typeof(worker82) == "undefined") { worker82 = createWorker82(); } worker82.onmessage = function(event) { document.getElementById("outputWorker82").innerHTML = "Worker diz: " + event.data; }; } else { document.getElementById("outputWorker82").innerHTML = "Web Workers não são suportados."; } } function stopWorker82() { if (worker82) { worker82.terminate(); worker82 = undefined; document.getElementById("outputWorker82").innerHTML = "Worker parado."; } } </script>
postMessage
e onmessage
).