sjovt med lærred: skabe en bar grafering stik af, del 1

, sjov med lærred: skabe en bar grafering stik af, del 1,,,,, andel,,,,,,,, 4,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss.,, i denne todelte serie, kan vi kombinere de alsidige lærred element med solide jquery bibliotek for at skabe en bar grafering stik af.i denne første del vil vi kode kernen logik i stik af som en separat version.,,, i dag skal vi skabe en bar grafering stik af.ikke en almindelig stik af, så pas på.vi skal vise lidt jquery kærlighed til gulvet element til at skabe en meget stærk stik af.i denne todelte artikel, vil vi starte fra begyndelsen af gennemførelsen af logikken i stik af som en separat manuskript, refactoring i et stik af og til sidst tilføje alle de ekstra guf for øjet på toppen af stik af koden.i denne første del, vi vil behandle gennemførelsen af den grundlæggende logik. for eksempel, inden vi går i gang?her kan du gå!,,, forskellige figurer, der er skabt med levering af forskellige indstillinger til vores stik af, tilfreds?interesseret?lad os starte.,, funktionalitet, vores stik af er nødvendige for at udføre nogle grundlæggende ting og gør noget andet.lad mig forklare:,, som sædvanlig, vi skal bruge kun lærred element og javascript.ingen billeder af enhver art, ingen brækkede css teknikker, nr. prerendering.gode, gamle, eller vil det nye?sejl element sammen med nogle jquery for at lette vores arbejde. med hensyn til datakilde, kommer vi til at trække alle data direkte fra et standardiseret skema.ingen systemer til at videregive de stik af i opstartsfasen.på denne måde kan brugeren sætter alle data i et skema, og da gøre vores stik af.plus, det er meget mere tilgængelig, nr. særlige tillæg for den tabel, der fungerer som datakilde, og bestemt ikke nogen særlige klasser navne for data - celler.vi skal bruge kun id af bordet, og træk vores data fra der.ingen tynde tekst - overlay - for at gøre etiketterne på figur.det er ikke kun meget kedeligt, men det afsmeltede tekst er ikke en del af denne figur, når det er reddet.vi kommer til at bruge den, filltext, og stroketext, som defineret i whatwg specifikationer.,, områder, som vi skal forske i verden af avanceret, endnu ikke fuldt ud er angivet, teknologi, vi har nogle områder.for lærred element til arbejde, mest moderne browsere er tilstrækkelige.men da vi gør brug af den nye tekst, at api, vi har brug for nye bygninger.- browsere ved hjælp af webkit motor r433xx og over eller gekko motor 1.9.1 og ovenfor, bør være fremragende platforme for stik af.jeg anbefaler, at tage en hver nat bygge af krom eller firefox.,, før vi begynder, vil jeg gerne nævne, at vores stik af udelukkende med henblik på læring.dette stik af er på ingen måde skulle erstatte andre flyvefærdig grafering plugins som flot, plotr og sådan.koden er lige så vidtløftige som muligt.du kunne skrive langt, langt mere effektiv kodeks, men af hensyn til læring, vil alt være så ukompliceret som muligt.de er fri til at refactor det til fordel for effektivitet i deres produktion.,, html avance, <!DOCTYPE html> <html lang="en-GB"> <head> <title>OMG WTF HAX</title> </head> <body> <table width="200" border="0" id="data"> <tr> \t<th>Year</th> \t<th>Sales</th> </tr> <tr> \t<td>2009</td> \t<td>130</td> </tr> <tr> \t<td>2008</td> \t<td>200</td> </tr> <tr> \t<td>2007</td> \t<td>145</td> </tr> <tr> \t<td>2006</td> \t<td>140</td> </tr> <tr> \t<td>2005</td> \t<td>210</td> </tr> <tr> \t<td>2004</td> \t<td>250</td> </tr> <tr> \t<td>2003</td> \t<td>170</td> </tr> <tr> \t<td>2002</td> \t<td>215</td> </tr> <tr> \t<td>2001</td> \t<td>115</td> </tr> <tr> \t<td>2000</td> \t<td>135</td> </tr> <tr> \t<td>1999</td> \t<td>110</td> </tr> <tr> \t<td>1998</td> \t<td>180</td> </tr> <tr> \t<td>1997</td> \t<td>105</td> </tr> </table> <canvas id="graph" width="550" height="220"></canvas> <script type="text/javascript" src="jquery.js">< /manuskript > < manuskript type = "tekst /javascript" src = "mokka. er" > < /manuskript > < /organ > < /html >, ikke noget særligt om tillægget.jeg tager et hurtigt overblik over alligevel.,, vi begynder med den nødvendige doctype.da vi er ved hjælp af lærred element, vi bruger den hensigtsmæssige med henblik på http: //5.den datakilde, tabel er defineret.bemærker, at ingen særlige tillæg, der beskrives eller nye klasser defineres og anvendes inden for sine medlemmer, et lærred element er defineret og fastsat en id til senere henvisning til.denne specifikke lærred element vil kun være her til enkeltstående version.i stik af version, lærred element og dets egenskaber skal injiceres dynamisk i dom og så manipuleret som nødvendigt.for gradvis forbedring på denne måde fungerer meget bedre. endelig har vi også omfatte jquery bibliotek og vores skik manuskript.som jeffrey har nævnt gang på gang, herunder manuskripter i slutningen af dette dokument er altid en god idé.,, lærred, net, før vi starter javascript, lad mig forklare det lærred koordinatsystem.den øverste venstre hjørne fungerer som oprindelse, dvs. (0, 0).punkter, der er så målt med hensyn til oprindelse med x og y en stigende sted langs venstre.for matematisk tilbøjelig er vi fungerer effektivt i 4. del, bortset fra at vi tager den absolutte værdi af y i stedet for en negativ værdi.hvis du har arbejdet med teksten på andre sprog, du skulle være hjemme her.,,, lærred koordinatsystemet, rektangel gør rutine, lærred "rektangel afsmeltning rutine vil blive udbredt i den artikel, bevirker, at de stænger, net og andre elementer.med det i tankerne, lad os tage en kort se på de rutiner. af de tre rutiner, der er til rådighed, vi anvender, fillrect, og strokerect metoder.den metode, fillrect, faktisk udfylder afsmeltet rektangel, mens de, strokerect, metode kun strøg den rektangel.bortset fra, at begge metoder tager de samme parametre.,, x - x samordne det punkt, hvorfra at oppebaere.,, y - y - koordinere med hensyn til oprindelse.,, bredde - definerer bredden af rektangel skal udarbejdes.,, højde, - definerer rektanglets højde.,,, javascript magi, som altid, jeg anbefaler, at du kan downloade kildekode, og har det på side som reference.det er lettere at se på det store billede og analysere hver enkelt funktion, en efter en, end at se på hver enkelt funktion individuelt og skaber så store billeder i dit sind.,, variable erklæring, var barspacing = 20, barwidth = 20, cvheight = 220, numylabels = 8, xoffset = 20, gwidth = 550, gheight = 200 og var maxval, gvalues = [], xlabels = [], ylabels = [] var cv, ctx; figur variabler, xlabels, - et system, der har værdi af etiketterne på x - aksen.,, ylabels, - det samme som ovenfor bortset fra, at det indeholder værdier for y - aksen etiketter.,, gvalues - system, der indeholder de data, vi klarer den figur datakilde.,, cv - variabel, peger i retning af, at man sejl element.,, ctx - variabel til at henvise til forbindelse af lærred element.,, diagram mulighed variabler, disse variabler hold hårdt kodede værdier til at støtte os i placering og indretning af figur og de enkelte barer.,, barspacing - definerer afstanden mellem de enkelte barer.,, barwidth - definerer bredden af hver enkelt bar.,, cvheight - definerer højden af lærred element.svært krypterede, da vi skabte lærred element på forhånd.stik af version varierer i denne funktion.,, numylabels - fastlægger antallet af etiketter, der skal anvendes på y - aksen.,, xoffset - definerer rummet mellem begyndelsen af lærred element og den faktiske figur.dette rum er brugt til at etiketterne på y - aksen.,, gwidth, gheight, - kodede værdier med dimension af den faktiske levering rum i figur selv.,,, hvordan hver enkelt variabel kontroller udseendet af diagrammet, tager de værdier, med jquery er stærk motor, bliver det meget nemt for komitéen vi får de oplysninger, vi har brug for.her har vi en række muligheder for at få adgang til den nødvendige elementer.lad mig forklare et par nedenfor: $(tr). børn ("td: ulige"). (function() (//kode her}), er den nemmeste måde at få adgang til den nødvendige rækker.ser ud til, tr element, og til alle andre, td, element.ikke dårligt, når du har mere end én tabel på din side.$("# oplysninger"). ("td: ulige"). (function() (//kode her}), en meget mere ligetil.vi går i id af bordet og adgang til alle andre træk.$("# data tr td: ulige"). (function() (//kode her}), samme som ovenfor bortset fra, at vi kun bruger css stil vælgeren syntaks.$("# data tr td: n - barn (2)"). (function() (//kode her}), den version, vi bruger i dag.det er meget bedre, hvis vi er nødt til at tage oplysninger fra en anden række eller, hvis der er behov for flere rækker.den endelige udgave ligner så:, funktion grabvalues () (//adgang til den nødvendige tabel celle, ekstrakt og tilføje værdi til værdier system.$("# data tr td: n - barn (2)"). (function() {gvalues. tryk ($(dette). text())}); //adgang til den nødvendige tabel celle, ekstrakt og tilføje værdi til xlabels system.$("# data tr td: n - barn (1)"). (function() {xlabels. tryk ($(dette). text())})}, ikke noget kompliceret.vi bruger snippet kode, nævnt ovenfor, at tilføje værdi i tabellen celle til, gvalues, vifte.det næste, vi skal gøre det samme, bortset fra at vi adgang til den første tabel celle, for at få den nødvendige mærkning for x - aksen.vi har sammenfattet det dataudtræk logik til sin egen funktion for kode genbrugelighed og læsbarhed.,, lærred initialization, funktion initcanvas () (//forsøger at få adgang til gulvet element og smide en fejl, hvis det ikke er til rådighed, cv = $("# figur"). kom (0); hvis (!cv) {tilbage;} //forsøge at få et 2d sammenhæng for gulvet og smide en fejl, hvis ikke ctx = cv. getcontext ('2d '); hvis (!ctx) {tilbage;}}, rutinemæssige lærred initialization.vi forsøger at få adgang til gulvet element i sig selv.vi kaster en fejl, hvis det ikke.næste gang, vi forsøger at opnå en henvisning til 2d - at sammenhæng gennem, getcontext, metode og smide en fejl, hvis vi ikke er i stand til at gøre det.,, nytteværdi funktioner, før vi træder ind i den faktiske levering af diagrammet i sig selv, er vi nødt til at se på en række nyttige funktioner, som hjælper os meget i processen.hver af dem er lille i sig selv, men vil blive udbredt i hele vores kodeks. fastsættelsen af den maksimale værdi, funktion maxvalues (arr) (maxval = 0 (i = 0. jeg < arr.length; jeg + +) (hvis (maxval < parseint (arr [i]) (maxval = parseint (arr [i]);}} maxval * = 1.1), en lille funktion, som gentager gennem gået system og ajourfører den, maxval, variabel.gør opmærksom på, at vi øger den maksimale værdi på 10% til særlige formål.hvis den maksimale værdi er tilbage, som det er, så er den bar, der repræsenterer den øverste værdi vil røre ved kanten af lærred element, som vi ikke ønsker.med det i tankerne, en 10% stigning er udstedt., normaliserede værdien, funktion, størrelse (param) {tilbage matematik. runde (param /maxval) * gheight)), en lille opgave at normalisere de udvundne værdi med hensyn til højden af lærred element.denne funktion er udbredt i andre funktioner og direkte i vores kode til at udtrykke den værdi, som en funktion af højden af lærred.tager et enkelt parameter, returnerer x samordne funktion x (param) (afkast (param * barwidth) + (param + 1) * barspacing) + xoffset;}, returnerer den x samordne til, fillrect, til at støtte os i placeringen af hver enkelt bar.jeg vil forklare dette lidt mere i detaljer, når det anvendes., og returnerer y koordinere funktion y (param) {tilbage gheight - skala (param)}, returnerer den y ren til, fillrect, en metode til at støtte os i placeringen af hver enkelt bar.flere oplysninger på et senere tidspunkt., returnerer den bredde, funktion, bredde () (tilbage barwidth;}, vender tilbage til bredden af det enkelte bar., returnerer den højde, funktion højde (param) {tilbage scale (param)}, returnerer den højde for bar at drage.bruger, omfanget, funktion at normalisere den værdi, og så tilbage til kilden.,, at x - aksen etiketter, funktion drawxlabels () (ctx. save(); ctx.font = "10px" arial "; ctx.fillstyle ="� "for (indeks = 0; indeks (< gvalues.length; indeks + +) (ctx. filltext (xlabels [indeks] x (indeks) gheight + 17)} ctx. restore();}, en enkelt funktion at gøre mærkningen af x - aksen.vi redder den aktuelle lærredet, herunder alle gøre miljøer, så alt, hvad vi gør i funktioner ikke siver ud.så sætter vi den størrelse og fuld af etiketterne.det næste, vi iterate gennem, xlabels, system til, filltext, metode, hver gang at gøre mærkningen.vi bruger det, x, funktion til at støtte os i placeringen af etiketter., med y - aksen etiketter, funktion drawylabels() (ctx. save(); (indeks = 0; indeks (< numylabels; indeks + +) (ylabels. tryk (matematik. runde (maxval /numylabels * (indeks + 1)); ctx.fillstyle = "# 000" ctx. filltext (ylabels [register], xoffset, y (ylabels [indeks]) + 10)} ctx. filltext ("0", xoffset, gheight + 7); ctx. restore();}, en smule mere vidtløftige funktion.vi redder den aktuelle situation i gulvet, og så videre.vi deler, maxval er værdien i n elementer, hvor den variabel, numylabels, dikterer, n. disse værdier er så tilføjes, ylabels, vifte.nu, som det fremgår af ovenstående, filltext, metode er kaldet til at henlede de enkelte mærker med, y, funktion at hjælpe os i placeringen af hver enkelt etiket.vi gør en nul - på bunden af lærred til at afslutte udarbejdelsen af y - etiketter.,, der trækker figur, funktion drawgraph () (for (indeks = 0, indeks (< gvalues.length; indeks + +) (ctx. save(); ctx.fillstyle = "# b7b7b7" ctx. fillrect (x (indeks), g (gvalues [indeks]), width(), højde (gvalues (indeks))); ctx. restore();), og den funktion, som henleder den faktiske barer i bar figur.gentager gennem, gvalues, system og gør hver enkelt bar.vi bruger den, fillrect, en metode til at drage de stænger.som forklaret ovenfor, metoden tager fire parametre, som er taget af vores almennyttige funktioner.det løbende indeks af processen er gået til vores opgaver som parametre, sammen med den faktiske værdi i det system, som skulle.,, x, x - koordinere af funktion tilbage bar.hver gang, det er tallet med værdien af de beløb, barwidth, og barspacing, variabler.,, y, funktion, beregner den forskel mellem højden af lærred element og den normaliserede oplysninger og returnerer det.jeg ved, det lyder lidt skør, men det skyldes den kendsgerning, at det y - værdier på lærred, net stigning på bevæger sig ned, mens vores diagram y værdier stiger med op.vi har således at gøre en lille indsats for at få det til at fungere på den måde, vi ønsker.,, bredde, funktion, returnerer bredden af den enkelte barer sig.,, højde, funktion juste retour de normaliserede værdi, der skal anvendes som højden af bar at være der.,, smdrg., i denne første del, vi har gennemført de base logikken i vores stik som en separat version med skelettet udseende og karakteristika.vi gennemgik lærred koordinatsystem, rektangel, at metoder, nogle seje udtræk af data ved hjælp af jquery er medfødte sejhed [nævnte jeg, hvor meget jeg elsker jquery?], så på, hvordan de etiketter, der er, og til sidst set på logikken bag gengivelse af figur.ved afslutningen af denne artikel, og produktionen skal ligne så. næste!vores nuværende gennemførelse er noget, der mangler.det ser kedelig, kan ikke skabe flere figurer på samme side, og lad os se det i øjnene, er lidt spartansk på træk foran.vi skal tage fat på det næste uge.i den næste artikel vi:,, refactor vores kode til at gøre det til en fuldgyldig jquery stik af. at tilføje nogle eye candy, omfatter nogle smarte træk.,, spørgsmål?kritik?roser?de er fri til at ramme de bemærkninger.tak fordi du læste, og når du er klar, gå over til anden del.,, følger os på twitter, eller abonnere på nettuts rss foder til mere daglige web - udvikling tuts og genstande,.,,,









Previous:
Next Page: