Autor Zpráva
lopikol
Profil
Jak udělat posouvání webu?

JDe mi o něco podobného jako je na http://www.php-info.cz/

Jen chci to přřejéždění do směrem do leva a chtěl byhch, aby bylo vidět jen to co je v daném hashtagu

Pokud v url mám #about, tak toto vidět bude:

<div id='about'>Toto je o .....</div>


Tot však vidět nebude, dokud se nezmění hashtag v url na #auto

<div id='auto'>Moje auto ted nevidíš</div>
Witiko
Profil
lopikol:
Hash bych využíval pouze jako fallback při nepodpoře HTML5 History managementu. Stránky bych udělal přístupné přes normální fyzickou adresu (což má výhodu i v tom, že je bude google schopný crowlovat) a při klikání na odkazy bych tuto adresu pomocí HTML5 History API měnil, v případě nepodpory měnil hash. Tuto problematiku řeší knihovna History.js.

Tzn. co je a není skryté při načtení stránky bude generovat serverová část skriptu. Následně při povoleném javascriptu bude starý obsah skrývat a nový načítat javascript přes ajax a měnit adresu v příkazovém řádku, v případě nepodpory ajaxu / javascriptu pak dojde k úplnému načtení přes fyzickou adresu na odkazu.

OT: Nejspíš jde o shodu jmen, ale nejsi zabanovaný uživatel lopik?
lopikol
Profil
Witiko:
Tohle už vyřešené mám, ted mi jde o ten efekt toho přejíždění.

Když použiju ten history.js, tak mi pak nefunguje twitter plugin > nenačte se text! :/
http://remysharp.com/2007/05/18/add-twitter-to-your-blog-step-by-step/

OT: Shoda. Já tu jsem už od 22.8.2009 22:10:28
Witiko
Profil
lopikol:
Zobrazíš pomocí style.display nový div, nastavíš si pomocí metody setInterval určitý interval ve kterém budeš měnit style.position.left daných dvou elementů. Po dokončení posuvu odjeduvší div opět pomocí style.display skryješ. Javascriptové knihovny jako MooTools, jQuery, Legio :-) apod. nejspíš budou nabízet nějaké jednodušší řešení.
lopikol
Profil
Witiko: Nikdy jsem to nedělal, takže tvůj popis mi nepomůže.

Tak ten history.js je nepoužitelnej :/
Červené okno = zpráva ztwitteru. Na indexu se načte. Pak jsem to dal pod #3 a tam už se nenačte. MUsíte zmáčknout F5, takže je to nepoužitelné.
http://pok.4fan.cz/

Nápad jak to opravit nebude co?
lopikol
Profil
Nějaký nápad jako pořešit ten twitter??

Případně nějaké to jednoduché posouvání, nejlépe v příkladu.

Moc děkuji.
joe
Profil
Ukázka toho, o čem píše Witiko je tady:

http://html5demos.com/history

Mně to přijde dost zbytečné, kromě toho, že ne každý prohlížeč to podporuje, tak i nepoužitelné (aspoň ta ukázka) - při zkopírování URL adresy po kliknutí na odkaz se zobrazí, že soubor nebyl nalezen.

lopikol:
Jde to udělat celkem jednoduše, před </body> si dáš kontrolu toho, co je v hashstring a podle toho zobrazíš "aktuální stránku", pokud tam nic nebude, zobrazíš první. Zobrazením myslím skrytí/zobrazení jednotlivých bloků pomocí CSS.

Witiko:
což má výhodu i v tom, že je bude google schopný crowlovat
Nevím co myslíš tím výrazem "crowlovat", ale pokud je vše na jedné stránce, problém asi taky nebude.
U toho příkladu jak jsem poslal, bys musel zfunkčnit všechny ty adresy a to přijde jako práce navíc a celkem zbytečná, když pomocí změny hashstring to bude fungovat všude.
lopikol
Profil
Ta ukázka funguje, narozdíl od toho co si sem dal ty, úplně v pohodě ;)
Ale u tohohle způsobu nefunguje ten twiiter plugin.
_es
Profil
joe:
při zkopírování URL adresy po kliknutí na odkaz se zobrazí, že soubor nebyl nalezen.
Alebo aj pri požiadavke na obnovenie stránky po kliknutí na odkaz.
joe
Profil
lopikol:
Ta ukázka funguje, narozdíl od toho co si sem dal ty, úplně v pohodě ;)
Kdo? Já? Já jsem sem nic nedal, jenom ti poradil jak to udělat podle mě lepším způsobem.

Tím, že zprovozníš ty adresy navíc uděláš duplicitní obsah, tedy pokud bys nechal na té úvodní stránce veškeré informace. Pokud bys je tahal AJAXem, tak mi to zase přijde zbytečná práce navíc...

Jinak řečeno - nevím proč dělat jednoduché věci složitě přes něco, co ještě není podporované všude.

_es:
Taky tak... a nebo pokud na to člověk klikne kolečkem :-)
lopikol
Profil
To vše už mám vyřešené a funkční. Já bych rád ted to přejíždění.
Witiko
Profil
joe, es:
při zkopírování URL adresy po kliknutí na odkaz se zobrazí, že soubor nebyl nalezen.“, „Alebo aj pri požiadavke na obnovenie stránky po kliknutí na odkaz
Zabránění tomu také nebyl záměr, viz. patička stránky s ukázkou - „Note: since these urls aren't real, refreshing the page will land on an invalid url.

joe:
ale pokud je vše na jedné stránce, problém asi taky nebude
Takže víš, co jsem tím myslel, jen si chceš rýpnout do překlepu.

Mně to přijde dost zbytečné, kromě toho, že ne každý prohlížeč to podporuje“ a „pomocí změny hashstring to bude fungovat všude.
Nepřijde ti, že tohle si protiřečí? History.js v případě nepodpory HTML5 history API využije hash jako takový. History.js řešení stejně tak bude fungovat i v případě vypnutého javascriptu, jelikož return false; na odkazu se nespustí a nová stránka se načte celá místo využití ajaxu. Takže co do "podpory", jak říkáš, a robustnosti je to vlastně přesně naopak.

Samozřejmě při nacpání všeho do jedné stránky není využití ajaxu třeba, ačkoliv se jedná o vhodné řešení spíše pro obsahově nevelké stránky. Stejně tak design založený čistě na javascriptu nepustí nikoho bez podpory javascriptu / nikoho, komu interpret vyhodí chybu, k datům, což je spolu s hashovými adresami prakticky plivnutí do tváře snahám hnutí REST. Ajax a hash / HTML5 History API ano, nicméně jen jako cukřík navrch na javascriptu nezávislé a průchozí struktuře.
joe
Profil
Witiko:
Ok, té poznámky tam jsem si nevšiml.

Takže víš, co jsem tím myslel, jen si chceš rýpnout do překlepu.
Nevím, pravděpodobně jsi myslel indexaci (?), jen jsem nikde neviděl výraz "crowlovat" (ať už s překlepem nebo bez, pokud tam nějaký je). Rýpnout jsem si určitě nechtěl ;-)

Mám rád jednoduché řešení a mysím, že jsem ti to už psal :-) právě z toho důvodu mi přijde zbytečné tahat při načítání nějakou další knihovnu - history.js, která není ani moc potřeba.

Nepřijde ti, že tohle si protiřečí?
Nepřijde. Proč bych měl někde používat to HTML5 history API, když pro jiné prohlížeče na to musím jít stejně jiným způsobem? Proč bych měl zbytečně zavádět dvě varianty (i když by je řešila ta knihovna), když ta jedna je dostačující a funkční?

Pokud chci mít vše na jedné stránce v případě neaktivního JavaScriptu, je zbytečné to dávat do jednotlivých stránek. S podporou JavaScriptu akorát schovám některé bloky, ten co chci, tak zobrazím. Není na tom žádná věda, kvůli které bych potřeboval přidávat další knihovnu, a to ani v případě, že bych AJAX využíval.


Přijdeš mi jako Java programátor webových stránek. Tam totiž taky když děláš jednoduchou věc, potřebuješ na to plno knihoven a tak ti jednoduchý web, který prakticky neumí nic jiného než jen zapisovat a vypisovat z databáze zabere třeba 100 MB :)

lopikol:
To, jak udělat animaci máš napsané už ve čtvrtém příspěvku. [#4] Witiko, snad není trochu problém zapřemýšlet, najít si funkci setInterval, pokud ji neznáš a měnit hodnoty pomocí JavaScriptu nějakému elementu.
Witiko
Profil
joe:
indexaci
Ano, mluvil jsem o Google a jiných crawlerech.

když ta jedna je dostačující a funkční?
Hash není dostačující a funkční, je to dočasné řešení přenositelnosti stavu webové aplikace z nouze. Jediný důvod, proč se začal nasazovat ve velkém byl google, který umožnil vývojářům učinit jejich stránky indexovatelné i při použití hashe pomocí krkolomné metody. Na koleje situaci vrací HTML5 history API, hash v odkazu na stav javascriptové aplikace chceš používat jen v případě nouze (čti nepodpory).

Nebudu se tu rozepisovat o problémech s hashem, internet je toho plný. Hash rozbíjí základní premisu REST, na které staví HTTP a sice, že adresa (a její součástí hash není) má odkazovat na obsah a má být nestavová.

Přijdeš mi jako Java programátor
Nepíšu v Javě. Jinak to přirovnání mi nepřijde trefné - History.js knihovna má 13 kB.

Mám rád jednoduché řešení
Jednoduché je nepoužívat ajax. Pokud už jej používáš, měl by ses o stavovost aplikace postarat naopak pořádně.

potřeboval přidávat další knihovnu
Zdá se mi, že naprosto bez zvážení kontextu označuješ libovolnou "knihovnu" za zlo. Prosím, knihovnu nepoužívej, napiš si kód sám. Stejně bys měl chtít dosáhnout toho, aby se adresa přepisovala na reálnou jinou fyzickou adresu (HTML5 pushState) případně na hash, když to jinak nejde. Jak to uděláš, je jen na tobě. Neudělat to je možnost, ale zároveň krátkozraký přístup.
lopikol
Profil
hmm tak díky. Hledal jsem, ale to co bylo navrhnuto je nepoužitelný a nic jiného najít nemohu.
joe
Profil
lopikol:
Nepoužitelný jsi bohužel ty, protože ani po radách si neumíš poradit. Je těžké v nějakém intervalu měnit hodnotu? Tím vytvoříš animaci...

Witiko:
Asi se bavíme o něčem jiném. Já píšu především o tom, když bude obsah na jedné stránce a pak je hash dostačující a obsah stránky bude zaindexován

Jinak to přirovnání mi nepřijde trefné - History.js knihovna má 13 kB.
Je jedno kolik kB to má, je to další knihovna nebo jestli chceš - další část kódu...

Jednoduché je nepoužívat ajax. Pokud už jej používáš, měl by ses o stavovost aplikace postarat naopak pořádně.
Pokud bysme se bavili o webových aplikací, tam je to celkem jedno, protože o indexaci ani nemůže být moc řeč, protože takové aplikace jsou postavené většinou celé na JavaScriptu.


Mně přijde, že se snažíš dělat věci tak, aby byly udělány nejlépe a k tomu jsi schopný přidat všemožný kódu jen pro to, abys využil novinek některých prohlížečů. Je to tvá věc, mně to přijde jako zbytečnost.
Witiko
Profil
joe:
mně to přijde jako zbytečnost
Samozřejmě, to je věc každého. Nemyslím, že bych používal "novinky" nuceně, jen nevím proč je nepoužívat pro učely, pro něž byly vytvořeny. Mě osobně přijde hash jako příliš křehký mechanismus, abych jen na něm postavil své stránky, nemluvě o tom, že takováto řezničina URI zcela popírá veškeré snahy hnutí REST, jak jsem zmínil už výše. Mám dobré důvody, proč se snažit v případě tvorby ajax stránek nahradit hashové řetězce alternativou generující validní url navracející obsah. Mezi uživateli linuxu existuje rčení, že co nejde načíst pomocí konzolového příkazu curl, neexistuje. :-) Dovedu si proto osobně použití HTML5 API dobře odůvodnit. Kdo ne, ať dál vesele využívá hashbang. Jen aby se mu nestalo to samé, co síti Gawker. ;-)

lopikol:
Ukázkový kód na popojetí divu z 200px; 200px na 200px; 400px za 1 sekundu:
<script>
window.onload = function() {
    var element = document.getElementById("div"),
        začátek = 200,
        konec = 400,
        čas = 1000,
        FPS = 30,
        početKroků = čas / (1000 / FPS),
        rozdíl = konec - začátek,
        krok = rozdíl / početKroků,
        pokrok = začátek,
        interval = setInterval(function() {
      if((pokrok += krok) < konec)
        element.style.left = pokrok + "px";
      else {
        element.style.left = konec + "px";
        clearInterval(interval);
      }
    }, 1000 / FPS);
};
</script>
<div id="div" style="position: absolute; top: 200px; left: 200px;">
  Budeme létat
</div>
lopikol
Profil
joe: 1. řikal jsem, že o js nic nevim.
2. já tě tu taky neurážim, tak si to odpust a pokud se ti něco nelíbí, tak sem nepiš!

Witiko:
Moc děkuji, ale když to vidim, tak to asi raději nechám, být :(
joe
Profil
Witiko:
Já takové lidi jako ty oceňuju a nechápu zároveň :-) Ale je to na tobě, jak se k věci postavíš a uděláš ji, pro mě je důležité hlavně když funguje.

Mezi uživateli linuxu
... tak to jde úplně mimo mě.

lopikol:
1. Nic takového jsi nepsal. Také jsi mi nic neříkal, protože já se s tebou osobně vůbec nebavil.
2. Já tě neurážel, tak se ti omlouvám, pokud jsi to tak pochopil. Já tím jen myslel to, že návod jak to udělat jsi už dostal.

pokud se ti něco nelíbí, tak sem nepiš!
Můžu si psát kam chci a co chci.

Víš ty vůbec jak udělat animaci? Nebo snad chceš přesný návod jak ji udělat? Víš co to je zkratka FPS?

když to vidim, tak to asi raději nechám, být
(před být nemá být čárka)

Co na tom nechápeš, je tam akorát samá deklarace promenných (uvozena slůvkem "var") a proměnné jsou oddělené čárkou.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0