Autor Zpráva
Nadan
Profil
Můj problém je zde: Mamlas.
Snažím se o zobrazení "nápovědy" při najetí na otazník.
To se dá řešit buď pomocí JS, které mi při najetí na otazník zobrazí div u kurzoru, anebo pomocí CSS, který mi při najetí na otazník změní styl divu s nápovědou a zobrazí jej.
U JS mám problém, že bych musel pro každý otazník na jedné stránce psát jeden unikátní styl (protože JS pracuje s ID).
U CSS mám problém, že se mi div s nápovědou nezobrazí u kurzoru, ale odpluje někam pryč.
Mám tři otázky:
1. Dá se nějak upravit ten JS, aby pracoval s classem?
2. Jak mám do CSS napsat, aby se ten div zobrazoval u kurzoru?
3. Dá se to vyřešit ještě nějak jinak?


Stačí mi odpověď jen na jednu otázku :-) Předem díky za odpověd.
Sir Tom
Profil
Nadan:
U JS mám problém, že bych musel pro každý otazník na jedné stránce psát jeden unikátní styl (protože JS pracuje s ID).
Udělej funkci, která se bude volat při najetí na otazník. U této fce přidej několik parametrů. Stačí ti jedna funkce, ale její vlastnosti budeš měnit parametry.
Nevím, jak máš to JS vyřešený, tak uvedu jenom letmý příklad:

<div onmouseover="showHelp('napoveda1',poziceX1,poziceY1)">otazník</div>
<div onmouseover="showHelp('napoveda2',poziceX2,poziceY2)">otazník</div>

function showHelp(help,posX,posY){
// kód, který se provede
}
Nadan
Profil
Sir Tom:
Nechápu...
Sir Tom
Profil
Nadan:
Díval jsem se na ten JS kód. Máš tam funkci, která zobrazí div s id 'help' (na který se odkazuješ přes parametr ve funkci ShowContent()). Co je na tomto systemu spatne? Nebo - je ta nápověda pouze ve formě textu? Pokud je ano, tak dej ji dej do paramatru a pak zobrazuj stale stejny div, ale prave podle tohoto parametru měň jeho obsah.

Prostě - jednotlivé nápovědy musí být někde uloženy. Buď v divech nebo jako text v parametru. Stačí jenom udělat 1 funkci, která dle svého parametru zavolá tu spravnou nápovědu.
Nadan
Profil
Sir Tom:
I tak ale budu potřebovat u divů ID, aby JS věděl, ke kterému má přiřazovat obsah, ne?
Sir Tom
Profil
Nadan:
Pokud obsah nápovědy obsahuje něco více nežli jen text, pak ano.

Pokud máš nápovědu pouze ve formě textu, tak stačí jeden div, kterému se bude měnit obsah:

<div id="napoveda"></div>

Spartakus <span onmouseover="zobrazitNapovedu('Spartakus byl římský otrok, který povstal...')" onmouseout="skrytNapovedu()">?</span>
Legionář <span onmouseover="zobrazitNapovedu('Římský voják dobře oděn v silnou zbroj...')" onmouseout="skrytNapovedu()">?</span>
Hipodrom <span onmouseover="zobrazitNapovedu('Budova, ve které se konaly závody...')" onmouseout="skrytNapovedu()">?</span>

function zobrazitNapovedu(napovedaText){
 document.getElementById("napoveda").innerHTML(napovedaText); //vlozi do divu napoveda obsah, ktery je napsan v parametru
 //a tady bude kód, který zobrazí onen div "napoveda" (zobrazeni na zvolenych souradnicich muzes take resit pres JS (zjistis pozici kurzoru a kousek vedle toho nechas zobrazit div))
}
function skryjNapovedu(){
 //skryje div "napoveda"
}


Za úvahu by také stále popřemýšlet zda-li se nápověda musí zobrazovat v nějakém divu - nestačilo by klasické title=""?

Tento způsob určitě není jediný a troufám si říct, že nebude jistě ani nejlepší. Doufám, ale že svůj úkol splní...
Nadan
Profil
Sir Tom:
Díky, Javascriptu sice moc nerozumím, ale zkusím to skloubit dohromady...
Title bych rád použil, ale je nevhodný na výraznější a delší text...
joe
Profil
Nadan:
3. Dá se to vyřešit ještě nějak jinak?
Ano a lépe, pouze pomocí CSS.

Není vhodné dávat text jako parametr funkce ([#6]), ale je lepší ho mít už v nějakém divu v HTML, jak máš teď.

V CSS můžeš využít pseudotřídy :hover, při které div zobrazíš. Nepotřebuješ tedy měnit třídu pomocí JavaScriptu.
Nadan
Profil
joe:
Já vím, ale ten div se mi nezobrazí u kurzoru, potřeboval bych ho nějak správně napozicovat. A to nevím jak to CSSkem dokážu...
joe
Profil
Zapomněl jsem to tam připsat.

Tomu odkazu nastav position: relative; a tomu divu, co chceš zobrazovat, tak absolutní pozici - position: absolute (to už tam asi je, jak jsem se díval) a pak left: 100%; a mělo by se to zobrazovat napravo od toho otazníku.

Mj. ten otazník je součástí textu? Myslím, že ne. Proč je tedy v textu? Ten bych tam dal pomocí CSS.
Nadan
Profil
joe:
Jo, je to součást textu...
"Blablabla blablablabla blabla blablablablablabla blabla [?]"

Ne, nejde to. Ukázka - ten otazník dole.
joe
Profil
Nadan:
Jo, je to součást textu...
To vimdím, že na tvé stránce ano, ale normálně to s tím asi nemá nic moc společného.

Ne, nejde to
Nemáš nastavenou relativní pozici u toho odkazu
Nadan
Profil
joe:
To vimdím, že na tvé stránce ano, ale normálně to s tím asi nemá nic moc společného.
Má.

Nemáš nastavenou relativní pozici u toho odkazu
Mám.
.info {
	text-decoration: none;
	color: #FF9900;
	margin-left: 250px;
	position: relative;
}
Medvídek
Profil
Já to mam řešený takto: (s využitím jQuery)

$(document).ready(function() {
 //NACTENI HINTU
 tooltip();
 });
 
this.tooltip = function(){
		xOffset = 15;
		yOffset = 25;
  //PRI NAJETI NA ODKAZ S TRIDOU HELP ZOBRAZIME OKNO
	$("a.help").hover(function(e){
	  //DO OKNA NACTEME TITULEK ODKAZU A SMAZEME HO Z ODKAZU
		this.t = this.title;
		this.title = "";
		$("body").append("<div id='help'><p>"+ this.t +"</p></div>");
		$("#help")
			.css("top",(e.pageY - xOffset) + "px")
			.css("left",(e.pageX + yOffset) + "px")
    },
	function(){
		this.title = this.t;
		$("#help").remove();
    });

  //PRI POHYBU MYSI POSOUVAME OKNO
	$("a.help").mousemove(function(e){
		$("#help")
			.css("top",(e.pageY - xOffset) + "px")
			.css("left",(e.pageX + yOffset) + "px");
	});
}


a v html takto:
<a class="help" title="Rodné číslo AZORA je registrační kód ve formátu XXX-XXXX-XXX, který naleznete na krabičce AZORA"><img src="img/help.png" alt="?" class="help" /></a>
joe
Profil
Nadan:
Myslel jsem k tomu druhému. Takhle to sice máš u toho prvního otazníku, ale tím, že se mění ta pozice toho divu, proto se to objevuje mimo.
Nadan
Profil
joe:
Však to je i u toho druhého odkazu! Je to tam přes class "info"...
joe
Profil
Nadan:
Je tam, ale jen dočasně. Nejdříve si nastuduj, co ten tvůj kód dělá a pak možná budeš vědět, proč se to nechová tak, jak má.

<a onmouseout="this.className='skryj'" onmouseover="this.className='ukaz'" class="info"></a>


To první zvýrazněné vůbec není potřeba.
Nadan
Profil
joe:
Jo, promiň. Přece jen už je půlnoc.
Teď se ale ten div nějak smrsknul...
Sir Tom
Profil
joe:
V CSS můžeš využít pseudotřídy :hover, při které div zobrazíš.
Toto kdysi IE neumělo (jakože umělo, ale dokázalo to pouze u stylu textu). Nevím, jestli novější IE prohlížeče to zvládnou. :)

"Není vhodné dávat text jako parametr funkce."
Samozřejmě, souhlasím - proto také jsem se ptal na obsah těch nápověd. Pochopitelně, že ten obsah nemusí být jako parametr, ale může být uložen někde jinde (pole?) a parametr by byl jenom index určující nápovědu. (Myslel jsem, že je to jasné...)

Medvídek:
Medvídku, ty to máš řešené přes jQuery, že ano? Možná by bylo vhodné dát i odkaz, kde se dá jQuery získat a jak použít. :)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0