• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Parallax w margin-top

42 Warsaw Coding Academy
0 głosów
173 wizyt
pytanie zadane 1 czerwca 2017 w JavaScript przez Bakr Mądrala (6,850 p.)

Witam,

 

W jaki sposób stworzyć sekcje z parallaxem, który jest sterowany poprzez właściwość margin-top? Napisałem cos takiego, ale wartość dla margin-top zostaje nałożona od razu, a powinna być zwiększana wraz z upływem scrolla.

  window.ParallaxBG = (function() {
        var images;

        function init() {
            images = [].slice.call(document.querySelectorAll('.js-parallax-bg'));
            if (!images.length) {
                return
            }

            Gator(window).on('scroll', doParallax);
            Gator(window).on('resize', doParallax);
            doParallax();
        }

        function getViewportHeight() {
            var a = document.documentElement.clientHeight,
                b = window.innerHeight;
            return a < b ? b : a;
        }

        function getViewportScroll() {
            if (typeof window.scrollY != 'undefined') {
                return window.scrollY;
            }
            if (typeof pageYOffset != 'undefined') {
                return pageYOffset;
            }
            var doc = document.documentElement;
            doc = doc.clientHeight ? doc : document.body;
            return doc.scrollTop;
        }

        function doParallax() {
            var el, elOffset, elHeight,
                offset = getViewportScroll(),
                vHeight = getViewportHeight();

            for (var i in images) {
                el = images[i];
                elOffset = el.offsetTop;
                elHeight = el.offsetHeight;

                if ((elOffset > offset + vHeight) || (elOffset + elHeight < offset)) {
                    continue;
                }

                el.style.marginTop = '-5' + Math.round((elOffset - offset) * 3 / 8) + 'px';
            }
        }

        return {
            init: init
        }
    })();

    ParallaxBG.init();

 

Co ciekawe - efekt działa, gdy korzystam z background-position:

el.style.backgroundPosition = '50% ' + Math.round((elOffset - offset) * 3 / 8) + 'px';

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 178 wizyt
pytanie zadane 10 grudnia 2017 w JavaScript przez Bakr Mądrala (6,850 p.)
0 głosów
1 odpowiedź 224 wizyt
pytanie zadane 29 lipca 2016 w JavaScript przez Bakr Mądrala (6,850 p.)
0 głosów
0 odpowiedzi 133 wizyt
pytanie zadane 11 grudnia 2019 w JavaScript przez mola85 Początkujący (320 p.)

93,395 zapytań

142,389 odpowiedzi

322,567 komentarzy

62,753 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...