Autor | Zpráva | ||
---|---|---|---|
moom Profil |
#1 · Zasláno: 23. 6. 2011, 19:06:07
Dobrý den, mám prosím dotaz, Třeba se najde někdo šikovný, kdo bude
znát řešení. Mám na této stránce formulář na který se dostanu po odkliknutí v menu na "Kontakt". Potřeboval bych, aby se kurzor po odkliknutí přemístil do prvního pole formuláře. Vytvořil jsem si podle návodu na webu javascript: <script type="text/javascript"> function getfocus() { document.getElementById('myAnchor').focus(); } </script> V menu mám akci: <ul> <li>O firmě</li> <li>Produkty</li> <li><a href="#kontakt" onclick="getfocus()" >Kontakt</a></li> </ul> a na prvním poli formuláře mám toto: <input name="name" id="myAnchor" > Bohužel mně to nějak blokuje JS, který používám pro animaci na posouvání po stránce. Napsal mně ho jednou jeden kluk. Pokud ho vypnu, tak to funguje jak má. Nemáte prosím nějakou radu, jak to vyřešit???? Ukázka formuláře je zde. |
||
Chamurappi Profil |
#2 · Zasláno: 23. 6. 2011, 19:25:13
Reaguji na mooma:
Je to způsobeno tím, že skript toho jednoho kluka přepíše onclick y na odkazech vedoucích na kotvu. I kdyby použil nekolizní práci s událostmi, tak vykonání obou akcí naráz (čehož by mimochodem nejspíš šlo dosáhnout i <label> em, bez JS) patrně není tím, co potřebuješ, jelikož samo nastavení fokusu také odroluje stránku.
Potřebuješ zavolat tu funkci v době, kdy je dorolováno, tzn. dostrkat ji nějak do Kotvy.moveTo (ale tak, aby to neovlivnilo jiné kotvící odkazy).
|
||
moom Profil |
#3 · Zasláno: 23. 6. 2011, 20:41:07
Super, děkuji za popostrčení. Pokusím se to nějak vygooglovat,
ale bohužel mně už ten člověk co napsal kotvy.js neodpovídá na emaily. Možná mám na něj po tak dlouhé době špatný email. Nemohu vás poprosit, že by jste to třeba napsal a já vám pošlu obratem na účet třeba nějakou almužnu na pivko :) Já umím jenom CSS a HTML a JS je pro mě Španělská vesnice. Prosím, prosím, prosím :) |
||
__construct Profil |
#4 · Zasláno: 24. 6. 2011, 08:51:43 · Upravil/a: __construct
moom:
Najjednoduchšia je takáto úprava metódy click :
click: function() { if(!this.destination) return true; var d = this.destination; Kotvy.intervalId = setInterval(function() { Kotvy.moveTo(d); }, Kotvy.interval) Kotvy.moveTo(d); d.id == 'kontakt' && getfocus(); return false; }, input až po odscrollovaní, tak uprav metódu moveTo :
if(spo[0] == spn[0] && spo[1] == spn[1]) { clearInterval(Kotvy.intervalId); location.hash = destination.id; destination.id == 'kontakt' && getfocus(); } Kotvy ju aj tak prepíše.
Máš to grátis :-) |
||
moom Profil |
#5 · Zasláno: 24. 6. 2011, 09:49:46
Paráda, děkuji, děkuji, děkuji :)
A musím nechat akci: <script type="text/javascript"> function getfocus() { document.getElementById('myAnchor').focus(); } </script> |
||
__construct Profil |
#6 · Zasláno: 24. 6. 2011, 10:09:40 · Upravil/a: __construct
moom:
Je to zbytočne definovaná funkcia, ktorú nikde inde nevoláš, takže ju kľudne môžeš zrušiť a namiesto nej upraviť ten kód čo som Ti písal na: … == 'kontakt' && document.getElementById('myAnchor').focus(); |
||
moom Profil |
#7 · Zasláno: 24. 6. 2011, 10:13:04
Tak jsem to vyzkoušel a dělá mně to jednu chybku. Najednou se
neposouvá stránka po celé ploše, ale přesune se to dolů a pak se doanimuje jenom kousek. Nová ukázka zde. Tušíte prosím kde je chybka. Jenom jsem přidal první část kódu. škoda, že si stihnu přečíst odpověď až za deset dni :( |
||
moom Profil |
#8 · Zasláno: 24. 6. 2011, 10:14:46
vyzkouším to na letišti. Děkuji za pomoc.
Musím běžet a ještě jednou děkuji. Vážím si toho. Huahůůůů :) |
||
__construct Profil |
#9 · Zasláno: 24. 6. 2011, 10:20:24 · Upravil/a: __construct
moom:
Tak nakoniec to budeš musieť dať do do metódy moveTo (neprečítal som si Chamurappiho príspevok) – v tom prípade sa focus urobí až po skončení animácie.
Edit: Ešte som pozeral prečo sa Ti to neodscrolluje až na tú čiaru nad formulárom – je to preto, že tam máš 2× element s id="kontakt" , takže sa to odscrolluje k tomu vrchnému. Premenuj ho a bude to OK.
|
||
moom Profil |
#10 · Zasláno: 24. 6. 2011, 11:47:14
Paráda, děkuji za pomoc. Na letišti nejde FTP, tak posílám co jsem přidal:
var Kotvy = { interval: 30, multiplier: 6, init: function() { var a = document.getElementsByTagName("a"); var url = location.href.substring(0, location.href.length - location.hash.length); for(var i = 0, l = a.length; i < l; i++) { if(a[i].href.substr(0, url.length) == url && a[i].href.indexOf("#") > -1) { a[i].destination = document.getElementById(a[i].hash.substr(1)); a[i].onclick = Kotvy.click; } } }, click: function() { if(!this.destination) return true; var d = this.destination; Kotvy.intervalId = setInterval(function() { Kotvy.moveTo(d); }, Kotvy.interval) Kotvy.moveTo(d); d.id == 'kontakt' && document.getElementById('myAnchor').focus(); return false; }, moveTo: function(destination) { var x = 0, y = -1; var o = destination; while(o) { x += o.offsetLeft; y += o.offsetTop; o = o.offsetParent; } var spo = Kotvy.scrollPosition(); var dx = (x - spo[0]) / Kotvy.multiplier, dy = (y - spo[1]) / Kotvy.multiplier; if(dx > 0) dx = Math.ceil(dx); else dx = Math.floor(dx); if(dy > 0) dy = Math.ceil(dy); else dy = Math.floor(dy); scrollBy(dx, dy); var spn = Kotvy.scrollPosition(); if(spo[0] == spn[0] && spo[1] == spn[1]) { clearInterval(Kotvy.intervalId); location.hash = destination.id; destination.id == 'kontakt' && document.getElementById('myAnchor').focus(); } }, scrollPosition: function() { return [document.body.scrollLeft || document.documentElement.scrollLeft || window.pageXOffset || 0, document.body.scrollTop || document.documentElement.scrollTop || window.pageYOffset || 0]; } }; Zrušil jsem ten script v html a jednu duplikovanou kotvu. Funguje to dobře, ale stejně to přeskočí kus stránky a doanimuje se až poslední kus. V html mám toto:
|
||
__construct Profil |
#11 · Zasláno: 24. 6. 2011, 11:54:38
moom:
Písal som, že to musí byť v metóde moveTo – takže z metódy click to odstráň (vymaž riadok č.29)
|
||
Časová prodleva: 13 dní
|
|||
moom Profil |
#12 · Zasláno: 7. 7. 2011, 12:57:52
Paráda, děkuji, děkuji, děkuji :) Skáču radostí jako blecha.
Mohl jsem to vyzkoušet až dnes a krásně to funguje. Jsi kapacita. Dlužím pivko i s utopencem :) Ještě jednou díky za pomoc. |
||
Časová prodleva: 13 let
|
0