Accueil > > > QUIZZ AVEC GLISSÉ DÉPOSÉ D'OBJETS COMPATIBLE (DRAG&DROP) .
QUIZZ AVEC GLISSÉ DÉPOSÉ D'OBJETS COMPATIBLE (DRAG&DROP) .
Information sur la source
Description
Code javascript + DOM1 devrait être supporté par pas mal de butineurs. http://moncastel.9online.fr/dragdrop
Source
- <!-- drag&drop d'objets
-
- function ctrl(e){ // e pour gecko;
- fx=ie?db.clientWidth:innerWidth-20 //l fenêtre
- fy=ie?db.clientHeight:innerHeight //h fenêtre
- sx=ie?db.scrollLeft:pageXOffset; //scroll h
- sy=ie?db.scrollTop:pageYOffset; //scroll v
- px=ie?event.clientX+sx:e.pageX; //curseur x
- py=ie?event.clientY+sy:e.pageY; //curseur y
- }
-
- function getobjet(e){ //sélection de l'objet sous la souris
- if (ie) {
- e=window.event;
- el = e.srcElement;
- } else el = e.target;
- if(!el.tagName)el=el.parentNode // bug NS7, mozilla
- }
-
- function drag(e){
- getobjet(e);
- if (el.id.substr(0,2)=="dd" && ob==D){ // si l'objet est déplaçable
- ob=el; // le capture
- if(el.parentNode.parentNode.id == "rcpDIV"){ // évite la case vide
- el.parentNode.style.width = "1.5em";
- }
- }
- return false // necessaire Gecko
- }
-
- function bouge(e){
- ctrl(e);
- if(ob != D){
- with(ob.style){position="absolute";display="inline";
- left=px+"px";top=py+3+"px";cursor="move"
- }
- }
- return false // necessaire Gecko
- }
-
- function drop(e){ // dépose l'objet
- getobjet(e);
- if (el.id.substr(0,2)=="dd")el=el.parentNode; // une case peut contenir plusieurs réponses
- if ( el.parentNode.id.substr(0,3) == "rcp" ){ // si c'est bien une case réponse
- tag = el.parentNode.id.substr(3,6); // tag des cases réponse
- if(el.tagName == tag){
- el.appendChild(ob); // colle l'objet dans la case sélectionnée
- el.style.width = "auto"; // nécessaire pour Gecko et opéra dans le quizz2
- with(ob.style){position="";}
- ob=D; // annule la sélection
- verif(); //inscrit le score
- }
- }
- }
-
- function verif(){ // vérifie l'emplacement des objets et affiche le score
- var cases=D.getElementById('rcp'+tag).getElementsByTagName(tag);
- score=0;ob_present=0;
- for(var i=0;i<cases.length;i++){
- if (cases[i].childNodes[1]){
- ob_present+=1;
- if (cases[i].childNodes[1].id =="dd"+i) score+=1;
- }
- }
- s=(score>1)?'s':''; //singulier ou pluriel
- D.getElementById('resultat').innerHTML = score +' bonne'+s+' réponse'+s+' sur '+ob_present;
- }
-
- function initdrag(){
- D=document;ie=D.all?1:0;op=window.opera?1:0;dtd= D.compatMode=="CSS1Compat"?1:0;ob=D
- db=ie&!op&&dtd?D.documentElement:D.body //exception IE6 dtd
- D.onmousedown=drag;D.onmouseup=drop;D.onmousemove=bouge
- }
- //-->
<!-- drag&drop d'objets
function ctrl(e){ // e pour gecko;
fx=ie?db.clientWidth:innerWidth-20 //l fenêtre
fy=ie?db.clientHeight:innerHeight //h fenêtre
sx=ie?db.scrollLeft:pageXOffset; //scroll h
sy=ie?db.scrollTop:pageYOffset; //scroll v
px=ie?event.clientX+sx:e.pageX; //curseur x
py=ie?event.clientY+sy:e.pageY; //curseur y
}
function getobjet(e){ //sélection de l'objet sous la souris
if (ie) {
e=window.event;
el = e.srcElement;
} else el = e.target;
if(!el.tagName)el=el.parentNode // bug NS7, mozilla
}
function drag(e){
getobjet(e);
if (el.id.substr(0,2)=="dd" && ob==D){ // si l'objet est déplaçable
ob=el; // le capture
if(el.parentNode.parentNode.id == "rcpDIV"){ // évite la case vide
el.parentNode.style.width = "1.5em";
}
}
return false // necessaire Gecko
}
function bouge(e){
ctrl(e);
if(ob != D){
with(ob.style){position="absolute";display="inline";
left=px+"px";top=py+3+"px";cursor="move"
}
}
return false // necessaire Gecko
}
function drop(e){ // dépose l'objet
getobjet(e);
if (el.id.substr(0,2)=="dd")el=el.parentNode; // une case peut contenir plusieurs réponses
if ( el.parentNode.id.substr(0,3) == "rcp" ){ // si c'est bien une case réponse
tag = el.parentNode.id.substr(3,6); // tag des cases réponse
if(el.tagName == tag){
el.appendChild(ob); // colle l'objet dans la case sélectionnée
el.style.width = "auto"; // nécessaire pour Gecko et opéra dans le quizz2
with(ob.style){position="";}
ob=D; // annule la sélection
verif(); //inscrit le score
}
}
}
function verif(){ // vérifie l'emplacement des objets et affiche le score
var cases=D.getElementById('rcp'+tag).getElementsByTagName(tag);
score=0;ob_present=0;
for(var i=0;i<cases.length;i++){
if (cases[i].childNodes[1]){
ob_present+=1;
if (cases[i].childNodes[1].id =="dd"+i) score+=1;
}
}
s=(score>1)?'s':''; //singulier ou pluriel
D.getElementById('resultat').innerHTML = score +' bonne'+s+' réponse'+s+' sur '+ob_present;
}
function initdrag(){
D=document;ie=D.all?1:0;op=window.opera?1:0;dtd= D.compatMode=="CSS1Compat"?1:0;ob=D
db=ie&!op&&dtd?D.documentElement:D.body //exception IE6 dtd
D.onmousedown=drag;D.onmouseup=drop;D.onmousemove=bouge
}
//-->
Conclusion
J'espère qu'il sera utile à certains Il reste qqs petits bugs que je compte sur votre aide pour les résoudre:
1 - je n'arrive pas à désactiver la sélection souris sur OPERA
Historique
- 18 octobre 2004 14:37:03 :
- améliorations , commentaires
- 25 octobre 2004 00:44:25 :
- fichier js séparé
Deux éxemples commentés :
un avec des images et l'autre avec des divs.
- 28 octobre 2004 00:11:25 :
- bug NS6 Mozilla 1 corrigé et améliorations diverses
- 28 octobre 2004 00:16:16 :
- ajout de l'url
- 25 janvier 2005 13:11:10 :
- Un seul fichier js pour les 2 types de Quizz
Optimisation
- 18 février 2005 21:59:11 :
- quizz2 pas mal amélioré
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|