Autor Zpráva
Body
Profil *
Ahoj,
môžete mi poradiť, ako cez js alebo jQeury spravim aby sa stranka plynule scrollovala keď kliknem napr, na url#body z menu.
diky.
whysper93
Profil
Ahoj, nedávno jsem toto řešil a našel jsem toto:
$("html, body").animate({scrollTop: 0}, 500
Toto posune stránku úplně nahoru. Jestliže chceš určitou pozici, tak si zjisti pozici a uprav scrollTop: 0 na scrollTop: pozice v pixelech obecný zápis byl dal takto:
$("html, body").animate({scrollTop: pozice}, delka animace v ms);
Radek9
Profil
Pokud to teda má být v jQ, tak můžeš použít moji funkci:
$.fn.scrollTo = function(t){
    $("html, body").animate({scrollTop: $(this).offset().top+"px"}, t);
}
//Použití:
$("#id").scrollTo(1000);
Body
Profil *
diky za odpovede.

asi mam nieco zle alebo som to zle pochopil, ale mi to nejde.

<li><a href="ponuka.html" onclick="$('#id').scrollTo(1000);">Ponuka</a></li>


v tagu head mam:

<script type="text/javascript">
	$.fn.scrollTo = function(t){
    $("html, body").animate({scrollTop: $(this).offset().top+"px"}, t);
	}
	</script>
Radek9
Profil
Body:
Kdyžtak to zkus dát ještě do onload ($(document).ready()), ale pokud to nepomůže, tak už nevím.
Chamurappi
Profil
Reaguji na Bodyho:
mi to nejde
Asi bys měl ještě stornovat výchozí chování při kliknutí na odkaz, tedy return false.

Bez té frameworkové koule na noze by to šlo udělat přibližně takhle:
function narolujNa(element)
{
  var pozice = element.getBoundingClientRect().top;
  var posun = Math.round(Math.abs(pozice) > 1 ? pozice / 5 : pozice);
  window.scrollBy(0, posun);
  if(pozice - element.getBoundingClientRect().top)
    setTimeout(function() { narolujNa(element) }, 30);
}


Reaguji na Radka9:
Kdyžtak to zkus dát ještě do onload
Vidíš snad, že by se tam vykonávalo něco, co je závislé na načtenosti stránky?
Body
Profil *
Chamurappi:
Tak som skusil tvoju syntax ale tiez to nejde..

<li><a href="ponuka.html" onclick="narolujNa('#body'); return false">Ponuka</a></li>
Body
Profil *
Radek9:
Uz mi to zacalo ist, len som prisiel na to, ze len to s udalostou onClick nejde.. ked dam onMouveOver tak ano.
Nevies preco?
Witiko
Profil
Chamurappi:
Bez té frameworkové koule na noze
+1 :)

Body:
Tak som skusil tvoju syntax ale tiez to nejde..
Přijde ti '#body' jako element? Mě připadá jako textový řetězec. :D
Body
Profil *
Witiko:
Ale ja som pouzil Radekove riesenie vis.
Witiko
Profil
Body:
Ale ja som pouzil Radekove riesenie vis.

Nevím. Mimochodem, Chamurappiho verze by ti fungovala. Jen ta funkce nebere jako argument jméno kotvy, ale samotný element.
Body
Profil *
Witiko:
ved skusam aj na element:

 onclick="narolujNa('div#content')"


Neviem to nemozete proste napisat ako to ma vyzerat, ale ma takto natahovat.
Chamurappi
Profil
Reaguji na Bodyho:
'div#content'
To je pořád jen řetězec.
Samotný element je pomocí ID dohledatelný třeba metodou document.getElementById('ídéčko').
Body
Profil *
do funkcie som pridal:

var el = document.getElementById(element);


a potom
onclick="narolujNa('content')"


Ako nemozes to napisat proste ako to ma vyzerat hej? V JS len zacinam.
Witiko
Profil
Body:
Ako nemozes to napisat proste ako to ma vyzerat hej?

"Mohu ti ukázat cestu, ale kráčet po ní už musíš sám." - alias - Pokud chceš hotová řešení, piš sem. V téhle sekci ti nikdo není povinován servírovat výsledný kód pod nos, nýbrž postrčit tě ke správnému řešení, přičemž se během toho ještě můžeš něco nového naučit.
Chamurappi
Profil
Reaguji na Bodyho:
V té funkci pak pracuj na řádcích 3 a 6 s el místo s element a mělo by to jet. Jestli ne, prosím o odkaz na živou ukázku.

V JS len zacinam.
Nemáš-li v úmyslu s ním i skončit, budou se ti nejspíš hodit zkušenosti, které nyní načerpáš.
Body
Profil *
Chamurappi:
okey, spravil som to takto:

function narolujNa(element) {
			var el = document.getElementById(element);
			var pozice = el.getBoundingClientRect().top;
			var posun = Math.round(Math.abs(pozice) > 1 ? pozice / 5 : pozice);
			window.scrollBy(0, posun);
			if(pozice - el.getBoundingClientRect().top)
			setTimeout(function() { narolujNa(element) }, 20);
		}


Zacina to fungovat, ale stale sa mi to vrati naspat :D Nascrolluje sa dole a potom to samo ide hore :D
Chamurappi
Profil
Reaguji na Bodyho:
Jestli to voláš z odkazu, musíš samozřejmě stornovat výchozí akci (return false), jinak se při kliknutí odkaz normálně proklikne. Co máš vlastně v hrefu? Tam bys měl odkázat na kotvu normálně, aby se dostali na správné místo i ti, kdo nemají JS, ne?
Body
Profil *
Chamurappi:
aha som dal return false a uz mi to ide, diky moc!
Len trocha trhavo to ide.
Body
Profil *
Body:
Ok uz mi to ide plynule som to upravil.
Body
Profil *
lenze teraz sa neda prekliknut v menu na dalsiu stranku :(
Ja to chcem aplikovat na menu, ze proste kliknem a ono mi nacita novy web ale pekne nascrolluje dole.
Body
Profil *
Body:
zacinam velmi spamovat :) takze ma napadlo toto:

<body onload="narolujNa('body')">


a funguje to celkom, testujem.

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