Autor Zpráva
Fortune Rayzor
Profil
Zdravím všechny...
Mám tu tak trochu potíž s Javascriptem (částečně taky proto, že nejsem přes JS odborník). Byl jsem schopen udělat základní algorytmus pro takové pseudo-kinetické scrollování divu, ale narazil jsem na několik bugů.

1. Na hranicích .scrollTop se to chová trochu zvláštně. Např. když je scrollTop == 0, pustí se levé tlačítko, div se chytne myší o něco výš a pohne, tak je najednou scrollTop > 0.
2. Scroll nahoru má jiný průběh než scroll dolů. (Nemám ponětí proč)

--prý je tam ještě nějaký jiný bug, ale toho jsem si nevšiml--

Kód:
var pohybujeme = false;
var rozdil = 0;
var tempX = 0;
var tempY = 0;
var rychlost;
var rychlosti_y = [0,0,0];
var temp;
Array.prototype.count = function ()
{
return this.length;
}
function OnDown()
{
    pohybujeme = true;
    rychlost = 0;
    rychlost_y = [0,0,0];
}
function OnUp()
{
    pohybujeme = false;
    Pohybuj()
}
function Pohybuj()
{
       document.getElementById("content").scrollTop += rychlost;
       rychlost /= 1.05;
       document.Form.RychlostY.value = document.getElementById("content").scrollTop;
       if(Math.abs(rychlost) > 0.01 && pohybujeme == false) window.setTimeout("Pohybuj()", 20);
}
function OnMove(e)
{
    if(pohybujeme == true)
        {
        if(window.event) e = window.event;
	if (e.pageY)
        {
                rozdil = tempY - e.pageY;
		tempY = e.pageY;
                for(var a = 0; a < rychlosti_y.count(); a++)
                {
                    if(rychlosti_y[a + 1]) rychlosti_y[a] = rychlosti_y[a + 1];
                    else rychlosti_y[a] = rozdil;
                }
                temp = 0;
                for(var b = 0; b < rychlosti_y.count(); b++)
                {
                    temp += rychlosti_y[b];
                }
                rychlost = temp / rychlosti_y.count();
	}
	else if (e.clientY) 	
        {
                rozdil = tempY - e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
		tempY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
                for(var c = 0; c < rychlosti_y.count(); c++)
                {
                    if(rychlosti_y[c + 1]) rychlosti_y[c] = rychlosti_y[c + 1];
                    else rychlosti_y[c] = rozdil;
                }
                temp = 0;
                for(var d = 0; d < rychlosti_y.count(); d++)
                {
                    temp += rychlosti_y[d];
                }
                rychlost = temp / rychlosti_y.count();
	}
        document.getElementById("content").scrollTop += rozdil;
        document.Form.RychlostY.value = document.getElementById("content").scrollTop;
        }
}

Beta na: http://fortunerayzor.wz.cz

Omluvte hrozné pojmenování proměnných (dochází fantazie) a taky ošklivě napsaného kódu. :-)
Je to částečně přepsaný kód z C# (aspoň jsem se snažil přiblížit), který jsem napsal a funguje docela hezky. Já si s tímhle už bohužel nevím rady, přitom to bude asi banální věc.

Prosím Vás o radu. Díky moc.
Fortune Rayzor
Profil
Tak jsem to nakonec vyřešil sám.

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:

Prosím používejte diakritiku a interpunkci.

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

0