2011-06-16 1 views
7

Je souhaite tracer une ligne verticale redimensionnable (en fonction du contenu de la page), mais qui semble être dessinée à la main plutôt que droite. Je pense actuellement à utiliser SVG ou Canvas pour y arriver. La ligne descendra le long de ma page Web, donc doit être évolutive entre le haut et le bas du conteneur. Comment puis-je atteindre cet objectif?Comment dessiner une ligne irrégulière/dessinée à la main en utilisant svg/canvas?

+0

Sons délicat. Êtes-vous sûr de ne pas pouvoir utiliser une image de fond à répétition? – nkorth

+0

Le fait de répéter simplement le y signifiera qu'il y aura des points où la ligne ne s'alignera pas à moins que vous n'atterrissiez à la fin du motif. – Jeepstone

+0

Eh bien, cela a été dessiné avec un trackpad, mais j'ai réussi à le faire fonctionner avec l'outil Shear dans GIMP: http://jsfiddle.net/nkorth/K6r3u/embedded/result/ – nkorth

Répondre

10

Donc, vous voulez tracer une ligne avec la gigue? Essayez de tracer un ensemble de courbes de Bézier successives, avec toutes les parties du point de l'axe Y équidistantes, et randomisez les valeurs x d'une certaine manière.

Voici un exemple pour vous aider à démarrer:

var can = document.getElementById('canvas1'); 
 
var ctx = can.getContext('2d'); 
 

 
function addJitteryBezier(fromx, fromy, tox, toy) { 
 
var diffx = tox - fromx; 
 
var diffy = toy - fromy; 
 
    
 
var neg = Math.random()*diffy/5; // so the x value can go positive or negative from the typical 
 
    
 
    
 
ctx.bezierCurveTo(
 
-neg + fromx + 2*(Math.random()*diffy/8), fromy + .3*diffy, 
 
-neg + fromx + 2*(Math.random()*diffy/8), fromy + .6*diffy, 
 
tox, toy 
 
); 
 
} 
 

 
ctx.beginPath(); 
 
ctx.moveTo(50,0); 
 

 
var i = 0; 
 
while (i < 500) { 
 
    addJitteryBezier(50, i, 50, i+50); 
 
    i+= 50; 
 
} 
 

 
ctx.stroke();
<canvas id="canvas1" width="500" height="500"></canvas>

http://jsfiddle.net/GfGVE/9/

+0

Exactement ce que je commençais juste à essayez, mais je n'ai pas codé Canvas pendant un moment. – nkorth

+1

Parfait exemple Simon. Merci beaucoup. J'ai également trouvé http://29a.ch/2010/2/10/hand-drawn-lines-algorithm-javascript-canvas-html5 ce qui était correct. Le seul problème est celui où les lignes rencontrent parfois les courbes forment un pic. – Jeepstone

+0

Oui, il y a des façons de contourner cela ... Si le point de contrôle DERNIER d'une courbe a une valeur X vraiment négative, vous voudrez que le premier point de contrôle de la courbe suivante ait une valeur positive. Vous pouvez donc effectuer des vérifications supplémentaires et vous assurer que le premier point de contrôle de la 2ème courbe est toujours le signe opposé. Si cela semble confus, je peux modifier mon exemple pour montrer –

Questions connexes