Essa semana a matéria é muito interessante. Vou explicar o funcionamento de um Quizz desenvolvido em DHTML para rodar em Internet Explorer 4 ou superior e Netscape 4 ou superior, sendo que foram desenvolvidos códigos diferentes para cada browser e versões dos mesmos.
A Quizz tem 10 questões com 4 alternativas de resposta. O usuário escolhe uma e o programa mostra a próxima questão e assim sucessivamente até o final. Quando o usuário terminar de responder todas as questões, uma tela aparecerá mostrando o resultado final da Quizz.
As perguntas, alternativas e respostas estão dispostas em matrizes, sendo que as perguntas e alternativas estão em uma matriz bidimensional.
Para checar qual o navegador é do usuário, vamos usar o objeto browser criado em uma coluna anterior e criar uma instância do objeto com o nome de naveg.
Fazer o download do arquivo browser.js.
Para começar o nosso código, vamos carregar o arquivo browser.js que contém o código para definir o navegador utilizado pelo usuário:
Exemplo:
<script src="js/browser.js"></script>
Agora temos que criar as variáveis que usaremos para no nosso código. As perguntas, respostas, opções e alternativas estão dispostas em matrizes. Abaixo segue um explicativo do código, mas eu não preciso comentar tudo, porque muita coisa é básica para quem conhece de programação.
Exemplo:
1 <script
language="JavaScript">
2 var
naveg = new browser();
3 var
ordem = 0;
4 var
acertos = 0;
5 var
i;
6 var
resultado = "";
7 var
opcoes = ["A","B","C","D"];
8 var
resultados = ["C","B","A","C","B","C","C","D","C","D"];
9 var
questao = [];
10 for
(i=0; i<10; i++){
11 questao[i]
= [];
12 }
13 questao[0][0]
= "1 - Quem é o homem mais rico do mundo?";
14 questao[0][1]
= " Silvio Santos | Donald Trump | Bill Gates | Tiririca";
15 questao[1][0]
= "2 - Quantas vezes o Brasil foi campeão mundial
de futebol?";
16 questao[1][1]
= " 3 vez | 5 vezes | 1 vezes | 2 vezes";
17 questao[2][0]
= "3 - Qual o maior pico do mundo?";
18 questao[2][1]
= " Everest | Gale Gale | Tropina | Molucai";
19 questao[3][0]
= "4 - Qual a capital do Brasil?";
20 questao[3][1]
= " Salvador | Rio de Janeiro | Brasilia | Sao Paulo";
21 questao[4][0]
= "5 - Quem é o melhor jogador de futebol do mundo?";
22 questao[4][1]
= " Zidane | Ronaldo | Figo | Thiago";
23 questao[5][0]
= "6 - Qual foi a profissão de Albert Einstein?";
24 questao[5][1]
= " Arquiteto | Atleta | Cientista | Programador";
25 questao[6][0]
= "7 - Quem inventou o telefone?";
26 questao[6][1]
= " Paulo Paulada | Ze Carioca | Graham Bell | Gugu";
27 questao[7][0]
= "8 - Qual esporte praticado por Popo?";
28 questao[7][1]
= " Futebol | Golfe | Voleibol | Boxe";
29 questao[8][0]
= "9 - Qual o maior pais católico do mundo?";
30 questao[8][1]
= " USA | Italia | Brasil | Japao";
31 questao[9][0]
= "10 - Qual o melhor site sobre programação?";
32 questao[9][1]
= " Lala | Lele | Lili | iMasters";
Linha 2 - Declaração da variavel naveg responsável por recuperar o navegador que o usuário esta utilizando.
Linha 7 - Matriz com a relação de possíveis opções de resposta.
Linha 8 - Matriz com a relação das respostas das questões.
Linha 9 - Declaração da matriz questão responsável por gravar as perguntas e as alternativas de resposta.
Linha 10 a 12 - Loop responsável por criar uma nova matriz para cada elemento da matriz questão, tornando-a bidimensional.
Linha 13 a 32 - Preenchimento da matriz questão com as perguntas e alternativas, sendo que as quatros alternativas estão no mesmo elemento separadas por uma “|”.
Vamos agora à função init(), muito importante porque inicia o nosso objeto, que é a layer que contém a nossa Quizz. Há uma verificação de qual navegador que o usuário está utilizando e uma chamada para a função mostra_questao(), que é responsável por escrever as perguntas e alternativas na layer e mostrar na página.
Exemplo:
1 function init()
{
2 if
(naveg.ns4) quadro = document.layers["quizzDiv"];
3 if
(naveg.ns6) quadro = document.getElementById("quizzDiv");
4 if
(naveg.ie) {
5 quadro
= document.all["quizzDiv"];
6 quadro.style.border
= "1px solid black";
7 }
8 quantidade
= questao.length;
9 resultado
= "0% | 1/"+quantidade+" | Faltam: "+quantidade;
10 mostra_questao(ordem);
11 }
Linha 2 - Verificação se o Netscape 4 é o navegador do usuário e cria uma variável com o código da layer.
Linha 3 - Verificação se o Netscape 6 ou superior é o navegador do usuário e cria uma variável com o código da layer.
Linha 4 - Verificação se o Internet Explorer é o navegador do usuário e cria uma variável com o código da layer.
Linha 8 - Declaração da variável quantidade que contém a quantidade de questões na Quizz.
Linha 9 - Declaração da variável resultado, responsável por mostrar qual o percentual de acerto do desafiante.
Linha 10 - Uma chamada para a função mostra_questao(), que é responsável por escrever a questão na layer e mostra na página.
Depois de iniciado o nosso objeto, vamos desenvolver o código para escrever a questão na layer e mostrar na página. Para que possamos escrever na layer, vai ser criado um código diferente para cada navegador.
Os botões, com as alternativas de respostas, vêm a partir de dados da matriz opções, criada acima, e o evento onclick do botão chama a função corrigir() que vai ser criada posteriormente para conferir a margem de acerto do desafiante e mostrar na página.
1 function mostra_questao(x){
2 if
(x >= 10) {
3 texto
= "Confira sua pontuação e sempre tenha dedicacao
para <br>conseguir sempre os melhores resultados. <br><br>";
4 texto
+= "Margem de acerto = " + total + "%" + "
de " + quantidade + " questoes<br><br>";
5 texto
+= "Desenvolvimento: <br> Thiago Prado <br> Coluna
JS/DHTML <br> www.imasters.com.br";
6 texto
+= "<br><br><br><br><center><a
href='javascript:history.go(0)'>Recarregar Quizz</a></center>"
7 }
else {
8 texto
= questao[x][0] + "<br><br>";
9 divisao
= questao[x][1].split("|");
10 for(c=0;
c<divisao.length; c++){
11 texto
+= '<form name="form">';
12 texto
+= '<input type="button" value="'+opcoes[c]+'"
onclick="corrigir(this.value)">' + divisao[c] + "<br><br>";
13 texto
+= '</form>';
14 }
15 texto
+= "<hr noshade size=1 color=#000000><br>"
+ resultado;
16 }
17 if
(naveg.ns4) {
18 quadro.document.open();
19 quadro.document.write(texto);
20 quadro.document.close();
21 }
else if (naveg.ie) quadro.innerHTML
= texto;
22 else
if (naveg.ns6) quadro.innerHTML = texto;
23 }
24 </script>
Linha 2 - Verficação se o valor de x (ordem das questoes) é maior ou igual a 10. Se retornar true, será mostrado na página a margem de acerto do desafiante e mais algumas informações adicionais. Se retornar false, será mostrada uma questão com suas respectivas alternativas.
O código acima é muito simples, basicamente a variável texto coleta várias informações que serão mostradas posteriormente.
Linha 10 a 14 - Loop responsável por criar os botões com as alternativas de respostas. Os botões tem como value o valor da matriz opções indexado pela variável do loop. O evento onClick chama a função corrigir() enviando um paramentro que é o valor do próprio botao.
Linha 17 - Verificação se o Netscape 4 é o navegador do usuário. Desta forma será escrito na layer o conteúdo da variável texto, que contém todas as informações sobre as perguntas, respostas, margem de acerto e informações adicionais.
Linha 21 - Verificação se o Internet Explorer é o navegador do usuário. Desta forma será escrito na layer o conteúdo da variável texto, que contém todas as informações sobre as perguntas, respostas, margem de acerto e informações adicionais.
Linha 22 - Verificação se o Netscape 6 ou superior é o navegador do usuário. Desta forma será escrito na layer o conteúdo da variável texto, que contém todas as informações sobre as perguntas, respostas, margem de acerto e informações adicionais.
Com quase tudo criado vamos agora partir para a função que tem por objetivo corrigir a nossa Quizz. A mesma recebe um parâmetro com o valor das alternativas das respostas.
Exemplo:
1 function corrigir(x){
2 if
(ordem >= 10) return false;
3 if
(x == resultados[ordem]){
4 acertos++;
5 }
6 ordem++;
7 total
= parseInt((acertos)*100/ordem);
8 restantes
= (questao.length-ordem);
9 resultado
= " " + total + " % | " + (ordem >= 10
? ordem : ordem+1) + " / " + quantidade + " | Faltam:
" + restantes;
10 mostra_questao(ordem);
11 }
Linha 2 - Verificação se a ordem das questão chegou ao seu final. Se retornar true, a função é retornada como false para que o código não continue.
Linha 3 - Verificação se o parâmetro x é igual ao valor da matriz resultados indexado da variável ordem. Se retornar true a variável acertos vai ser acrescido de um em seu valor.
Linha 6 - A variável ordem vai ser acrescido de um em seu valor.
Linha 7 - A variável total retorna a parte inteira do cálculo da percentagem de acertos do desafiante.
Linha 8 - A variável restantes retorna o valor do número de questões que estão faltando para acabar a Quizz.
Linha 9 - A variável resultado engloba em seu valor um aglomerado de informações, com o objetivo de mostrar a margem de acertos do usuário e outras informações adicionais.
Linha 10 - Uma chamada da função mostra_questao() com um parâmentro que é a ordem das questões ate o fim da Quizz.
Por fim, na parte HTML, vamos criar a nossa layer que vai conter a Quizz:
Exemplo:
<DIV ID="quizzDiv"
STYLE="position:absolute; left:10px; top:60px; width:360px;
height:250px; clip:rect(0px 360px 250px 0px); background-color:#ffffff;
layer-background-color:#ffffff; padding: 10px;">
</DIV>
Acesse o nosso exemplo da Quizz DHTML.
Valeu galera e até a próxima semana!
Faltou fazer um código portavel a outros browsers como Opera..
O padrão adotado pelos novos navegadores (a partir do IE 5 e NS 6) para DHTML acessar objetos da pagina é o GetElementById("IdElemento") ou GetElementsByName("NomeELemento").
Fica aí a dica.
Muito bom!e não é dificil,alem de vc explica muito bem!
Responder comentárioGOSTEI DOS TOPICOS DE LINGUAGEM
Responder comentárioGostaria de saber se tem como elecionar 100 perguntas e o sistema automaticamente selecionar entre as 100 as 30 para o quizz não deixando repetir?
Responder comentárioAté que gostei do código, pena que as respostas aparecem quando se pede o código fonte.... ainda prefiro o PHP com BD... ;)
Responder comentárioOs textos publicados neste espaço são de responsabilidade única de seus autores (colunistas e leitores) e podem não expressar necessariamente a opinião do iMasters.
Thiago Prado Atua profissionalmente com desenvolvimento de projetos web em Flash, PHP e Java.
2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.