Professional Documents
Culture Documents
232
Na categoria Embedded, h elementos que importam
outra fonte de informao para o documento.
audio
canvas
embed embed
iframe
img
math
object
svg
video
233
Interactive Interactive Content Content so elementos que fazem parte da interao de
usurio.
(Incluem elementos Phrasing content e Embedded content)
a
audio (se o atributo control for utilizado)
button
details
embed embed
iframe
img (se o atributo usemap for utilizado)
input (se o atributo type no tiver o valor hidden)
keygen
label
menu (se o atributo type tiver o valor toolbar)
object (se o atributo usemap for utilizado)
select
textarea
video (se o atributo control for utilizado)
234
O atributo autofocus pode ser especificado nos elementos input (exceto quando h
atributo hidden atribudo), textarea, select e button.
A tag a passa a suportar o atributo media como a tag link.
A tag form ganha um atributo chamado novalidate. Quando aplicado o formulrio pode ser
enviado sem validao de dados.
O elemento ol ganhou um atributo chamado reversed. Quando ele aplicado os
indicadores da lista so colocados na ordem inversa, isto , da forma descendente.
O elemento fieldset agora permite o atributo disabled. Quando aplicado, todos os filhos de
fieldset so desativados.
O novo atributo placeholder pode ser colocado em inputs e textareas. O novo atributo placeholder pode ser colocado em inputs e textareas.
O elemento area agora suporta os atributos hreflang e rel como os elementos a e link
O elemento base agora suporta o atributo target assim como o elemento a. O atributo
target tambm no est mais descontinuado nos elementos a e area porque so teis
para aplicaes web.
Os atributos abaixo foram descontinuados:
O atributo border utilizado na tag img.
O atributo language na tag script.
O atributo name na tag a. Porque os desenvolvedores utilizam ID em vez de name.
O atributo summary na tag table.
235
Este atributos foram descontinuados porque modificam a formatao do elemento e
suas funes so melhores controladas pelo CSS:
align como atributo da tag caption, iframe, img, input, object, legend, table, hr, div, h1, h2, h3, h4, h5, h6, p, col,
colgroup, tbody, td, tfoot, th, thead e tr.
alink, link, text e vlink como atributos da tag body.
background como atributo da tag body.
bgcolor como atributo da tag table, tr, td, th e body.
border como atributo da tag table e object.
cellpadding e cellspacing como atributos da tag table.
char e charoff como atributos da tag col, colgroup, tbody, td, tfoot, th, thead e tr.
clear como atributo da tag br.
compact como atributo da tag dl, menu, ol e ul.
frame como atributo da tag table.
frameborder como atributo da tag iframe.
height como atributo da tag td e th.
hspace e vspace como atributos da tag img e object.
marginheight e marginwidth como atributos da tag iframe.
noshade como atributo da tag hr.
nowrap como atributo da tag td e th.
rules como atributo da tag table.
scrolling como atributo da tag iframe.
size como atributo da tag hr.
type como atributo da tag li, ol e ul.
valign como atributo da tag col, colgroup, tbody, td, tfoot, th, thead e tr.
width como atributo da tag hr, table, td, th, col, colgroup e pre.
236
rev e charset como atributos da tag link e a.
shape e coords como atributos da tag a.
longdesc como atributo da tag img and iframe.
target como atributo da tag link.
nohref como atributo da tag area.
profile como atributo da tag head.
version como atributo da tag html. version como atributo da tag html.
name como atributo da tag img (use id instead).
scheme como atributo da tag meta.
archive, classid, codebase, codetype, declare e standby
como atributos da tag object.
valuetype e type como atributos da tag param.
axis e abbr como atributos da tag td e th.
scope como atributo da tag td.
237
Nessa nova verso da HTML, os formulrios
ganharam recursos muito interessantes e
importantes para otimizao do trabalho.
Por exemplo, possvel fazer validao de
campos sem o uso de JavaScript, fazer validao campos sem o uso de JavaScript, fazer validao
atravs de ER (expresses regulares) diretamente
no cdigo HTML entre muitas outras.
Em HTML 4, as validaes de campos so feitas
atravs de Javascript.
238
Data
Esse campo abre um calendrio para escolher a date.
<input name="calendario" type="date" />
Nmeros
Esse campo permite adicionar somente nmeros como valores, e ainda
possvel limitar os valores mnimo e mximo a serem inseridos, utilizando os
atributos min e max.
<input name="numero" type="number" /> <input name="numero" type="number" />
URL
Exibe um campo com validao para a insero de URLs.
<input name="site" type="url" />
Email
Campo usado para inserir e fazer a validao de um endereo de e-mail.
<input name="email" type="email" />
239
Slider
Exibe uma rgua onde possvel setar um valor. Os atributos min e max limitam a
faixa de valores, e o atributo step informa a progresso dos valores,.
<input name="faixa" type="range" min="5" max="50" step="5" />
Pesquisa
Cria um campo para pesquisas.
<input name="pesquisar" type="search" />
Paleta de Cores
Cria uma paleta de cores.
<input name="cores" type="color" />
Telefone
Esse campo permite adicionar um nmero de telefone
(pode ter problema j que o formato dos telefones no um padro mundial).
<input name="telefone" type="tel" />
240
Autofocus
Se informado esse atributo no campo, ele receber o foco assim que a pgina for carregada no navegador.
<input name="pesquisar" type="search" autofocus />
Autocomplete
Se esse atributo estiver como "on", ento ele habilita um autocompletar para o campo.
<input name="pesquisar" type="search" autocomplete="on" />
Placeholder
Esse atributo oferece uma dica para auxiliar o usurio no preenchimento do campo.
<input name="pesquisar" type="search" placeholder="Pesquisar" />
Pattern
Esse atributo tem a funo de fazer uma validao com base em uma expresso regular.
<input name="valor" type="number" pattern="[0-9][a-z]{10}" />
Required
O campo ser obrigatrio, no sendo executado o submit do formulrio enquanto ele no for preenchido.
<input name="pesquisar" type="search" required />
241
<form>
<fieldset>
<legend>Formulrio com HTML 5</legend>
<label for="nome">Nome:</label>
<input name="nome" type="text" required autofocus /><br />
<label for="email">Email:</label>
<input name="email" type="email" placeholder="mail@provider.com" /><br />
<label for="nascimento">Data Nasc.:</label>
<input name="nascimento" type="date" /><br />
<label for="site">Site:</label>
<input name="site" type="url" /><br />
<label for="cor">Cor:</label>
<input name="cor" type="color" /><br />
<label for="satisfacao">Satisfao:</label>
<input name="satisfacao" type="range" min="5" max="50" step="5" /><br />
<input name="Salvar" type="submit" value="Salvar"/>
</fieldset>
</form>
242
At recentemente no existia uma maneira
semntica de marcar, no HTML, o contedo de
uma legenda.
<figure>
<img src="../img/HTML5.png" alt="HMTL5">
243
<figcaption>HTML 5, a nova cara da Internet!</figcaption>
</figure>
figcaption substitui legend, que
tambm uma tag nova do HTML5
<figure>
<img src="../img/kookaburra.jpg" alt="Kooaburra">
<img src="../img/pelican.jpg" alt="Pelicano na praia">
<img src="../img/lorikeet.jpg" alt="Papagaio">
<figcaption>
Pssaros Australianos. Da esquerda para direita, Kookburra, Pelicano e Papagaio.<br />
Originais por <a href="http://www.flickr.com/photos/rclark/">Richard Clark</a>
</figcaption>
</figure>
244
Com HTML5, usar vdeos ficou ainda mais simples.
<video width="320" height="240" controls="controls">
<source src="../video/movie.ogg" type="video/ogg" />
</video>
possvel colocar um nico formato de vdeo, mas ainda no existe um possvel colocar um nico formato de vdeo, mas ainda no existe um
formato que seja compatvel com todos os browsers.
O parmetro controls determina se os controles do player (com botes
play, pause, ...) dever ser apresentado.
245
<video width="320" height="240" controls="controls">
<source src="../video/movie.mp4" type="video/mp4" />
<source src="../video/movie.ogg" type="video/ogg" />
<source src="../video/movie.webm" type="video/webm" />
Infelizmente Seu Navegador No suporta Vdeos na Tecnologia HTML5.
</video>
Apesar do trabalho extra para converter os vdeos em diferentes formatos,
esta ainda a nica forma de garantir que seu vdeo seja exibido para
todos os browsers.
246
Para indicar ao navegador o container e codecs de determinado
arquivo, usa-se o atributo type, no formato:
type= "MIME-type" codecs="codec de vdeo, codec de udio"
Por exemplo, um vdeo em Ogg, usando os codecs Theora e Vorbis,
ter seu source assim:
<source src="video.ogg" type="video/ogg" codecs="theora, vorbis"> <source src="video.ogg" type="video/ogg" codecs="theora, vorbis">
Com MPEG-4 a coisa um pouco mais complicada, por que preciso
indicar ao navegador tambm o profile do codec de vdeo utilizado.
Veja um exemplo:
<source src="video.mp4" type="video/mp4" codecs="mp4v.20.240, mp4a.40.2">
ATENO: se o codec no estiver instalado, o udio/vdeo no ser ouvido/exibido.
247
Para inserir udio em uma pgina web, basta usar o elemento audio:
<audio src="musica.ogg" controls="true" autoplay="true" />
O valor de controls define se um controle de udio, com botes de play,
pause, volume, barra de progresso, contador de tempo, etc. ser exibido na
tela.
Se for setado como false, ser preciso controlar o player via javascript, com
248
Se for setado como false, ser preciso controlar o player via javascript, com
mtodos como play() e pause().
O valor de autoplay define se o udio vai comear a tocar assim que a pgina
carregar.
Formatos:
ogg Firefox e Chrome
mp3 Internet Explorer e Chrome
<audio id="demo" src="../audio/musica.mp3"></audio>
<div>
<button onclick="document.getElementById('demo').play()">
Reproduzir o udio</button>
<button onclick="document.getElementById('demo').pause()">
Pausar o udio</button> Pausar o udio</button>
<button onclick="document.getElementById('demo').volume+=0.1">
Aumentar o volume</button>
<button onclick="document.getElementById('demo').volume-=0.1">
Diminuir o volume</button>
</div>
249
Todo browser deveria suportar o codec livre
OggVorbis, mas, infelizmente, isso no a realidade.
Ento, preciso saber como oferecer um formato
alternativo de udio.
Fazemos assim:
<audio controls="true" autoplay="true"> <audio controls="true" autoplay="true">
<source src= "../audio/musica.ogg" />
<source src= "../audio/musica.mp3" />
<source src= "../audio/musica.wma" />
</audio>
250
http://foo.com/video.ogg#t=10,20
Especifica que o intervalo entre 10 e 20 segundos deve ser
reproduzido.
http://foo.com/video.ogg#t=,10.5
Especifica que o vdeo deve ser reproduzido do incio at 10,5
segundos.
http://foo.com/video.ogg#t=,02:00:00
Especifica que o vdeo deve ser reproduzido do incio at 2
horas.
http://foo.com/video.ogg#t=60,
Especifica que o vdeo deve comear aos 60 segundos e ser
reproduzido at o final.
251
O elemento canvas, novidade do HTML 5, permite que a
informao para a construo de imagens baseadas em pixels seja
inserida diretamente no cdigo do documento.
O elemento canvas apenas delimita em que local da tela isto
acontece. O processo de desenho controlado por uma API
especfica para este elemento que interage com JavaScript.
Por enquanto, as imagens criadas so objetos em duas dimenses
(2D), mas j existem experimentos para construo de objetos 3D
com a API Canvas.
252
fillStyle
define a cor de fundo do polgono.
strokeStyle
define a cor da borda do polgono.
clearRect
apaga uma rea retangular.
x, y
definem a posio no canvas.
fillRect
retngulo com fundo preenchido.
strokeRect
retngulo com a borda preenchida.
width, height
definem o tamanho do retngulo.
lineWidth
altera a espessura das bordas.
253
CSS:
canvas#figura{
border:#000 medium dashed;
}
JAVASCRIPT:
function desenhar(){
var desenho = document.getElementById('figura');
var context = desenho.getContext('2d');
context.fillStyle = '#00FFFF'
context.fillRect(50,50,200, 200);
}
HTML:
<canvas id="figura" width="300" height="300"></canvas>
<br /><button onClick="desenhar()">Desenhar</button>
254
JAVASCRIPT:
function desenhar(){
var desenho = document.getElementById('figura');
var context = desenho.getContext('2d');
context.fillStyle = '#264761';
context.strokeStyle = '#9233A7';
context.lineWidth = 4;
// Ordem dos argumentos: (x, y, width, height)
context.fillRect (100, 100, 100, 25);
context.strokeRect(100, 135, 100, 25);
context.fillRect (100, 170, 100, 25);
context.clearRect (120, 180, 60, 20);
}
255
JAVASCRIPT:
function desenhar(){
var desenho = document.getElementById('figura');
var context = desenho.getContext('2d');
var myGradient = context.createLinearGradient(0, 0, 300, 0);
myGradient.addColorStop(0, "black");
myGradient.addColorStop(1, "white");
context.fillStyle = myGradient;
context.fillRect(0,0,300, 300);
}
256
(0, 0, 300, 0) (0, 0, 0, 300) (0, 300, 0, 0) (300, 0, 0, 0)
beginPath
Permite criar formas
personalizadas no canvas.
moveTo
Define a posio inicial do
polgono.
fill
Preenche o fundo do
polgono (se estiver
fechado)
stroke
lineTo
Cria uma linha.
arc
Desenha um crculo ou arco.
stroke
Pinta a borda do polgono
closePath
para finalizar nosso path.
257
JAVASCRIPT:
function desenhar(){
var desenho = document.getElementById('figura');
var context = desenho.getContext('2d');
context.beginPath();
context.moveTo( 50, 100);
context.lineTo(150, 225);
context.lineTo(250, 100); context.lineTo(250, 100);
context.lineTo( 50, 100);
context.closePath();
context.fillStyle = '#264761';
context.strokeStyle = '#9233A7';
context.lineWidth = 4;
context.fill();
context.stroke();
}
258
JAVASCRIPT:
function desenhar(){
var desenho = document.getElementById('figura');
var context = desenho.getContext('2d');
context.beginPath();
context.moveTo(150,50);
context.lineTo(220,250)
context.lineTo(50,125)
context.lineTo(250,125) context.lineTo(250,125)
context.lineTo(80,250)
context.lineTo(150,50)
context.closePath();
context.fillStyle='#FFFF00';
context.strokeStyle='#FF0000';
context.fill();
context.stroke();
}
259
JAVASCRIPT:
function desenhar(){
var desenho = document.getElementById('figura');
var context = desenho.getContext('2d');
context.strokeStyle='#FF0000';
context.beginPath();
context.moveTo(1,1);
for (i=0;i<300;i+=5){
if((i%2)!=0){
context.lineTo(i+5,i);
}else{
context.lineTo(i,i+5);
}
}
context.stroke();
context.closePath();
}
260
Desenhar um grid de 300 pixels formado por
quadrados de 15 pixels cada.
261
arc(x, y, raio, angulo_inicio, angulo_final, sentido_anti_horario)
Os parmetros x, y correspondem s coordenadas do centro do arco.
O parmetro raio o nmero de pxels que tem o arco como raio.
Por sua parte ngulo_incio e ngulo_final so os ngulos onde comea e acaba
o raio. Esto tomados como se o eixo da horizontal tivesse o ngulo zero.
Sentido_anti_horario um parmetro booleano, onde true significa que o trao vai
desde um ngulo de incio ao do fim no sentido contrrio dos ponteiros do relgio. desde um ngulo de incio ao do fim no sentido contrrio dos ponteiros do relgio.
False indica que esse caminho em direo contrria.
262
Para conveter graus em radianos, use:
var radians = (Math.PI/180)*degrees;
JAVASCRIPT:
function desenhar(){
var desenho = document.getElementById('figura');
var context = desenho.getContext('2d');
context.strokeStyle = '#FF8A00';
context.lineWidth = 4;
context.beginPath();
context.arc(75,75,45,0,Math.PI*2,true); //Rosto
context.moveTo(110,75);
context.arc(75,75,35,0,Math.PI,false); //Sorriso
context.moveTo(65,65);
context.arc(60,65,5,0,Math.PI*2,true); //Olho Esquerdo
context.moveTo(95,65);
context.arc(90,65,5,0,Math.PI*2,true); //Olho Direito
context.stroke();
context.closePath();
}
263
JAVASCRIPT:
function desenhar(){
var desenho = document.getElementById('figura');
var context = desenho.getContext('2d');
context.fillStyle = '#FF8A00';
context.beginPath();
context.moveTo(10,60)
context.quadraticCurveTo(10,10,60,10);
context.lineTo(120,10);
context.lineTo(120,50);
context.quadraticCurveTo(120,110,60,110);
context.lineTo(10,110);
context.fill();
}
264
Desenhar a bandeira do Brasil.
265
JAVASCRIPT:
function desenhar(){
var desenho = document.getElementById('figura');
var context = desenho.getContext('2d');
context.font = "bold 24px sans-serif";
context.textAlign = "center";
context.fillText("HTML 5", 150, 50);
context.fillStyle='#FF0000';
context.textAlign = "right";
context.textBaseline = "bottom";
context.fillText("Canvas", 295, 295);
}
266
JAVASCRIPT:
function desenhar(){
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
var rectWidth = 300;
var rectHeight = 300;
context.translate(canvas.width/2, canvas.height/2);
context.scale(0.75, 0.75);
context.fillStyle = 'blue';
context.fillRect(rectWidth/-2, rectHeight/-2, rectWidth, rectHeight);
context.rotate( (Math.PI / 180) * 45);
context.scale(0.25, 1);
context.fillStyle = 'yellow';
context.fillRect(rectWidth/-2, rectHeight/-2, rectWidth, rectHeight);
}
267
JAVASCRIPT:
function desenhar() {
var canvas = document.getElementById("figura");
var context = canvas.getContext("2d");
var img = new Image();
img.src = "../img/HTML5.png";
img.onload = function() {
context.drawImage(img, 1, 1); context.drawImage(img, 1, 1);
}
}
268
JAVASCRIPT:
function desenhar() {
var canvas = document.getElementById("figura");
var context = canvas.getContext("2d");
var img = document.getElementById("html5"); var img = document.getElementById("html5");
context.drawImage(img, 1, 1); //imagem tamanho original
context.drawImage(img, 225, 225, 64, 64); //imagem redimensionada
}
HTML:
<img id="html5" src="../img/HTML5.png" style="display:none;">
<canvas id="figura" width="300" height="300"></canvas><br />
<button onClick="desenhar()">Desenhar</button>
269
<!DOCTYPE HTML>
<html>
<head>
<style>
#myCanvas { border: 1px solid #9C9898; }
</style>
<script>
var run, canvas, content;
var x = 5;
var y = 15;
var dir = 5;
function update() {
x += dir;
if(x <= 0 || x >= 470){
dir = -dir;
}
}
270
function draw() {
context.fillStyle = "#0000FF";
context.clearRect(0, 0, 500, 60);
context.fillRect(x, y, 30, 30);
}
function animate() {
update();
draw(); draw();
}
function load() {
canvas = document.getElementById("myCanvas");
context = canvas.getContext("2d");
draw();
}
function play() {
if(!run) run = setInterval('animate()',10);
}
271
function stop() {
clearInterval(run);
run = null;
}
</script>
</head>
<body onLoad="load();">
<canvas id="myCanvas" width="500" height="60"></canvas>
<br />
<a href="javascript:stop();">Stop</a> |
<a href="javascript:play();">Play</a>
</body>
</html>
272
<!DOCTYPE HTML>
<html>
<head>
<style>
#div1, #div2 {
border: 1px solid #CCCCCC;
height: 50px;
width: 50px; width: 50px;
margin-bottom: 5px;
}
#img {
height: 50px;
width: 50px;
}
</style>
273
No exemplo, possvel arrastar
a imagem entre duas DIVs
<script>
function dragover(ev) {
ev.preventDefault();
}
function drag(ev) {
ev.dataTransfer.setData("Text",ev.target.id);
}
function drop(ev) {
ev.preventDefault();
var data=ev.dataTransfer.getData("Text");
ev.target.appendChild(document.getElementById(data));
}
</script>
</head>
<body>
<div id="div1" ondrop="drop(event)" ondragover="dragover(event)">
<img id="img" src="p.gif" draggable="true" ondragstart="drag(event)"/>
</div>
<div id="div2" ondrop="drop(event)" ondragover="dragover(event)"></div>
</body>
</html>
274
<!doctype html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title>Paint</title>
<script src="paint.js"></script>
</head>
<body>
<canvas id="paint" style="border: 1px solid #CCCCCC;"> </canvas>
</body>
</html>
275
window.onload = function () {
var paint = document.getElementById("paint");
var ctx = paint.getContext("2d");
paint.setAttribute("width", 500);
paint.setAttribute("height", 300);
var desenhando = false;
paint.onmousedown = function (e) { paint.onmousedown = function (e) {
if (e.pageX || e.pageY) {
x = e.pageX;
y = e.pageY;
} else {
x = e.clientX;
y = e.clientY;
}
ctx.moveTo(x, y);
desenhando = true;
} 276
paint.onmouseup = function () {
desenhando = false;
}
paint.onmousemove = function (e) {
if (desenhando) {
if (e.pageX || e.pageY) {
x = e.pageX; x = e.pageX;
y = e.pageY;
} else {
x = e.clientX;
y = e.clientY;
}
ctx.lineTo(x,y);
ctx.stroke();
}
}
}
277
Vamos montar uma animao na qual os objetos
iro se movimentar com velocidades diferentes.
Usaremos 4 figuras:
Paisagem
Nuvem
rvore
Smurf Smurf
278
<!DOCTYPE HTML>
<html>
<head>
<style>
div#main {
position: absolute;
width: 500px;
height: 300px;
top: 50%;
left: 50%;
margin-top: -150px; margin-top: -150px;
margin-left: -250px;
}
</style>
</head>
<body>
<div id="main">
<canvas id="myCanvas" width="500" height="300"></canvas>
<script src="paisagem.js"></script>
</div>
</body>
</html>
279
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
var posArvore = 450;
var posNuvem = 150;
var frameX = 0;
var frameY = 0;
var frameSize = 128;
function drawHorizonte() { function drawHorizonte() {
var img = new Image();
img.src = "./horizonte.png";
img.onload = function() {
context.drawImage(img, 0, 0, canvas.width, canvas.height);
}
}
function updateNuvem() {
posNuvem--;
if(posNuvem <= -80){
posNuvem = 500;
}
}
280
function drawNuvem() {
var img = new Image();
img.src = "./nuvem.png";
img.onload = function() {
context.drawImage(img, posNuvem, 15, 200, 85);
}
}
function updateArvore() { function updateArvore() {
posArvore -= 3;
if(posArvore <= -80){
posArvore = 500;
}
}
function drawArvore() {
var img = new Image();
img.src = "./arvore.png";
img.onload = function() {
context.drawImage(img, posArvore, 210, 50, 75);
}
}
281
function updateSmurf() {
frameX++;
if(frameX >= 4) {
frameX = 0;
frameY++;
if(frameY >= 4) frameY = 0;
}
} }
function drawSmurf() {
var img = new Image();
img.src = "./smurf.png";
img.onload = function() {
context.drawImage(img,
frameX * frameSize, frameY * frameSize, frameSize, frameSize,
(canvas.width-frameSize)/2, (canvas.height-frameSize)/2+35,
frameSize, frameSize);
}
}
282
function animate() {
drawHorizonte();
updateNuvem();
drawNuvem();
updateSmurf();
drawSmurf();
drawArvore();
updateArvore(); updateArvore();
}
setInterval('animate()',30);
283
Clssico Jogo da Velha em HTML5
Usaremos 3 arquivos:
velha.html
velha.css
velha.js
284
<!doctype html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="velha.css" />
<script src="velha.js"></script>
</head>
<body onload="startGame();">
<div id="myGame"> <div id="myGame">
<canvas id="myCanvas"></canvas>
<div id="winner"></div>
<div id="newGame">
<a href="javascript:startGame();">New Game</a>
</div>
</div>
</body>
</html>
285
div#myGame {
position: absolute;
width: 300px;
height: 300px;
top: 50%;
left: 50%;
margin-top: -150px;
margin-left: -150px;
div#winGame {
width: 300px;
line-height: 60px;
text-align: center;
font-size: 32px;
font-family: verdana,
arial;
}
}
div#newGame {
width: 300px;
line-height: 30px;
text-align: center;
display: none;
}
286
a {
color: #AAAAAA;
text-decoration: none;
}
a:hover {
color: #0000BB;
}
var run, canvas, content, player, winner, count, x, y;
var score = new Array(9);
function loadCanvas() {
canvas = document.getElementById("myCanvas");
canvas.width = 300;
canvas.height= 300;
context = canvas.getContext("2d");
}}
function startGame(){
if(!canvas) loadCanvas();
showTab();
newGame();
}
287
function showTab() {
context.fillStyle = '#FFFFFF';
context.clearRect(0,0,300,300);
context.beginPath();
context.moveTo(100, 0);
context.lineTo(100,300);
context.moveTo(200, 0);
context.lineTo(200,300); context.lineTo(200,300);
context.moveTo( 0,100);
context.lineTo(300,100);
context.moveTo( 0,200);
context.lineTo(300,200);
context.closePath();
context.strokeStyle = '#00000';
context.stroke();
}
288
function newGame() {
player = 'X';
winner = '';
count = 0;
for(i=0; i<9; i++) { score[i] = ''; }
document.getElementById('newGame').style.display='none';
document.getElementById('winGame').innerHTML = '';
}
function drawScore(move) {
context.font = "bold 50px sans-serif";
context.textAlign = "center";
context.textBaseline = "middle";
x = (move%3)*100+50;
y = Math.floor(move/3)*100+50;
context.fillText(player, x, y);
}
289
function updateScore(move) {
score[move] = player;
count++;
}
function nextPlayer() {
if((score[0]!='' && score[0]==score[1] && score[1]==score[2]) ||
(score[3]!='' && score[3]==score[4] && score[4]==score[5]) ||
(score[6]!='' && score[6]==score[7] && score[7]==score[8]) ||
(score[0]!='' && score[0]==score[3] && score[3]==score[6]) || (score[0]!='' && score[0]==score[3] && score[3]==score[6]) ||
(score[1]!='' && score[1]==score[4] && score[4]==score[7]) ||
(score[2]!='' && score[2]==score[5] && score[5]==score[8]) ||
(score[4]!='' && score[4]==score[0] && score[4]==score[8]) ||
(score[4]!='' && score[4]==score[6] && score[4]==score[2])) {
winner = player;
}
else {
player = (player=='X') ? 'O' : 'X';
}
}
290
function showWinner() {
var cor = (winner=='X') ? '#FF0000'
: (winner=='O') ? '#009900' : '#000099';
var msg = (winner=='') ? 'Deu Velha!!!' : 'Venceu ' + winner;
document.getElementById('winGame').style.color = cor;
document.getElementById('winGame').innerHTML = msg;
document.getElementById('newGame').style.display='block';
}
function isGameOver() {
return(count>=9 || winner!='');
}
function isValidMove(move) {
return(move in [0,1,2,3,4,5,6,7,8] && score[move]=='');
}
291
function getPosition(x,y) {
px = Math.floor((x+1)/100);
py = Math.floor((y+1)/100);
if(px>=0 && px<3 && py>=0 && py<3)
return px + py*3;
else
return null;
}
function getClickMouse(e) { function getClickMouse(e) {
if (e.pageX || e.pageY) {
x = e.pageX;
y = e.pageY;
} else {
x = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
y = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
}
x -= document.getElementById("myGame").offsetLeft;
y -= document.getElementById("myGame").offsetTop;
}
292
window.onmousedown = function(e) {
if(!isGameOver()) {
getClickMouse(e);
var move = getPosition(x,y);
if(isValidMove(move)) {
updateScore(move);
drawScore(move);
nextPlayer();
if(isGameOver()) {
showWinner();
}
}
}
}
293
<!DOCTYPE HTML>
<html>
<head>
<link rel="stylesheet" href="q_cabeca.css" />
<script src="q_cabeca.js"></script>
</head>
<body>
294
<div class="tabuleiro">
<div class="pecas sup_esq">
<img src="./img/carros.jpg" id="img1"
draggable="true" ondragstart="drag(event)" />
</div>
<div class="pecas sup_dir">
<img src="./img/carros.jpg" id="img4"
draggable="true" ondragstart="drag(event)" /> draggable="true" ondragstart="drag(event)" />
</div>
<div class="pecas inf_esq">
<img src="./img/carros.jpg" id="img2"
draggable="true" ondragstart="drag(event)" />
</div>
<div class="pecas inf_dir">
<img src="./img/carros.jpg" id="img3"
draggable="true" ondragstart="drag(event)" />
</div>
</div>
295
<div id="separacao"></div>
<div class="tabuleiro">
<div class="pecas sup_esq" id="div1"
ondrop="drop(event)" ondragover="dragover(event)">
</div>
<div class="pecas sup_dir" id="div2"
ondrop="drop(event)" ondragover="dragover(event)"> ondrop="drop(event)" ondragover="dragover(event)">
</div>
<div class="pecas inf_esq" id="div3"
ondrop="drop(event)" ondragover="dragover(event)">
</div>
<div class="pecas inf_dir" id="div4"
ondrop="drop(event)" ondragover="dragover(event)">
</div>
</div>
</body>
</html>
296
.tabuleiro {
width: 502px;
height: 300px;
border-top: 1px solid #666;
border-left: 1px solid #666;
float: left;
}
.sup_dir img{
margin-left: -250px;
}
.inf_esq img{
margin-top: -150px;
}
.pecas {
width: 250px;
height: 150px;
border-right: 1px solid #666;
border-bottom: 1px solid #666;
float: left;
overflow:hidden;
}
297
.inf_dir img{
margin-left: -250px;
margin-top: -150px;
}
#separacao {
width: 10px;
height: 10px;
float: left;
}
var qtde = 0;
var erro = 0;
function dragover(ev) {
ev.preventDefault();
}
function drag(ev) {
ev.dataTransfer.setData("Text",ev.target.id);
}
function drop(ev) {
ev.preventDefault(); ev.preventDefault();
var div = ev.target.getAttribute("id").substring(3);
var img = ev.dataTransfer.getData("Text").substring(3);
if(div==img) {
var data=ev.dataTransfer.getData("Text");
ev.target.appendChild(document.getElementById(data));
qtde++;
if(qtde==4) {
alert('Vencedor com ' + erro + ' erros.');
document.location = '';
}
}
else {
erro++;
}
}
298
Criar um site para uma empresa cujo pblico so
crianas. A empresa comercializa brinquedos,
livros e roupas infantis, realiza festas infantis e
aluga brinquedos inflveis. Ela atende meninos e
meninas, de recm nascidos at 7 anos. Alm dos meninas, de recm nascidos at 7 anos. Alm dos
produtos da empresa, o site pode conter msicas
e filmes infantis, jogos infantis, imagens para
colorir, histrias infantis, opes de passeios para
crianas, seo de dicas para as mes.
299
Livro Texto:
1. Use a Cabea Html com CSS e XHMTL; Freeman, Elisabeth & Freeman,
Eric; Ed. Alta Books; 2 edio; 2008; 10 exemplares.
2. Padres de Projeto com CSS e HTML; Bowers, Michael; Ed. Alta Books; 2
edio; 2008; 10 exemplares.
3. Construindo Sites com CSS e XHTML; Silva, Maurcio Samy; Ed. Novatec; 1
edio; 2008; 10 exemplares.
Bibliografia Complementar:
4. Javascript 1.5; Oliveira, Adelize G. de; Ed. Relativa; 1 edio; 2001; 10 4. Javascript 1.5; Oliveira, Adelize G. de; Ed. Relativa; 1 edio; 2001; 10
exemplares.
5. Estudo Dirigido: Web Javascript; Manzano, Jos Augusto et al.; Ed. rica; 1
edio; 2001; 4 exemplares.
6. Html 4 Teoria e Prtica; Ramalho, Jos Antnio; Ed. Berkley; 1 edio;
2000; 5 exemplares.
7. Projetando Websites; Nielsen, Jakob; Ed. Elsevier; 1 edio; 2000; 14
exemplares.
8. Criando Pginas Web com CSS: Solues Avanadas para Padres Web;
Budd, Andy, et al.; Ed. Pearson; 1 edio; 2006; 5 exemplares.