Luo ja muokkaa SVG-grafiikkaa IoT:hen JavaScriptillä yhdistetyistä antureista

Luo ja muokkaa SVG-grafiikkaa IoT:hen JavaScriptillä yhdistetyistä antureista

Luo ja muokkaa SVG-grafiikkaa IoT:hen JavaScriptillä yhdistetyistä antureista

Tässä piirtämistä käsittelevän artikkelisarjan viimeisessä osassa grafiikkaa esineiden Internetiin yhdistettyjen antureiden datalla, on aika puhua luomisesta tai muokkaamisesta JavaScript piirustuksia muodossa SVG ja jotkin elementit HTML jotka toimivat konttina tai tarjoavat grafiikkaa täydentäviä tietoja.

Sisällysluettelo

    Datakaaviot antureista, jotka on liitetty esineiden Internet (IoT) -säilöyn HTML-muodossaEsineiden Internetiin (IoT) yhdistettyjen antureiden datakaaviot CSS:n ulkonäön määritelmäDatakaaviot antureista, jotka on liitetty esineiden Internetiin (IoT) piirtäen SVG:lläDatakaaviot esineiden Internetiin (IoT) yhdistetyistä antureista Luominen ja muokkaaminen JavaScriptillä

    Tämän opetusohjelman kohdekäyttäjien on tarkoitus muodostaa elektroniikka- ja tietokoneohjelmointiprofiili. mikro-ohjaimet, he eivät ehkä ole tuttuja HTML, CSS o SVG; Tästä syystä aiemmissa osissa tehtiin lyhyt esittely kieleen tai vastaavaan tekniikkaan. Tässä viimeisessä osassa lähestymistapa on hieman erilainen, koska lukijat osaavat varmasti ohjelmoida, on mahdollista, että käyttämällä kieltä C + + mitä, miten JavaScript, jakaa perussyntaksin kanssa C ja sitä voidaan pitää viitteenä useimpien ohjelmoinnin peruskonseptien ohittamiseen ja siten keskittymiseen eroihin ja erityiseen käyttöön, joka kiinnostaa meitä luomaan anturigrafiikkaa IoT:ssä.

    Nimi antaa vihjeen ensimmäisestä erosta: JavaScript Se on ohjelmointikieli käsikirjoitus (yhdysmerkki) ja sellaisenaan se on tulkita, sitä ei tarvitse kääntää; konteksti, jossa käsikirjoitus (esimerkiksi verkkoselain) lukee, kääntää ja suorittaa tilaukset. Tarkemmin sanottuna useimmissa tapauksissa on a ajonaikainen käännös (JIT), mutta koodin kirjoitusprosessiin JavaScript Se ei vaikuta meihin, kirjoitamme vain koodin ja se voi toimia.

    Nimi sisältää myös ensimmäisen hämmennyksen: JavaScript ei ole pienintäkään suhdetta Jaava. Aluksi, kun se kehitettiin Netscape selaimessaan sitä kutsuttiin ensin Mochaksi ja sitten vähemmän hämmentäväksi LiveScriptiksi. Sen onnistuneen käyttöönoton jälkeen selaimissa ja niiden ylittämisen jälkeen se standardisoitiin nimellä ECMAScript (jäljempänä ECMA-262, versio 6 kirjoittamishetkellä) muuttua neutraaliksi sen toteuttavien selaimien suhteen. Tällä hetkellä on myös standardi ISO versiosta 5, 2011 (ISO / IEC 16262: 2011 artikkelin kirjoittamisen yhteydessä)

    Muuttujat, perustietotyypit ja objektit JavaScriptissä

    Toisin kuin mitä tapahtuu esim C + +, en JavaScript tietotyyppiä ei sisällytetä muuttujaa määritettäessä ja myös muuttujaan liittyvä tyyppi ei ole kiinteä, on mahdollista antaa erityyppinen arvo koko ohjelman suorituksen ajan.

    Edellisessä esimerkissä muuttuja "asia" on ilmoitettu (tietotyyppiä ilmoittamatta), sitten määritetään eri tyyppiset tiedot ja sitä tarkastellaan typeof se tyyppi JavaScript jonka hän on tulkinnut. Voit korjata koodin kirjoittamalla sen verkkoselaimen tarkastuskonsoliin (mikä ei vaikuta verkon esitykseen) console.log().

    Voit pakottaa tietojen muuntamisen tiettyyn tyyppiin, erityisesti tekstin numeerisiksi, käyttämällä toimintoja, kuten parseInt() o parseFloat() jotka muuntuvat kokonaisluvuiksi tai liukulukuiksi. Päinvastainen muunnos voidaan tehdä String(), vaikka se on epätodennäköistä, koska automaattinen muuntaminen yleensä riittää. Kanssa parseFloat()Voit esimerkiksi saada verkkosivun ominaisuuden arvon, kuten yksiköitä sisältävän objektin leveyden tai korkeuden. Tällä tavalla ilmaisu parseFloat("50px"); palauttaa tuloksena 50, numeerisen arvon.

    En JavaScript kaksois- ja kertalainausmerkkien välillä ei ole eroa; Tietotyyppi molemmissa tapauksissa on string, ja jokainen niistä voi sisältää toisen ilman pakokoodeja.

    Edellisessä esimerkissä voidaan nähdä, että muuttuja, kun se on ilmoitettu (olemassa), mutta sille ei ole annettu arvoa, sisältää määrittelemättömän tietotyypin (undefined). Määrittämättömällä objektilla on arvo null; Eli objekti on olemassa, mutta ilman arvoa; muuttujalla, joka viittaa siihen, ei olisi a typeof undefined mutta object. Objekti voi olla myös tyhjä, eli ei tyhjä, mutta sillä ei voi olla ominaisuuksia.

    että määrittele objekti JavaScript ovat henkselien sisällä ({ y }) ominaisuudet tai menetelmät erotettuna kaksoispisteellä (:) ominaisuuden nimi ominaisuuden arvo ja pilkulla (,) eri ominaisuuksia. Löydät lisätietoja tästä tavasta ilmaista esinettä artikkelista JSON-muoto.

    Vaikka voit käyttää syntaksia, joka saattaa saada sinut ajattelemaan toisin, en JavaScript Ei ole luokkia, vaan prototyyppejäEli jotta objekti perii ominaisuuksia ja menetelmiä, luodaan toinen objekti (prototyyppi), jota muut (lapset) käyttävät viitteenä. Tyyliä lähinnä oleva syntaksi JavaScript prototyypin käyttäminen on Object.create vaikka se on myös mahdollista (ja joskus hyödyllistä) käyttää new kuten muissakin oliokielissä.

    että kysely, jos jokin objekti on toisen esiintymä, jos käytät sitä prototyyppinä, jos perit sen ominaisuudet, lyhyesti sanottuna voit käyttää instanceof ( luotu kanssa new) Tai isPrototypeOf ( luotu kanssa Object.create), jonka arvo on tosi, kun objekti käyttää prototyyppiä, ja epätosi, kun se ei käytä sitä.

    Kun objekti on luotu käyttämällä toista prototyyppinä, eli kun objekti on luotu, se voidaan lisätä uusia ominaisuuksia tai ohittaa prototyypin ominaisuudet käyttämällä pistesyntaksia kuten kohdassa gato.peso=2.5.

    La taulukot sisään JavaScript Ne ovat erilaisia ​​kuin luultavasti tuntemasi C. Aluksi ne ilmoitetaan ilman tarvetta ilmoittaa niiden pituutta, vain avaus- ja sulkemishakasulkeilla ([ y ]), komponentit voivat olla heterogeenisia (eri tietotyyppejä samassa taulukossa) ja uusia elementtejä voidaan lisätä ilman rajoituksia. Matriisit JavaScript ovat itse asiassa luetteloita (kokoelmia) elementeistä, joihin viitataan numeroindeksillä tai nimellä. Taulukko voi sisältää samanaikaisesti numeerisia indeksejä ja elementtien nimiä, mutta on yleistä käyttää objekteja (ominaisuuksia) toisen tyypin hyödyntämiseen.

    Kuten edellisestä esimerkistä voidaan nähdä, voit tietää, vastaako muuttuja taulukon esiintymää (se on taulukkoobjekti) instanceof, kuten on jo käytetty yleisten objektien kanssa tai uudemmissa versioissa JavaScript voit turvautua Array.isArray()

    Voit käyttää taulukon elementtejä käyttämällä sen hakemistoa (matriz[7]) tai ominaisuuden nimellä hakasulkeissa olevalla nimellä (matriz["nombre"]) tai tavallisella kohteiden pistesyntaksilla (matriz.nombre). Koska nimi on tekstimerkkijono, sen muodostamiseen voidaan käyttää lauseketta, mukaan lukien muuttujat. Ominaisuuksia sisältävän taulukon läpi kiertämiseen voidaan käyttää muotoa sisältävää silmukkaa for(propiedad in matriz).

    Se on tavoitteemme kannalta kiinnostavaa käsitellä objekti Date, jolla voit esittää ja hallita päivämäärää ja kellonaikaa JavaScript. Objekti voidaan ilmentää ilman tietoja, joten se ottaa nykyisen päivämäärän ja kellonajan, tai se voidaan luoda ilmoittamalla päivämäärä arvona, joko millisekunteina 1. tammikuuta 1970 lähtien (esim. Unix-aika tai POSIX-aika mutta ilmaistaan ​​millisekunteina sekuntien sijaan) tai määrittämällä erilliset arvot vuodelle, kuukaudelle, päivälle, tunnille...

    Kohde sisältää täydellisen sarjan menetelmiä päivämäärän ja ajan kyselyyn tai asettamiseen:

    • now()
      Palauttaa nykyisen päivämäärän ja kellonajan millisekunteina 1. tammikuuta 1970 lähtien

    • getTime() | setTime()
      Hakee tai muuttaa vastaavasti aika-arvon millisekunteina 1. tammikuuta 1970 lähtien. valueOf(), joka on useimmissa objekteissa esiintyvä menetelmä, saadaan myös vastaavan Date-objektin arvo, kuten esim getTime() kanssa Unix-aika tai POSIX-aika ilmaistuna ms.

    • getMilliseconds() | setMilliseconds()
      Käytetään kohteen millisekunnin murto-osan kyselyyn tai asettamiseen Date jolla se toteutetaan. Tarkasteltaessa saatu arvo on välillä 0 - 999, mutta voidaan määrittää suurempia arvoja, jotka kerääntyvät kokonaispäivämäärään ja kellonaikaan, joten kuten muutkin get-menetelmät, se auttaa lisäämään kohteen arvoa Date (tai pienennä sitä, jos käytetään negatiivisia arvoja).

    • getSeconds() | setSeconds()
      Palauttaa tai muuttaa vastaavasti objektin sekuntien arvon Date.

    • getMinutes() | setMinutes()
      Käytetään kohteen tarkistamiseen tai minuuttien asettamiseen Date.

    • getHours() | setHours()
      Voit tarkastella tai muokata kohteen tunteja (0 - 23). Date.

    • getDay()
      Palauttaa päivämäärän viikonpäivän arvona 0 - 6 (sunnuntai - lauantai).

    • getDate() | setDate()
      Palauttaa tai muuttaa kohteen kuukauden päivää Date johon sitä sovelletaan.

    • getMonth() | setMonth()
      Käytetään kohteen kuukausinumeron tarkistamiseen tai muokkaamiseen Date.

    • getFullYear() | setFullYear()
      Kyselee tai asettaa vuoden arvon objektille, joka sisältää päivämäärän ja kellonajan.

    Aiemmat menetelmät Date sisältää version UTC pystyä työskentelemään suoraan yleisajan kanssa ilman välilaskutoimituksia. Siinä mielessä esim. getHours() on versio getUTCHours() o getMilliseconds() vaihtoehto getUTCMilliseconds() työskennellä vaihtoehtoisesti virallisen (laillisen) tai yleisen ajan kanssa. Kanssa getTimezoneOffset() Voit tietää eron yleisajan ja paikallisen virallisen ajan välillä.

    JavaScript-toiminnot

    Jos luet tätä, tiedät varmasti kuinka ohjelmoida. mikro-ohjaimet en C vuonna C + + ja tietää funktion käsitteen. Vaikka perusidea on sama, JavaScript Tapa, jolla ne määritellään ja käytetään, on hieman erilainen. Aluksi on jo sanottu, JavaScript Se ei käytä nimenomaisesti tietotyyppejä, joten sinun ei tarvitse ilmoittaa sitä funktiota määriteltäessä. Seurata, Toiminnalla ei ole pakollista nimeä, ne voivat olla nimettömiä. Ne voidaan liittää muuttujaan niiden kutsumiseksi, mutta se ei välttämättä ole välttämätöntä, koska joskus on hyödyllistä kutsua ne välittömästi, jolloin sulut ja parametrit lisätään funktion määrittelyn jälkeen.

    Jos haluat määrittää funktion, käytä etuliitettä function, jos mahdollista, kirjoita sulkuihin nimi, argumentit (funktiolle välitetyt parametrit) ja aaltosulkeisiin koodi, joka suoritetaan, kun funktiota kutsutaan.

    Varmasti edellisessä esimerkissä "tulos"-muuttujaa ei tarvittu ollenkaan, mutta se on hyvä tekosyy muistaa muuttuva laajuus, joka toimii odotetulla tavalla: "result"-muuttuja on olemassa vain "double"-funktiossa. Sisään JavaScript voidaan myös käyttää let, sijaan var, laajentaaksesi muuttujan koodilohkokontekstiin (suljettu aaltosulkeisiin, { y })

    Kun edellisessä osiossa puhuttiin objekteista, jotain perustavanlaatuista puuttui: ominaisuudet on määritelty, mutta menetelmiä ei ole määritelty. Odotetusti, objektimenetelmät ovat funktioita, niillä ei ole nimeä ja niitä käytetään (kutsutaan) objektimääritelmän antamasta (ominaisuuden) nimestä.

    Edellisessä esimerkissä on jo menetelmä, "view_temperature", joka näyttää "current_temperature"-ominaisuuden arvon konsolin kautta. Se ei ole kovin hyödyllinen, mutta se antaa täydellisemmän käsityksen siitä, millainen objektin määritelmä on JavaScript.

    Päästäksesi objektin (funktioiden) menetelmiin sen ominaisuuksiin, käytä this, kuten edellisessä esimerkissä rivillä 11, kun käytetään "current_temperature"-ominaisuutta.

    Käytä asiakirjaobjektimallia (DOM) JavaScriptillä

    alkaen JavaScript Sinulla on pääsy sen verkkosivun sisältöön, jolla se toimii, sekä joihinkin sivun näyttävän selaimen osiin, mutta et järjestelmäresursseihin. Tietorakenne, joka tukee ominaisuuksia ja menetelmiä, joista pääsee käsiksi JavaScript osa ikkunaobjektia, erityisesti kohteen (asiakirjan HTML) vastaa objektia document. Vaikka sitä toisinaan käytetään selvyyden vuoksi, ei ole tarpeen edeltää ikkunoita menetelmiin tai ominaisuuksiin viitatakseen niihin, riittää esim. document, ei tarvitse kirjoittaa juuriobjektin nimeä kuten on window.document, niin kauan kuin nykyiseen ikkunaan viitataan.

    Eniten käytetty muoto löytää kohteen asiakirjasta HTML Se tapahtuu menetelmän kautta getElementById(), jolle koodia luotaessa ilmoitettu tunnus välitetään argumenttina HTML. Aiemmissa osissa selitetyn perusteella on helppo olettaa, että pääset käsiksi myös kohteen sisällä oleviin komponentteihin document käyttämällä pistesyntaksia (document.componente) tai suluissa käyttäen molempia nimeä (document["componente"]), hyödyllisin, kuten numeerinen indeksi, vaikeakäyttöinen ja epäkäytännöllinen käsin laaditun verkkosivun sisällössä.

    kanssa JavaScript voit hanki elementti, joka sisältää toisen elementin (elementti tai pääsolmu) kiinteistösi konsultointi parentNode tai omaisuutesi parentElement, ero on siinä, että pääelementti (parentElement) merkkijonon viimeisestä elementistä DOM Se on nolla (null) ja pääsolmu (parentNode) on itse asiakirja (document).

    että muokata elementin sisältöä HTML, esimerkiksi etiketin <div>, Sitä voidaan käyttää innerHTML ja muuttaa sen ominaisuuksia voit määrittää sille eri luokan className tai muuttaa sen ominaisuuksia erikseen style. Web-sivun elementin näyttämän tyylin tarkasteleminen ei välttämättä ole hyödyllistä style koska se voi riippua useista tekijöistä tai sitä ei yksinkertaisesti ole erikseen määritelty. Web-sivulla lopulta näytetyn elementin tyylin tarkistamiseksi käytetään getComputedStyle-menetelmää.

    Dokumenttielementtiin HTML Sille voidaan määrittää useita luokkia sen ulkonäön ja käyttäytymisen määrittämiseksi hallita objektin luokkien luetteloa JavaScript voit turvautua classList joka tarjoaa menetelmät add lisätäksesi uuden luokan luetteloon, remove poistamaan se, toggle korvata se tai tarkastella elementin luokkaluettelon sisältöä item ja contains, joka palauttaa luokan, joka on tietyssä paikassa luettelossa, ja arvon true o false onko jokin luokka luettelossa vai ei.

    Edellisessä esimerkissä se sijaitsee kanssa getElementById objekti, jota haluat käsitellä (elementti <div> hänen id), ennen ulkoasun muuttamista sisältö poistetaan määrittämällä innerHTML tyhjä tekstimerkkijono, sille määritetään uusi luokka className ja sen tyyliä on muokattu style sisällön (lämpötilan) arvosta riippuen värin vaihtaminen tarvittaessa kiinteistön kautta color. Kun kuvasuhde on määritetty, arvo kirjoitetaan uudelleen käyttämällä innerHTML.

    Yllä olevan esimerkin toisessa osassa (rivit 9-19) käytetään koodielementtiä HTML käyttämällä syntaksia document[] ja omaisuutta id elementin muuttaa sen luokkaluetteloa menetelmällä classList.remove() ja menetelmälläclassList.add(), joka perustuu useiden kyselyiden tulokseen, jotka suoritetaan ehdollisissa suorituksissa ja joita he vertaavat keskenään classList.contains().

    Milloin se tulee viittaa elementtiin HTML eri kertaa koko koodin ajan JavaScript, se on vähän tehokkaampaa määrittää se muuttujalle tai käytä sen hakemistoa nimen sijaan, koska muuten käyttämäsi menetelmä JavaScript sen hankkiminen joka kerta vaatisi sen nimen etsimistä, mikä vie hieman enemmän aikaa kuin jos muuttujaa käytettäisiin.

    että lisää uusia objekteja dokumenttiin HTML, ne voidaan luoda ensin menetelmällä createElement de document ja liittää ne myöhemmin muihin elementteihin puun kohdassa, joka on tarpeen appendChild. Objektin luomiseen XML, kuten esineitä SVG joita käytämme piirtämään IoT-antureiden kaaviota, voit käyttää createElementNS (NS varten nimiavaruus). Kuten kerrottiin, kun puhutaan muodosta SVG, sitä vastaava nimiavaruus (nykyisessä versiossa) on http://www.w3.org/2000/svg, joka tulee välittää createElementNS argumenttina elementtityypin kanssa, svg, tässä tapauksessa.

    Una vaihtoehto innerHTML lisätäksesi tekstiä dokumenttielementin sisällöksi HTML on menetelmä createTextNode() esineen document. Tällä vaihtoehdolla voit luoda uutta tekstiä (johon päästään myöhemmin, jos se on määritetty muuttujalle), joka sisällytetään objektipuuhun menetelmällä appendChild(). kuten vaihtoehto appendChild(), joka lisää uuden sisällön sen solmun loppuun, johon se on lisätty, voit käyttää menetelmää insertBefore(), joka lisää uuden objektin olemassa olevan objektin eteen. pitää päällä insertBefore() sijaan appendChild() tarjoaa menetelmän, joka palvelee esim lajitella uusia esineitä olemassa olevien eteen kun elementin on oltava toisen edessä (kuten luettelossa) tai peittävä tai peitetty graafisessa rakenteessa, jossa on elementtejä lähempänä etu- tai taustaa.

    Reagoi tapahtumiin JavaScriptillä

    Kun tapa käyttää verkkosivua IoT-kytketyn anturikaavioiden säilönä sitä käytettiin onload Etiketissä <body> aloittaaksesi kaavion piirtämisen. Tämä koodiobjekteihin liittyvä ominaisuus HTML, viittaa tapahtumia JavaScript. Kuten jo selitettiin, se suorittaa toiminnon, kun sivu on latautunut. Vaikka se on liitetty koodiin HTML pitääksesi sen paremmin mielessä, se olisi voitu kirjoittaa koodiin JavaScript kuten body.onload=dibujar; ollessa dibujar sen toiminnon nimi, joka käynnistetään, kun verkkosivu latautuu.

    Uusimmissa versioissa JavaScript tapahtumia voidaan liittää funktioihin käyttämällä addEventListener muodossa objeto.addEventListener(evento,función); tai käyttämällä syntaksia objeto.evento=función; joka toimii myös vanhemmissa toteutuksissa. Voit poistaa tapahtumaan liittyvän toiminnon linkityksen removeEventListener jolla on sama muoto kuin addEventListener.

    JavaScript Se pystyy reagoimaan lukuisiin tapahtumiin, joita verkkosivulla voi tapahtua. Se voi esimerkiksi havaita, kun elementtiä napsautetaan HTML kanssa onmousedown, tai kun sitä napsautetaan onclick, kun näppäintä painetaan onkeydown, käyttämällä vierityspalkkia painikkeella onscroll. Meidän tarkoitukseen se riittää meille tunnista sivun lataus onload ja sen koon muuttaminen kanssa onresize. Yhdistämme nämä tapahtumat esineisiin body y window ja DOM vastaavasti. Ensimmäinen voidaan määrittää koodissa HTML, kuten näkyy ja toinen koodissa JavaScript ensimmäisen kutsuman funktion sisällä ja muodossa window.onresize=redimensionar; ollessa redimensionar funktio, jota kutsutaan aina, kun ikkunan koko muuttuu.

    Suorita tietyn ajan kuluttua

    JavaScript on kaksi resurssia lykätty toteutus: setTimeout, joka suorittaa toiminnon tietyn ajan kuluttua ja setInterval joka suorittaa toiminnon joka tietty aikaväli. Molemmat menetelmät vaativat parametreina (1) kutsutun funktion ja (2) millisekunteina ilmaistun aikavälin. Pysäyttääksesi niiden toiminnan, voit määrittää näiden funktioiden palauttaman tuloksen muuttujille ja välittää ne argumenttina clearTimeout tai clearInterval kun et halua kutsua niitä uudelleen (tai kun et halua, että niitä suoritetaan ensimmäistä kertaa) setTimeout o setInterval vastaavasti.

    Edellisessä esimerkissä menetelmä esitellään alert joka näyttää varoituskyltin. Vaikka sitä käytettiin laajasti aiemmin, se on tällä hetkellä melkein kielletty koodista JavaScript koska on aggressiivista (tunkeilevaa) peittää web-sivu valintaikkunalla.

    Ohjelmassa, joka on kirjoitettu a mikro-ohjain pienestä sarjasta (kuten lautasella oleva Arduino Uno) on yleistä käyttää globaaleja muuttujia, kuten edellisessä esimerkissä JavaScript, koska koodi on lyhyt eikä erityisen hämmentävä, koska toiminnot on usein toteutettu ad hoc ja koska globaalien muuttujien käyttö mahdollistaa muistin käytön ennustamisen hyvin yksinkertaisella ja intuitiivisella tavalla, mikä on kriittistä järjestelmissä, joissa on vähän resursseja. Sen sijaan, en JavaScript On yleistä vähentää globaalien muuttujien käyttö mahdollisimman vähäiseksi. koska sen ei tarvitse kiirehtiä muistin käyttöä, koska se toimii normaalisti a prosessori joiden resurssit ovat paljon paremmat kuin a MCU, koska se todennäköisesti esiintyy rinnakkain paljon kolmannen osapuolen koodia, joiden kanssa sen on toimittava häiritsemättä ja koska se on avoin järjestelmä, tulevaa suorituskontekstia ei voida ennustaa (ohjelman mikro-ohjain Small määrittelee toimintansa täysin lisäämättä koodia sen ollessa käytössä) ja koska sovellusten mitat voivat vaikeuttaa lukemista, jos koodi ei kapseloi toimintaansa, jolloin menetelmät ovat mahdollisimman itsenäisiä.

    Matemaattiset operaatiot JavaScript Math -objektin kanssa

    Monimutkaisemman matemaattisen laskennan matemaattiset toiminnot on ryhmitelty objektiin Math. Tätä objektia käytetään suoraan, sitä ei tarvitse ilmentää sen sisältämien menetelmien tai ominaisuuksien (vakioiden) käyttämiseksi.

    • Math.abs(n) Parametrin n absoluuttinen arvo
    • Math.acos(n) Parametrin n arkosiini (tulos radiaaneina)
    • Math.asin(n) Parametrin n arksini (tulos radiaaneina)
    • Math.atan(n) Parametrin n arktangentti (tulos radiaaneina)
    • Math.atan2(n,m) Arktangentti n/m (tulos radiaaneina)
    • Math.ceil(n) Pyöristä parametri lähimpään kokonaislukuun ylöspäin
    • Math.cos(α) Parametrin α kosini (α radiaaneina)
    • Math.E e-numero (≃2.718281828459045)
    • Math.exp(n) e korotettu parametriin n: en
    • Math.floor(n) Pyöristä parametri n lähimpään kokonaislukuun alaspäin
    • Math.log(n) Parametrin n luonnollinen logaritmi (kanta e).
    • Math.LN2 Luonnollinen logaritmi (kanta e) luvusta 2 (≃0.6931471805599453)
    • Math.LN10 Luonnollinen logaritmi (kanta e) luvusta 10 (≃2.302585092994046)
    • Math.LOG2E e:n peruslogaritmi 2 (≃1.4426950408889634)
    • Math.LOG10E e:n peruslogaritmi 10 (≃0.4342944819032518)
    • Math.max(a,b,c,…) Siirrettyjen parametrien luettelon suurin arvo
    • Math.min(a,b,c,…) Siirrettyjen parametrien luettelon pienin arvo
    • Math.PI Numero π (≃3.141592653589793)
    • Math.pow(n,m) Ensimmäinen parametri n nostettuna toiseksi parametriksi m: nm
    • Math.random() (Melkein) satunnaisluku välillä 0.0 ja 1.0
    • Math.round(n) Pyöristä parametri n lähimpään kokonaislukuun
    • Math.sin(α) Parametrin α sini (α radiaaneina)
    • Math.sqrt(n) Parametrin n neliöjuuri
    • Math.SQRT1_2 1/2:n neliöjuuri (≃0.7071067811865476)
    • Math.SQRT2 2:n neliöjuuri (≃1.4142135623730951)
    • Math.tan(α) Parametrin α tangentti (α radiaaneina)

    Lataa tiedot palvelimelta AJAX:n avulla

    IoT:hen tallennettujen tietojen piirtämisessä noudatetaan sitä, että dataa ladataan aika ajoin palvelimelta ja piirretään uudelleen graafi, jolla ne esitetään. Tietojen lukemiseen palvelimelta käytetään tekniikkaa AJAX (asynkroninen JavaScript ja XML) esineen kautta XMLHttpRequest de JavaScript. Datakaavion piirtäminen tehdään käyttämällä objektia uudelleen SVG joka on jo koodissa HTML ja joka sisältää kaavion, jonka koordinaatit on muutettu vastaamaan uutta ladattua dataa.

    Tämän ehdotuksen esimerkissä piirustuksen päivityksen lisäksi verkkosivulle päivitetään myös teksti, joka näyttää kunkin kaavion viimeisen mittaustiedon päivämäärän ja arvon.

    Palvelinpuolella on tietokanta, joka sisältää tiedot että IoT:hen kytketyt anturit ovat valvoneet. Objektipyyntö lukee tämän tietokannan XMLHttpRequest vastaamalla sisään koodatuilla tiedoilla JSON-muoto, vaikka käytetyn menetelmän nimi viittaa suhteeseen muotoon XML.

    Ensimmäisessä polaridad.es-opetusohjelmassa IoT-tietojen tallennus Näet esimerkin infrastruktuurista, jolla voidaan hallita esineiden Internetiin yhdistettyjen laitteiden tarjoamia tietoja palvelinpuolelta. Tässä artikkelisarjassa resurssina käytetään palvelinta Apache josta voit käyttää ohjelmointikieltä PHP päästäksesi tietokantaan MySQL o MariaDB. IoT:tä tukevilla palvelimilla on hyvin yleistä löytää tietokantoja MongoDB (NoSQL) ja ohjelmointikieli JavaScript päälle Node.js ohjelmistoinfrastruktuurina.

    Seuraava toiminto vastaa uusimpien tietojen pyytämisestä yhdeltä anturilta palvelimelta. Funktiokutsussa objektia käytetään argumenttina JavaScript joka tukee piirrettyä dataa. Jos sama graafi edustaa useita arvoja, esimerkiksi visuaalisesti korrelaation etsimiseksi, palvelimelle voidaan tehdä pyyntö palauttaa useita samanaikaisesti, mikä on palvelimen toimintatavasta johtuen optimaalinen tapa. HTTP-protokolla.

    Edellisen esimerkin kolmannella rivillä valmistetaan palvelimelle tehtävä kysely, jossa välitetään "vyöhyke"-argumentti, jonka arvo on valvotun paikan nimi tai koodi, koska tiedot alue voi olla rinnakkain samassa tietokannassa eri antureita (esimerkiksi lämpömittarit, jotka mittaavat lämpötilaa eri huoneissa). Edelliselle funktiolle, kaaviotiedot sisältävälle objektille, välitetyn parametrin odotetaan sisältävän ominaisuuden huoneen nimellä ("name_suffix").

    Edellisen koodin rivien 7 ja 14 välissä on objekti XMLHttpRequest joka on tallennettu muuttujaan "ajax". Ennen kuin valitset objektin luontitavan, teet haun window jos XMLHttpRequest ei ollut saatavilla (jota tapahtui Microsoftin Explorerin vanhoissa versioissa ja vaikka se on kaukana jäljessä, se toimii esimerkkinä vaihtoehdoista objektin luomiseksi käyttämällä (natiivista) syntaksia. Object.create o new, samanlainen kuin muissa oliokielissä.

    Jotta vastaus voidaan hallita välittömästi, sitä käsittelevä koodi valmistetaan riveillä 15-26 ennen pyynnön tekemistä palvelimelle.

    Tapa suorittaa kyselyn HTTP palvelimelle koostuu avaa yhteys kanssa open tyyppi ja sivu (valinnaisesti käyttäjätunnus ja salasana), valmistele otsikot pöytäkirjan kanssa setRequestHeader y lähetä pyyntö kanssa send. Otsikko HTTP Content-length sinun on tiedettävä kyselyn pituus (merkkien lukumäärä), joka lasketaan käyttämällä length.

    Kun pyyntö AJAX on valmis, tapahtumaan liittyvä toiminto suoritetaan onreadystatechange. Toiminnon osoittamisen sijaan edellisessä esimerkissä määritellään lennossa anonyymi toiminto, joka hallitsee palvelimelta saapuvien tietojen vastaanottoa. Ensinnäkin rivillä 18 tarkistetaan, että pyynnön tila on "valmis", mikä vastaa arvoa 4 omaisuuden readyState, että tila on "OK". HTTP-protokolla (koodi 200), jonka voi saada kiinteistöstä status ja että saapuneet tiedot ovat JSON-muoto, konsultoi kiinteistöä responseType.

    Kun on varmistettu, että vastauksen tila on odotetusti, edellisen esimerkin rivillä 20 luo objektin tuloksella muuntaen tekstin JSON. Vastauksessa on palautettava päivämäärä, jonka avulla voimme nähdä, onko palvelimen lähettämä tulos ollut jo aiemmin esitetty kaaviossa, mikä varmistetaan rivillä 21. Jos tiedot ovat uusia, rivillä 23 Toiminto, joka on vastuussa kaavion uudelleenpiirtämisestä uudella tiedolla.

    Ajatuksena tätä lukumenetelmää ehdotettaessa on, että tiedot päivitetään hyvin usein. Jos esitetyt tiedot vastaavat pitkää aikaväliä (esim. päivän tai viikon lämpötilat), voidaan toteuttaa ensimmäinen pyyntö, joka kerää kaikki saatavilla olevat tiedot ja sitten esimerkin kaltainen, joka päivittää sen kauden kirjeenvaihtaja.

    Luo satunnaisia ​​tietoja testausta varten

    Kun kaikki palvelin- ja asiakasinfrastruktuuri on valmis, edellisen osan kaltainen toiminto vastaa tietojen lukemisesta ja graafin piirtämisestä niiden avulla, mutta Testausvaiheessa voi olla käytännöllisempää käyttää satunnaislukuja kontrolloidulla alueella tarkistaaksesi, onko kirjoitettava koodi oikea. Seuraava toiminto voi toimia esimerkkinä tietojen saamiseksi lopullista sovellusta rakennettaessa.

    Sen sijaan, että luettaisiin tiedot tietokannasta, yllä oleva esimerkki luo ne satunnaisesti ja välittää ne funktiolle, joka vastaa kaavion piirtämisestä. Keksitty data on vektori, joka muodostuu arvona millisekunteina ilmaistusta päivämäärästä, anturitiedon tallennushetkestä ja valvotusta tiedosta, joka on maksimiarvon ja minimiarvon välissä.

    Tässä esimerkissä päivämäärää luotaessa sitä voidaan viivästyttää jopa yksi sekunti (1000 millisekuntia) suhteessa päivämäärään keksinnön ajankohtana. Kuten Math.random() luo luvun välillä 0.0 - 1.0, kertomalla sen 1000:lla saadaan luku väliltä 0 - 1000, joka muunnetaan sitten kokonaisluvuksi. Samalla tavalla arvo saadaan kertomalla satunnaisluku vaihteluvälillä (maksimi miinus minimi) ja lisäämällä minimi.

    Piirrä IoT-antureiden kaavio SVG-kaaviolla

    Koska olemme nähneet, kuinka voimme saada arvot, joita haluamme esittää (esimerkissä lämpötila) ja niiden ajallisen sijainnin, jotka voidaan ilmaista yhdessä koordinaattien muodossa, alla oleva esimerkki näyttää funktion polun piirtämiseen joka yhdistää nämä pisteet ja valinnaisesti värillisen alueen, jonka rajaa tämä viiva yläreunassa. Lopputulos olisi seuraavan kuvan kaltainen.

    Esimerkki kaaviosta, joka on luotu SVG:llä ja JavaScriptillä edustamaan IoT-antureiden dataa

    Kaavion vaaka-akseli (X) edustaa aikaa ja pystyakseli (Y) arvoja, joita IoT:hen kytketyt anturit ovat seuranneet. Vaakaväli on muutama sekunti, koska tässä ehdotuksessa kaaviota päivitetään hyvin usein (esimerkiksi joka sekunti) antamaan lähes reaaliaikaista tietoa anturien tilasta.

    Edellisessä koodissa on kaksi mielenkiintoista näkökohtaa, ensinnäkin mahdollistava laskenta mukauttaa esitettyjen arvojen aluetta ja toiseksi kiinteistöjen rakentaminen d joka ilmaisee asettelun pisteiden koordinaatit (path).

    Esitettyjen arvojen alueen mukauttamiseksi niitä siirretään minimistä ja skaalataan niin, että näkyvä suuruus vastaa kaavion kokoa. Ajan tapauksessa siirtymä saadaan vähentämällä näytettävän ajanjakson pisimmästä ajasta (päivämäärä ja kellonaika lähimpänä nykyistä) (esimerkissä 20 sekuntia). Lämpötila-arvojen siirtymä on alemman alueen (yksi aste) miinus pienin arvo, joten alla näkyvät tiedot ovat eniten samankaltaisia ​​kuin pienin sallittu arvo, mutta jättävät marginaalin, jonka avulla voimme arvioida, mitä ohitetaan.

    Kerroin, joka kertoo aika-arvot graafin vaakakoordinaattien saamiseksi, saadaan jakamalla kaavion kokonaisleveys (esimerkissä 100 yksikköä) esitetyllä aikavälillä (esimerkissä 20 sekuntia). Kertoimen saamiseksi skalaarilämpötila-arvoilla on muistettava, että esitetty alue siirtyy minimiarvon alapuolella olevasta marginaalista maksimin yläpuolelle, yksi aste molemmissa tapauksissa. Tällä tavalla pystyskaalauskerroin saadaan jakamalla kaavion korkeus (esimerkissä 100 yksikköä) maksimiarvolla, josta on vähennetty minimi plus ylä- ja alamarginaali. Koska nämä arvot voivat kehittyä täysin negatiivisissa lämpötiloissa, käytämme Math.abs() käyttää erotuksen itseisarvoa.

    Omaisuus d esineen path Se muodostetaan ketjuttamalla tekstin pisteiden koordinaatit. Jokaista koordinaattiparia edeltää koodi SVG L, joka piirtää viivan nykyisestä sijainnista absoluuttiseen arvoon, jonka koordinaatit osoittavat. X- ja Y-arvot erotetaan pilkuilla ja kukin operaatio SVG erotetaan välilyönnillä seuraavasta.

    Käytä koodia aloittaaksesi asettelun M (siirry absoluuttiseen koordinaattiin). Suljetun ja täytetyn kaavion tapauksessa aloitat oikeasta alakulmasta, avoimen käyrän tapauksessa, joka piirtää tietoprofiilin, aloitat viimeisestä esitetystä arvosta (viimeisin). Suljetun asettelun viimeistelemiseksi käytetään koodia Z lisäämällä viimeiseksi pisteeksi se, jolla on sama X-koordinaattiarvo kuin suoran viimeisellä pisteellä ja Y-koordinaatiksi pienin esitetty arvo.

    Tässä esimerkissä funktio dibujar_grafico(), joka on sivun latauksen kutsu, saa alkuarvot testattavaksi (ei viimeistä reaaliaikaista arvoa) ja valmistelee alueen, jolla tiedot renderöidään: 20 sekuntia (20000 15 ms) vaakasuunnassa ja 5 °C pystysuora -10°C - +XNUMX°C yhden asteen ylä- ja alamarginaalilla. Soita kaksi puhelua numeroon actualizar_grafico(), ensimmäisellä kerralla true argumenttina, joka osoittaa, että kaavio tulee sulkea edustamaan täytettyä aluetta, ja toisessa kutsussa se menee ohi false vetää rajan. Kussakin tapauksessa kohde path modifioitu on se, jolla on vastaava ulkonäkö, jossa ensimmäisessä tapauksessa on täyttö ja ilman reunaa ja toisessa tapauksessa tietty viivan paksuus ja ilman täyttöä.

    Toiminto actualizar_grafico() työskennellä esineen parissa SVG joka käyttää seuraavaa koodia säilönä HTML. Objekti SVG sisältää kaksi polkua, joista toinen piirtää viivan ja toinen täytetyn alueen. Ladattaessa verkkosivua elementistä <body> edellinen toiminto kutsutaan automaattisesti, dibujar_grafico() kiitos tapahtumasta JavaScript onload.

    Koodin rivillä 10 HTML edellä, leveys (esimerkiksi) 820 px ja korkeus 150 px määritetään tyyliin (jota lopullisessa versiossa on suositeltavaa tehdä luokan ja asiakirjan kanssa CSS). Tuntuu oudolta, että rivit 13 ja 14 määrittelevät kohteen koon SVG kuten 100 % leveys ja korkeus (joka vastaa parhaiten ikkunan mittoja, 100 × 100). Kuten jo mainittiin, tämän tekemisen syynä on aina työskennellä tunnetuilla mitoilla ja säätää esitetyt arvot siihen. Muut vaihtoehdot olisivat laskea kaavion tila joka kerta ja säätää sitten arvot uudelleen tai pakottaa graafin kiinteät mitat, joita asiakirjan on noudatettava.

    Kun olet valinnut kaavion, jonka mitat muuttuvat koodin mukaan HTML, on tarpeen sisällyttää omaisuus vector-effect rohkeudella non-scaling-stroke estää viivojen paksuuden vääristymisen, kun kaavio ei säilytä valittuja 1:1-suhteita verkkosivulla, jolla se näytetään, kuten edellisessä ehdotuksessa.

    Käytä kaaviota "rajataksesi" ja näyttääksesi vain valitsemasi alueen viewBox. Tässä tapauksessa olemme valinneet nähdä sen kaavion osan, joka alkaa numerosta 0,0 (vasen yläkulma) ja on kooltaan 100x100 alas ja oikealle. Piirustuksen osaa, joka sijaitsee koordinaateissa, joiden arvo on negatiivinen tai suurempi kuin 100, ei näy verkkosivulla, vaikka ne olisivatkin objektissa SVG

    Lisää uusia elementtejä SVG-piirustukseen

    Edellisessä esimerkissä funktio actualizar_grafico() käytä asettelua SVG johon omistaja vaihtuu d, joka ilmaisee koordinaattiketjun. Vaihtoehtona olisi luoda koko objekti aina, kun se piirretään uudelleen. Ensimmäisen vaihtoehdon etuna on, että graafinen ulkonäkö (kuten paksuus tai väri) määritellään koodissa HTML, rajoitus on, että objektit on luotava aiemmin.

    Voit luoda SVG-objekteja käyttämällä createElementNS(), joka mahdollistaa muun muassa nimiavaruus. Alla olevassa esimerkissä luodaan uusi tekstiobjekti (text) ja se liittyy elementtiin SVG joka on jo koodissa HTML verkkosivustolta. Kun uusi elementti on luotu, sen ominaisuudet määritetään setAttribute() ja lisätään SVG kanssa appendChild().

    Muokkaa piirustuselementtien osuutta

    Jos olet yrittänyt merkitä edellisen osan esimerkin funktiolla, olet huomannut, että teksti näyttää epämuodostuneelta, kun objektin osuus web-sivulla (width y height Koodista HTML) ei ole sama kuin edustettu alue (viewBox). Osuuden mukauttamiseksi on tarpeen tietää kohteen mitat SVG josta voit tarkistaa kohteen tai säiliön tyylin HTML, jos esine SVG siirtää tämä omaisuus. Omistajuuden määrittäminen transform esineisiin SVG suhteesta riippuen muodonmuutos voidaan korjata käyttämällä skaalausoperaatiota scale() jossa X:n kerroin on erilainen kuin Y:ssä.

    SVG mahdollistaa useiden objektien ryhmittelyn muodostaen uuden komposiittielementin, joka tukee myös ominaisuuksia, kuten yksinkertaisia ​​esineitä. Jos haluat käyttää samaa muunnosa objektisarjaan kerralla kunkin objektin sijaan, voit ryhmitellä ne tämän resurssin mukaan ja käyttää yhtä ominaisuutta transform kaikille heille.

    Kuten selitettiin puhuttaessa SVG-muoto, ryhmän elementit on suljettu tarrojen sisään <g> y </g>. Lisättävä kohteesta JavaScript elementtejä ryhmään SVG käytetään, kuten edellisestä esimerkistä näkyy, appendChild() kun uusi objekti on määritetty.

    Alkuperän määrittämiseksi muunnoksia käytettäessä ominaisuutta voidaan käyttää objekteissa SVG transform-origin, jonka arvo on sen pisteen X- ja Y-koordinaatit, josta muunnos alkaa. Jos muunnoksen alkuperän arvoa ei ole nimenomaisesti ilmoitettu (verkkoselaimessa), käytetään koordinaattien keskipistettä. Valitettavasti tätä kirjoitettaessa muunnosten käyttäytymisen määrittäminen muulla kuin oletuslähteellä ei ole homogeenista eri selaimissa, ja sitä tulee käyttää varoen.

    Yhdessä mittakaavamuutoksen kanssa scale On muitakin, kuten kierto rotation ja liikkeen kanssa translate, jotka tarjoavat a vaihtoehto graafiselle esitykselle: sen sijaan, että hankit uusia koordinaatteja, voit esittää ne omassa avaruudessaan ja muuttaa kaavion sopivaksi muotoon, jossa haluat esittää ne.

    Lisää viittauksia kaavioon

    Nyt kun kaavion pääosa on ratkaistu piirtämällä arvot profiililla ja täytetyllä alueella, sitä voidaan täydentää sen lukemista helpottavien viitteiden avulla. Esimerkkinä aloitetaan piirtämällä joitain vaakasuuntaisia ​​viitteitä (viivoja), jotka merkitsevät suurimmat ja pienimmät hyväksyttävät arvot sekä halutun arvon. Kuten selitettiin, voit lisätä objektit kohteeseen SVG suoraan JavaScript tai sisällytä ne manuaalisesti koodiin HTML ja muokkaa niitä myöhemmin -sovelluksella JavaScript.

    Vaikuttaa loogiselta merkitä nämä vaakasuuntaiset viittaukset tekstillä, joka selventää niiden edustamaa arvoa. Voit korostaa tekstiä käyttämällä suorakulmioita, jotka erottuvat taustasta ja grafiikasta. Koska teksteihin on sovellettava mittakaavamuunnosta muodonmuutoksen kompensoimiseksi, ne kaikki voidaan ryhmitellä objektiksi, johon asteikkoa sovelletaan; Suurin etu tällä tavalla on se, että niitä voidaan muokata yhdellä toiminnolla, jos graafisäilön (selainikkunan) kokoa muutetaan ja asteikko korjaa suhdetta.

    Yllä olevassa esimerkkikoodissa on useita mielenkiintoisia näkökohtia. Ensinnäkin kommentoi, että vakioita (globaalimuuttujia) on käytetty, jotta esimerkki olisi helpompi lukea ohjelmoinnista tuleville käyttäjille. mikro-ohjaimet en C vuonna C + +. Kuten myöhemmin nähdään, paras tapa ohjelmoida se JavaScript Se käyttäisi näitä arvoja sisältäviä objekteja ja menetelmiä, jotka hallitsevat tämän esimerkin tai kaavion viittauksia yleensä tuotantojärjestelmässä.

    Toisaalta geneerisemmän koodin edistämiseksi on kehitetty erillisiä toimintoja, jotka laskevat eri kertoimet, jotka korjaavat graafin osuuden tekstin säätämiseksi. proporcion_grafico(), arvojen asteikko niiden vaihteluvälistä riippuen escala() ja korjauskerroin mittauksille, jotka tunnetaan absoluuttisina arvoina, kuten mittauksille viitteissä medida_grafico().

    Tämän koodin lukemisen pitäisi auttaa selventämään kontekstia, jossa tällainen sovellus toimii, joka piirtää grafiikkaa reaaliajassa ja jonka on oltava joustava esitettäväksi erilaisissa graafisissa yhteyksissä (eri kokoja ja mittasuhteita ainakin). Ensinnäkin objektit on generoitava SVG, joko "manuaalisesti" koodissa HTML, joko koodin kautta JavaScript ja joka tapauksessa viittaukset näihin objekteihin on myöhemmin hankittava niiden manipuloimiseksi JavaScript jotta voidaan piirtää uusia kaavioita ja jo piirretyn graafin esitystapaa voidaan mukauttaa sen esittämisvälineen muutokseen.

    Toinen viite, joka voi auttaa helposti tulkitsemaan kuvaajaa, ovat pisteet, jotka edustavat tiettyjä arvoja (viivan solmut). Tässä esimerkissä, jossa edustamme yhtä suuruutta, symbolin valinta ei ole kriittinen, mutta jos useita eri arvoja asetetaan päällekkäin etsimään korrelaatiota, on mielenkiintoista erottaa toisistaan ​​muiden resurssien, kuten värin, käytön lisäksi. , piirtämällä erilaisia ​​symboleja. Viivasolmussa käytettävän grafiikan kokoa ja mittasuhteita on muutettava, kuten esimerkiksi teksteissä tapahtuu niin, että sen mitat ovat absoluuttisia ja että sen mittasuhteet säilyvät, vaikka sen sisältämän laatikon mittasuhteet muuttuisivat.

    Edellisessä esimerkissä näimme jo, kuinka eri kertoimet lasketaan piirustuksen osuuden skaalaamiseksi ja korjaamiseksi; Mitä tulee graafin solmujen tai kärkien symbolien hallinnan toteuttamiseen, mahdollinen ratkaisu voi olla objektien tallentaminen SVG vektoriksi ja muokata sen sijaintia, kun kaavio päivitetään lukemalla uusi arvo tai kun se piirretään uudelleen muuttamalla säilön kokoa. Ensimmäisessä tapauksessa sen asemaa olisi muutettava ja toisessa sen suhdetta omaisuuteen transform ja arvo scale. Seuraava koodi on toiminnon muunnos actualizar_grafico() sisällyttääkseen graafin kärkipisteiden symbolien uudelleensijoituksen.

    Toimintoon tehty muutoksia actualizar_grafico() saadaksesi uuden toiminnon actualizar_grafico_puntos() Ne on korostettu edellisen esimerkin koodissa. Ensin rivillä 5 otamme objektien vektorin SVG parametrina. Tämä vektori sisältää symbolit, jotka on sijoitettava uudelleen kaavion uusiin solmuihin.

    Riveillä 39 ja 40 annetaan keskuksen uudet koordinaatit, cx y cy, niihin arvoihin, jotka ovat edustettuina. Jos symboli ei perustuisi keskelle, on luultavasti tarpeen lisätä offset sisään cx puolet leveydestä ja sisään cy puolet korkeudesta sijoittaaksesi ne uudelleen tarkalleen kuvaajan solmuun.

    Riveillä 57–61 pisteet, jotka vastaavat koordinaatteja, joita ei piirretä, koska ne on leikattu pois vasemmasta reunasta, sijoitetaan uudelleen kuvaajan ulkopuolelle. Koordinaatti cy nollaan ja siitä cx mihin tahansa negatiiviseen numeroon (suurempi kuin itse piste), jotta se ei näy, kun se leikataan, kuten kaavion vasen osa, ikkunan SVG.

    Hallitse kaaviota objektista JavaScriptin avulla

    Kaikki tähän mennessä selitetyt toiminnot voidaan integroida objektiin hallitaksesi kuvaajaa tyylillä, joka on tyypillisempi uusille versioille. JavaScript. Tällä toteutusvaihtoehdolla on se lisäetu, että se yksinkertaistaa useiden eri arvoisten kaavioiden sisällyttämistä samalle verkkosivulle.

    Ennen kuin keskustelemme toteutuksesta, käydään läpi yleisimmät tavat luoda objekteja JavaScript ja joitain toimintojen erityispiirteitä, jotka vaikuttavat ehdotukseen IoT-sensorigrafiikan piirtämiseksi.

    On jo selitetty, että uusi tapa luoda esineitä JavaScript (saatavana versiosta 5 alkaen ECMAScript) koostuu käytöstä Object.create, jota pitäisi tottua käyttämään "klassisen" sijaan new, joka tietysti toimii edelleen oikein, vaikka sen tarkoitus onkin enemmän simuloida kielten tyyliä luokkapohjaisilla objekteilla (JavaScript perustaa objektien luomisen prototyyppeihin) kuin toimiva vaihtoehto.

    Edellinen koodi antaa sinun muistaa erot objektien luomisen välillä Object.create O con new. Se myös korostaa sitä, että vaikka toiminto, jolla objekti on luotu new voi olla missä tahansa koodissa, objektin on oltava jo olemassa ennen kuin se voidaan instantoida Object.create (ES5_Object-objekti ei ole funktio).

    Riveillä 3 ja 4 oletusarvon asettaminen ominaisuuksille funktiossa, jolla objekti luodaan new, jokainen ominaisuus on määritetty vastaavan argumentin arvoon tai (||), jos argumentteja ei ole välitetty, eli jos ne ovat määrittelemättömiä (undefined), koska tämä seikka arvioidaan false, oletusarvo on määritetty.

    Konteksti, jossa toiminto suoritetaan JavaScript herättää kaksi asiaa, jotka on tärkeää pitää mielessä ja jotka voivat myös olla hämmentäviä käytettäessä tätä ohjelmointikieltä työskenneltyään muiden kanssa, kuten esim. C o C + +, meidän tapauksessamme. Konteksti sisältää funktion laajuudessa määritellyt muuttujat (ja globaalit), mikä muuten herättää mielenkiintoisen käsitteen, "sulkemiset", jotka muodostavat kokonaisen ohjelmointityylin JavaScript. Se sanoi, että se oli odotettavissa this, joka viittaa objektiin, kun sitä käytetään sen määrittelevän koodin sisällä, suorituskonteksti, jossa se on määritelty, säilyy, mutta sen käyttämä konteksti on konteksti, josta funktio kutsutaan. Tämä käyttäytyminen on useimmissa tapauksissa läpinäkyvää, mutta kahdessa tilanteessa se voi olla hämmentävää: toisen funktion sisällä määritetty funktio ja objektin tapahtumasta kutsuttu menetelmä. window.

    Edellistä koodia suoritettaessa lopussa oleva kommentoitu teksti näkyy konsolissa. Kaksi merkittyä riviä kuvastavat käyttäytymistä, joka voi olla hämmentävää: funktion suorituskontekstia probar_dentro() ei probar(), kuten saattaa odottaa, mutta window, joka näyttää yleiset muuttujat, ei samannimisen ominaisuuksia. Jos et halua tällaista toimintaa, luo vain muuttuja korkeimman tason funktioon ja määritä se this, kuten seuraavassa koodissa.

    Ohjataksesi suorituskontekstia, kun menetelmää kutsutaan tapahtumasta window, esimerkiksi muuttamalla selainikkunan kokoa, toinen erikoisuus JavaScript: mahdollisuus ohjelmoida "funktiotehtaita", eli toimintoja, jotka luovat muita toimintoja ja palauttavat ne return.

    Yllä olevassa esimerkkikoodissa menetelmä llamar() kohteista Contexto Se ei tee työtä, mutta palauttaa anonyymin toiminnon, joka huolehtii siitä. Varmistaaksesi, että kaikki toimii odotetulla tavalla, on olemassa globaali muuttuja, jolla on sama nimi kuin funktion konsolissa näyttämällä ominaisuudella. Jos konteksti on oikea, ominaisuuden arvo näytetään, ei globaalin muuttujan arvo.

    JavaScript Yritä korjata puolipisteet, jotka jätetään pois lauseiden lopusta. Tämä mahdollistaa rennon kirjoitustyylin, mutta on kaksiteräinen miekka, jota on käsiteltävä huolellisesti. Useimmissa tapauksissa voit käyttää sulkeita tai edeltää tapaa, jolla tämä aiheuttaa useille riveille JavaScript tulkitsee koodin; Siksi esimerkin rivi 8 sisältää function takana return, jos olisin käyttänyt toista riviä, merkitys olisi hyvin erilainen. Mielestäni luettavin ratkaisu on käyttää välimuuttujaa (välttämätöntä) kuten seuraavassa versiossa; Ilmeisesti, kun käyttäytyminen on ymmärretty, päätös vastaa ohjelmoijaa.

    Samassa mielessä lausekkeen arvioiminen funktiona, eli funktion palauttaminen eikä funktion palauttaman arvon palauttaminen; viimeisen esimerkin rivillä 21 (se oli edellisen rivillä 19) se pysähtyy clearInterval kanssa kutsuttu funktio setInterval. Jotta se toimisi 30 sekuntia, pysäytystä lykätään setTimeout, joka puolestaan ​​tarvitsee funktion ensimmäisenä argumenttina; toimittamaan suorituksen parametrina clearInterval muuttujan kanssa, joka sisältää jaksollisen kutsun (eikä funktiota clearInterval) on se, mitä varten viimeisellä rivillä oleva anonyymi funktio luodaan.

    Valinta kirjoitetaanko koodi integroimalla funktiomäärittelyn, kompaktimman (kuten rivillä 21) tai käyttämällä apumuuttujaa, mielestäni luettavampaa (kuten riveillä 19 ja 20), suorituskyky vaihtelee vähän ja riippuu enemmän tyylistä ja luettavuudesta huolto.

    Testaaksesi koodia, ennen kuin sinulla on tietoja palvelimella, voit käyttää satunnaisten arvojen generaattoria halutulla alueella tai valmistaa taulukoita kontrolloiduilla arvoilla, jotka simuloivat toimintaa halutuissa olosuhteissa. Seuraava esimerkki käyttää yksinkertaista datageneraattoria koko alueella, minkä vuoksi ne näyttävät hieman liioitelluilta.

    Voit testata lataa esimerkin koko koodi sisäänkirjoitetun web-sivun muodostama HTML, tyyli CSS ja koodi JavaScript. Jälkimmäinen on olennaisin, koska muut komponentit ovat vain minimaalista tukea, hyvin yksinkertaistettuja ja niitä on paljon enemmän kehitetty vastaavien osioiden artikkeleissa.

    Post Comment

    Olet ehkä missannut