Autor Zpráva
Venca V
Profil
Ahoj,
dělám na jednom projektu, kde chtěli parallax efekt, kde budou jednotlivé vrstvy jinou rychlostí scrollovat a následně se v určitém bodě zastavovat. Nakonec se mi to s pomocí jQuery podařilo napsat, všechno mi funguje, ale nejsem zas tak silný v JS, tak prosím zdejší javascriptaře, jestli tam nemám něco vyloženě blbě, jestli by se dalo ještě něco "ušetřit".

function parallax() {
        var speed1 = 1.05;
        var speed2 = 1.1;
        
        $(document).on('scroll', function() {
            var scrollTop = $(document).scrollTop();

            scrollTop < (121 / speed1) ? bg2top = (scrollTop * speed1) : bg2top = 121;
            $('.bg_2').css('top', bg2top);

            scrollTop < (1315 / speed2) ? bg3top = (scrollTop * speed2) : bg3top = 1315;
            $('.bg_3').css('top', bg3top);

            (scrollTop > (2585 - $(window).height())) ? $('.parallax').css({'bottom': -scrollTop, 'top': 'auto'}) : $('.parallax').css({'bottom': 'auto','top': '0'});
        });
    }
Chamurappi
Profil
Reaguji na Vencu V:
Je to napsané dost hnusně. Proč nepoužíváš na podmínky if a else?
Když používáš ternární operátor, proč ne jen na pravou stranu přiřazení, když levá je v obou větvích stejná?

Nakonec se mi to s pomocí jQuery podařilo napsat
Na nastavování CSS vlastností není třeba žádný framework, element.style.vlastnost = hodnota funguje všude spolehlivě.
Venca V
Profil
Díky, přesně tohle jsem potřeboval.

Co se týká jQuery, je tam kromě tohoto víc věcí, a bez jQuery bych to asi nedal...a pokud ano, tak by mi ten čas nikdo nezaplatil:-)
Chamurappi
Profil
Reaguji na Vencu V:
Řádky 8 a 11 bych napsal spíš takhle:
var bg2top = Math.min(scrollTop * speed1, 121);
var bg3top = Math.min(scrollTop * speed2, 1315);
(Také ti tam chyběl var.)
Venca V
Profil
Díky, var mi tam vypadlo.

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: