Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Image mapin leveydeksi 100%

Sivun loppuun

Paulus M [23.06.2011 19:05:02]

#

Osaisko joku sanoa, että miten saan kuvalle liitetyn image mapin leveyden mukautumaan kuvan leveyteen? Eli vähän niin kuin imagemapin lukittua kuvassa oleviin pikseleihin.

<body>
<img src="plaapla" style="width: 100%" usemap="mappi" />
</body>

Eli niin kuin arvata saattaa, niin kuvan koko muuttuu selainta suurennettaessa. Kuitenkaan mapin koko ei muutu, vaan asetetut koordinaatit pysyvät vakiona ja siten linkit menee minne sattuu.

Mielenkiitoinen ilmiö on kuitenkin se, että mapin suhteet pysyy oikeina, jos zoomaa.

Mikä olisi paras ratkaisu, pitääkö tehdä css mappi?

Yucca [23.06.2011 19:54:55]

#

Paulus M kirjoitti:

Osaisko joku sanoa, että miten saan kuvalle liitetyn image mapin leveyden mukautumaan kuvan leveyteen?

Et kai noin suunnilleen mitenkään. öImage mapö eli suomeksi karttalinkki on rakenne, jossa kuvan _pikseleihin_ liitetään toiminnallisuus. (Joku hardcore-ohjelmoija tietysti jo rupesi kehittelemään ajatusta siitä, miten luetaan elementin dimensiot ja sitten sorkitaan area-elementtejä eli harrastetaan köyhän miehen vektorigrafiikkaa purukumilla ja nastoilla...)

> Eli vähän niin kuin imagemapin lukittua kuvassa oleviin pikseleihin.

Niihin se juuri on lukittunut, ja se on ilmeisesti ongelmasi. Haluaisit ilmeisesti lukita kuvan _kohtiin_.

lainaus:

Mikä olisi paras ratkaisu, pitääkö tehdä css mappi?

Mikähän on öcss mappiö? CSS:llä voi kyllä tehdä kivoja asioita kuten asemoida kuvan kohtien päälle tekstejä, jolloin samaa kuvaa voidaan käyttää erikielisissä versioissa. Mutta ei CSS:llä voi eikä ole tarkoitus voida muuttaa _toiminnallisuutta_.

Mikähän on alkuperäinen ongelma? Se voi hyvin olla ratkaistavissa, vaikka oletettu ratkaisutapa johtaakin umpikujaan.

Paulus M [23.06.2011 20:03:05]

#

Siis ongelma on se, että mulla on kuva, jonka leveys on täysin sama kuin selaimen leveys. Näin ollen kuvan koko muuttuu, kun selaimen kokoa muutetaan. Kuvassa on linkkejä. Nämä linkit eivät toimi tai osuvat väärään kohtaan, kun selaimen kokoa muutetaan.
Sovitaan, että kuvan koko on 1000 ja selaimen koko on 1000. Sovitaan myös, että linkki on kohdassa x = 500. Kun selainta pienennetään esim. 400 pikseliin, niin kuvakin muuttuu leveydeltään 400 pikseliin. Kuitenkin kuva linkki eli siis mappi on edelleen 500 pikselissä, vaikka sen tulisi olla 200.

qeijo [23.06.2011 20:26:13]

#

Kyllähän ongelma on nyt toteutuksessa, ei saa tehdä itselleen tuollaisia ongelmia.. Silloin on suunnittelussa puutteita tai puuttuu kokonaan.

Tee vaikka kuvasta kehyksen levyinen (esim. 800-900px), ja annat sen olla jatkuvasti yhtä leveä, riippumatta selaimesta.

Yucca [23.06.2011 20:34:53]

#

Paulus M kirjoitti:

Siis ongelma on se, että mulla on kuva, jonka leveys on täysin sama kuin selaimen leveys.

Ei, vaan kuva on kiinteänkokoinen, ja haluat selaimen skaalaavan sen ikkunan leveyteen. Sen selain tekeekin, mutta sillä on seurauksensa.

lainaus:

Kuvassa on linkkejä.

Ei, vaan haluat tehdä kuvan kohdista tai alueista aktiivisia. Itse kuvassa ei ole linkkejä.

Ja aktiivisten alueiden tekohan onnistuu, mutta ne ovat suhteessa kuvan pikseleihin, eivät joihinkin paikkoihin, joihin skaalaus vie kuvan kohtia.

Miksi haluat luoda tämän ongelman? Siis mikä on oikeasti se oletettu käyttäjän ongelma, jonka oletat ratkaisevasi skaalautuvalla bittikarttakuvalla, joka on samalla karttalinkki (siis maalaamalla itsesi nurkkaan)?

qeijo [23.06.2011 21:09:57]

#

<script type="text/javascript">

$(window).bind("load resize", function(){

       var leveys = $("#kuva").width();
        //Arvo tassa jokaiselle mapille uudet coordit leveyden perusteella.. ;)
        $("#mappi1").attr("coords", "200,200,400,400");
});

</script>
<img id="kuva" src="http://www.jmorganmarketing.com/wp-content/uploads/2010/11/image4.jpg" width="100%" usemap="#mappi" />
<map name="mappi">
<area id="mappi1" shape="rect" coords="100,100,300,300" href="hevonkuuseen.html" />
</map>

Yucca [23.06.2011 23:00:41]

#

qeijo kirjoitti:

//Arvo tassa jokaiselle mapille uudet coordit leveyden perusteella.. ;)

Niin, ongelmahan on siinä, mistä ne revitään. Miten ajattelit hoitaa polygonin?

Ja tärkeämpi kysymys on, miksi tällainen ongelma pitää luoda.

qeijo [24.06.2011 08:45:14]

#

(kuvannykyleveys / kuvanvakioleveys) * alkuperainenxcoordi = coordinuusixpiste

(800/1200) * 240
0,66 * 240
x = 160

(700/1100) * 220
0,63 * 220
x = 140

(600/1000) * 200
0,6 * 200
x = 120

1000 => 500
250 => 125

Eikö se mene prosentuaalisesti 1:1..

Yucca [25.06.2011 10:08:37]

#

qeijo kirjoitti:

(kuvannykyleveys / kuvanvakioleveys) * alkuperainenxcoordi = coordinuusixpiste

Tuo jakolaskuhan ei yleensä mene tasan. Muunnetut koordinaatit eivät siis yleensä ole kokonaislukuja, vaan ne pitää pyöristää. Muunnos ei voi olla tarkka, kuten ei kuvan skaalauskaan, paitsi erikoistapauksissa.

Tuossa olisi askarreltavaa, jotta _kaikki_ koordinaatit saadaan muunnettua dynaamisesti (ja aina kun selaimen leveyttä muutetaan). Voisi kai sen askarrella, jos olisi jokin syy, miksi karttalinkistä pitää tehdä sellainen, että se skaalautuu.

Metabolix [26.06.2011 19:13:15]

#

Teinpä tuollaisen skaalauksen JS:llä kerran. Ota leveysmääre pois. Sivun latautuessa kerää JS:llä kuvan mitat ja kuvakartan alueiden alkutiedot muistiin, laita kuvalle leveysmääre. Kutsu korjausfunktiota ja liitä se myös ikkunan resize-tapahtumaan. Korjausfunktiossa laske jokaiselle kuvakartan alueelle uudet tiedot muistissa olevista nykyisen koon mukaan skaalattuna.

Yucca kirjoitti:

Miten ajattelit hoitaa polygonin?

Hyvänen aika, tämähän on ohjelmointifoorumi. Ei varmaan ole liikaa vaadittu, että katkaisee listan splitillä ja käy koordinaatit läpi for-silmukalla.

Paulus M [27.06.2011 19:06:00]

#

Kiitos vastauksista, ajattelin vaan, että jos olisi ollut joku oikotie onneen, toi qeijon ratkaisu on riittävä ainakin minun tilanteeseeni, ei imagemappi tässä tapauksessa ole pikselin tarkka. Tein sellaista projektia, jossa koko väliaikainen nettisivu koostuu kahdesta kuvasta sen takia, että työmäärä olisi minimaalinen. Kiitos kuitenkin kaikkille muillekkin sivistyksestä.

Yucca [27.06.2011 21:43:12]

#

Paulus M kirjoitti:

Tein sellaista projektia, jossa koko väliaikainen nettisivu koostuu kahdesta kuvasta sen takia, että työmäärä olisi minimaalinen.

Vaikka epäilinkin, että kyse on hommasta, jossa ei edes ole mitään järkeä käyttää karttalinkkiä saati skaalailla sitä, tuo sentään yllätti.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta