Accueil > > > DESSINER DES CERCLES/DISQUES/LIGNES EN JAVASCRIPT
DESSINER DES CERCLES/DISQUES/LIGNES EN JAVASCRIPT
Information sur la source
Description
Cette source permet de dessiner des cercles, des disques et des lignes en javascript sans utiliser des outils tels que SVG ou Canvas, cela permet d'être utilisable sous la plupart des navigateurs, mais il n'y a pas vraiment de lissage et c'est un peu lent. Astuces : Pour faire un cercle lissé et flou mettez par exemple ceci comme paramètres : - Rayon : 150 - Epaisseur du cercle : 50 - Opacité du cercle : très basse ( entre 1 et 20 ) Pour faire une ligne lissée : - Epaisseur de la ligne : plus grande que 3 de préférence - Opacité de la ligne: faible ( entre 1 et 20 ) D'autres possibilités existent, il suffit de tester. Et n'hésitez pas à me dire si vous avez des bugs ! :)
Source
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
- <head>
- <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
- <script type="text/javascript">
- <!--
- function drawCircle(a, b, r, w, c, o) {
- if (document.getElementById('full').checked) {
- var h = 1;
- }
- else {
- var h = w;
- }
- var y = 0;
- for (x = 0; x <= Math.round(r / Math.sqrt(2)); x++) {
- y = Math.sqrt(Math.pow(r, 2) - (Math.pow(x, 2)));
- if (!document.getElementById('full').checked) {
- setPx(x + a, y + b, w, h, c, o);
- setPx(a - x, y + b, w, h, c, o);
- setPx(a - x, b - y, w, h, c, o);
- setPx(x + a, b - y, w, h, c, o);
- setPx(y + a, b - x, w, h, c, o);
- setPx(a - y, b - x, w, h, c, o);
- setPx(y + a, x + b, w, h, c, o);
- setPx(a - y, x + b, w, h, c, o);
- }
- else {
- setPx(a - x, y + b, 2 * x, h, c, o);
- setPx(a - x, b - y, 2 * x, h, c, o);
- setPx(a - y, b - x, 2 * y, h, c, o);
- setPx(a - y, x + b, 2 * y, h, c, o);
- }
- }
- }
-
- function drawLine(x1, y1, x2, y2, w, c, o) {
- var y = x = 0;
- var signX = (x1 - x2) / Math.abs(x1 - x2) * -1;
- var signY = (y1 - y2) / Math.abs(y1 - y2) * -1;
- if (x2 == x1) {
- setPx(Math.min(x1, x2), Math.min(y1, y2), w, Math.abs(y2 - y1), c, o);
- } else if (y1 == y2) {
- setPx(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2 - x1), w, c, o);
- } else {
- if (Math.abs((y2 - y1) / (x2 - x1)) <= 1) {
- while (x <= Math.abs(x2 - x1)) {
- y = (y2 - y1) / Math.abs(x2 - x1) * x;
- setPx(signX * x + x1, y + y1, w, w, c, o);
- x++;
- }
- } else {
- while (y <= Math.abs(y2 - y1)) {
- x = (x2 - x1) / Math.abs(y2 - y1) * y;
- setPx(x + x1, signY * y + y1, w, w, c, o);
- y++;
- }
- }
- }
- }
-
- function setPx(x, y, w, h, c, o) {
- var px = document.createElement('div');
- px.id = 'px';
- px.style.cssText = 'position:absolute; top:' + y + 'px; left:' + x + 'px; background-color:' + c + '; width:' + w + 'px; height:' + h + 'px; opacity:' + o / 100 + '; filter:alpha(opacity=' + o + ');';
- document.body.appendChild(px);
- }
-
- function clearPx() {
- while (document.getElementById('px')) {
- document.body.removeChild(document.getElementById('px'));
- }
- }
- // -->
- </script>
- <style type="text/css">
- body {
- font-family:verdana, arial;
- font-size:11px;
- color:#333333;
- cursor:default;
- margin:0px;
- }
-
- p {
- margin:0px;
- font-weight:normal;
- }
-
- form {
- margin:0px;
- }
-
- #main {
- border:solid 5px #CCCCCC;
- background-color:#F0F0F0;
- text-align:center;
- padding:5px;
- width:500px;
- margin:5px auto 5px auto;
- }
- </style>
- <title>Dessiner en Javascript</title>
- </head>
- <body>
- <div id="main">
- <form method="post" action="javascript:;" style="float:left;">
- <p>
- <span style="font-weight:bold">Cercle</span><br/><br/>
- Abcisse du centre du cercle<br/>
- <input type="text" id="x" value="100"/><br/>
- Ordonnée du centre du cercle<br/>
- <input type="text" id="y" value="100"/><br/>
- Rayon du cercle<br/>
- <input type="text" id="r" value="50"/><br/>
- Epaisseur du cercle<br/>
- <input type="text" id="w" value="1"/><br/>
- Couleur du cercle<br/>
- <input type="text" id="c" value="red"/><br/>
- Opacité du cercle<br/>
- <input type="text" id="o" value="100"/><br/><br/>
- <input type="checkbox" id="full"/><label for="full"> Dessiner plein (disque)</label><br/><br/>
- <input type="submit" value="Afficher"
- onclick="drawCircle(parseInt(document.getElementById('x').value), parseInt(document.getElementById('y').value),
- parseInt(document.getElementById('r').value), parseInt(document.getElementById('w').value),
- document.getElementById('c').value, parseInt(document.getElementById('o').value));"/>
- </p>
- </form>
- <form method="post" action="javascript:;" style="float:right;">
- <p>
- <span style="font-weight:bold">Ligne</span><br/><br/>
- Abcisse du premier point<br/>
- <input type="text" id="x1" value="80"/><br/>
- Ordonnée du premier point<br/>
- <input type="text" id="y1" value="200"/><br/>
- Abcisse du second point<br/>
- <input type="text" id="x2" value="100"/><br/>
- Ordonnée du second point<br/>
- <input type="text" id="y2" value="100"/><br/>
- Epaisseur de la ligne<br/>
- <input type="text" id="w2" value="1"/><br/>
- Couleur de la ligne<br/>
- <input type="text" id="c2" value="red"/><br/>
- Opacité de la ligne<br/>
- <input type="text" id="o2" value="100"/><br/><br/>
- <input type="submit" value="Afficher"
- onclick="drawLine(parseInt(document.getElementById('x1').value), parseInt(document.getElementById('y1').value),
- parseInt(document.getElementById('x2').value), parseInt(document.getElementById('y2').value),
- parseInt(document.getElementById('w2').value), document.getElementById('c2').value, parseInt(document.getElementById('o2').value));"/>
- </p>
- </form>
- <div style="clear:both;"></div>
- <form method="post" action="javascript:;" style="border-top:solid 1px #CCCCCC; margin-top:5px; padding-top:5px;">
- <p>
- <input type="submit" value="Effacer" onclick="clearPx();"/>
- <input type="submit" value="Infos" onclick="alert('Attention, cette application Javascript est très lente sous IE (surtout la version 8).\n' +
- 'Elle a été testée avec succes sous:\n -Firefox 2\n -Firefox 3.0 RC1\n -IE7\n -IE8 Beta 1\n -Opera 9.26\n -Safari 3.1.1')"/>
- </p>
- </form>
- </div>
- </body>
- </html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
<script type="text/javascript">
<!--
function drawCircle(a, b, r, w, c, o) {
if (document.getElementById('full').checked) {
var h = 1;
}
else {
var h = w;
}
var y = 0;
for (x = 0; x <= Math.round(r / Math.sqrt(2)); x++) {
y = Math.sqrt(Math.pow(r, 2) - (Math.pow(x, 2)));
if (!document.getElementById('full').checked) {
setPx(x + a, y + b, w, h, c, o);
setPx(a - x, y + b, w, h, c, o);
setPx(a - x, b - y, w, h, c, o);
setPx(x + a, b - y, w, h, c, o);
setPx(y + a, b - x, w, h, c, o);
setPx(a - y, b - x, w, h, c, o);
setPx(y + a, x + b, w, h, c, o);
setPx(a - y, x + b, w, h, c, o);
}
else {
setPx(a - x, y + b, 2 * x, h, c, o);
setPx(a - x, b - y, 2 * x, h, c, o);
setPx(a - y, b - x, 2 * y, h, c, o);
setPx(a - y, x + b, 2 * y, h, c, o);
}
}
}
function drawLine(x1, y1, x2, y2, w, c, o) {
var y = x = 0;
var signX = (x1 - x2) / Math.abs(x1 - x2) * -1;
var signY = (y1 - y2) / Math.abs(y1 - y2) * -1;
if (x2 == x1) {
setPx(Math.min(x1, x2), Math.min(y1, y2), w, Math.abs(y2 - y1), c, o);
} else if (y1 == y2) {
setPx(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2 - x1), w, c, o);
} else {
if (Math.abs((y2 - y1) / (x2 - x1)) <= 1) {
while (x <= Math.abs(x2 - x1)) {
y = (y2 - y1) / Math.abs(x2 - x1) * x;
setPx(signX * x + x1, y + y1, w, w, c, o);
x++;
}
} else {
while (y <= Math.abs(y2 - y1)) {
x = (x2 - x1) / Math.abs(y2 - y1) * y;
setPx(x + x1, signY * y + y1, w, w, c, o);
y++;
}
}
}
}
function setPx(x, y, w, h, c, o) {
var px = document.createElement('div');
px.id = 'px';
px.style.cssText = 'position:absolute; top:' + y + 'px; left:' + x + 'px; background-color:' + c + '; width:' + w + 'px; height:' + h + 'px; opacity:' + o / 100 + '; filter:alpha(opacity=' + o + ');';
document.body.appendChild(px);
}
function clearPx() {
while (document.getElementById('px')) {
document.body.removeChild(document.getElementById('px'));
}
}
// -->
</script>
<style type="text/css">
body {
font-family:verdana, arial;
font-size:11px;
color:#333333;
cursor:default;
margin:0px;
}
p {
margin:0px;
font-weight:normal;
}
form {
margin:0px;
}
#main {
border:solid 5px #CCCCCC;
background-color:#F0F0F0;
text-align:center;
padding:5px;
width:500px;
margin:5px auto 5px auto;
}
</style>
<title>Dessiner en Javascript</title>
</head>
<body>
<div id="main">
<form method="post" action="javascript:;" style="float:left;">
<p>
<span style="font-weight:bold">Cercle</span><br/><br/>
Abcisse du centre du cercle<br/>
<input type="text" id="x" value="100"/><br/>
Ordonnée du centre du cercle<br/>
<input type="text" id="y" value="100"/><br/>
Rayon du cercle<br/>
<input type="text" id="r" value="50"/><br/>
Epaisseur du cercle<br/>
<input type="text" id="w" value="1"/><br/>
Couleur du cercle<br/>
<input type="text" id="c" value="red"/><br/>
Opacité du cercle<br/>
<input type="text" id="o" value="100"/><br/><br/>
<input type="checkbox" id="full"/><label for="full"> Dessiner plein (disque)</label><br/><br/>
<input type="submit" value="Afficher"
onclick="drawCircle(parseInt(document.getElementById('x').value), parseInt(document.getElementById('y').value),
parseInt(document.getElementById('r').value), parseInt(document.getElementById('w').value),
document.getElementById('c').value, parseInt(document.getElementById('o').value));"/>
</p>
</form>
<form method="post" action="javascript:;" style="float:right;">
<p>
<span style="font-weight:bold">Ligne</span><br/><br/>
Abcisse du premier point<br/>
<input type="text" id="x1" value="80"/><br/>
Ordonnée du premier point<br/>
<input type="text" id="y1" value="200"/><br/>
Abcisse du second point<br/>
<input type="text" id="x2" value="100"/><br/>
Ordonnée du second point<br/>
<input type="text" id="y2" value="100"/><br/>
Epaisseur de la ligne<br/>
<input type="text" id="w2" value="1"/><br/>
Couleur de la ligne<br/>
<input type="text" id="c2" value="red"/><br/>
Opacité de la ligne<br/>
<input type="text" id="o2" value="100"/><br/><br/>
<input type="submit" value="Afficher"
onclick="drawLine(parseInt(document.getElementById('x1').value), parseInt(document.getElementById('y1').value),
parseInt(document.getElementById('x2').value), parseInt(document.getElementById('y2').value),
parseInt(document.getElementById('w2').value), document.getElementById('c2').value, parseInt(document.getElementById('o2').value));"/>
</p>
</form>
<div style="clear:both;"></div>
<form method="post" action="javascript:;" style="border-top:solid 1px #CCCCCC; margin-top:5px; padding-top:5px;">
<p>
<input type="submit" value="Effacer" onclick="clearPx();"/>
<input type="submit" value="Infos" onclick="alert('Attention, cette application Javascript est très lente sous IE (surtout la version 8).\n' +
'Elle a été testée avec succes sous:\n -Firefox 2\n -Firefox 3.0 RC1\n -IE7\n -IE8 Beta 1\n -Opera 9.26\n -Safari 3.1.1')"/>
</p>
</form>
</div>
</body>
</html>
Conclusion
Ce code permet de faire quelques dessins mais est assez ( voire très ) lent sous IE, préférez donc un navigateur comme Opera, Safari ou Firefox pour le tester. (les plus rapides sont Opera et Safari pour ce code).
Historique
- 25 mai 2008 08:53:27 :
- Ajout d'un Zip.
- 25 mai 2008 11:34:20 :
- Ajout dune petite astuce dans la description du code...
Ajout d'une capture d'écran.
- 27 mai 2008 11:10:58 :
- Ajout de la fonction de dessin de lignes. Modification de la capture, du titre, de la source et des descriptions.
- 27 mai 2008 11:14:02 :
- Modification du titre, des descriptions, et de la source. Modification de la capture.
Ajout de la fonction de dessin de lignes.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Dessiner et redimensionner un cercle ou disque à la souris... :s [ par Tyra3l ]
Bonjour à tous, Tout d'abord joyeux noël :p Je bloque sur un problème en javascript : en effet je dois pouvoir créer un cercle de diamètre x (x étan
Agrandir et diminuer rayon cercle avec la souris [ par Tyra3l ]
Bonjour à tous, Tout d'abord joyeux noël :p Je bloque sur un problème en javascript : en effet je dois pouvoir créer un cercle de diamètre x (x étan
[RECRUTEMENT] OFLUXIA, jeu en ligne multijoueur de conquête spatiale [ par oilla ]
Bonjour, Je dirige la création d'un jeu en ligne et je recherche un programmeur JavaScript. J'ai pensé qu'il y a peut-être des personnes intéressé
Problème de script [ par pedrito57 ]
Bonjour, j'ai un petit problème avec mon script. Le début marche sans le php mais dès que j'y intègre la partie php, ca ne marche plus. Je débute, si
Merci pour votre aide... [ par 32dens ]
Bonjour, Dans la page index du site http://mcarmagnac.free.fr/index.html se trouve un script javascript (ligne 192) qui permet d'afficher le contenu
Comment inserer dynamiquement un champ input [ par aholigans ]
salut à vs ts, en faite j'ai le meme probleme que jarod1980, j'ai un tableau contenant 7 champs tewte (textfields), lorsque je clique sur un boutton u
Ligne d'un tableau cliquable [ par KasPe ]
Bonjour, Désolé si ma question n'est pas au bon endroit, mais comme j'ai l'intention de rajouter à ce code du javascript, je me suis dis ... Je cherc
Transformer une chaine en ligne de code [ par AlexP ]
Bonjour,J'ai écris un programme qui me génére des lignes de code. Or javascript ne les execute pas.Ex : var i=5var chaine ="formulaire.checkbox"+i+"ch
annuler le dbclick [ par Stephane ]
salutvoila je fais un genre d'explorateur avec des lignes représentant des fichiers, donc je voudrai que quand je clique sur une ligne ca me sélection
Figer une ligne de tableau ?? [ par mickelo ]
Y a t-il moyen de figer une ligne de tableau pour que lorsqu'on défile la page grace a l'ascenseur cette ligne reste en haut de page, une sorte de rec
|
Derniers Blogs
[DESIGN PATTERNS] PARTIE 2: DIP: DEPENDENCY INVERSION PRINCIPLE[DESIGN PATTERNS] PARTIE 2: DIP: DEPENDENCY INVERSION PRINCIPLE par tja
C'est le dernier principe des principes du Design Orienté Objet (The Principles of Object Oriented Design) fondés par Robert C. Martin plus connu sous le pseudonyme d'Uncle Bob.
l'image empruntée de LosTechies.
Je ne traite pas les principes dans...
Cliquez pour lire la suite de l'article par tja TECHDAYS PARIS 2010 : SHAREPOINT 2010 POUR LES DéVELOPPEURSTECHDAYS PARIS 2010 : SHAREPOINT 2010 POUR LES DéVELOPPEURS par ROMELARD Fabrice
Animé par: Laurent Cotton Le développement dans SharePoint 2010 passe par plusieurs axes qui seront évoqués dans cette session, mais plus particulièrement les développements simples lié au besoin Business Business Connectivity Services Ce BCS es...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOURTECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOUR par ROMELARD Fabrice
Cette session est la dernière pleinière de ces 3 jours de TechDays Paris 2010. Généralement, cette troisième journée est plus axée sur l'avenir vu par Microsoft. Après un retour sur l'avenir vu par la Science Fiction ou par ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|