2017-07-08 5 views
0

Ich verwende zwei Funktionen, um die Hintergrundposition zu verschieben und den Hintergrund von div zu vergrößern. Hier sind sie:JS-Funktionen arbeiten separat, aber nicht zusammen

(function(shifting) { 

    var parallax = document.querySelectorAll(".shiftparallax"), 
     speed = -0.05; 

    window.onscroll = function() { 
     [].slice.call(parallax).forEach(function(el, i) { 

      var windowXOffset = window.pageYOffset, 
       elBackgrounPos = (windowXOffset * speed) + "px"; 
      console.log(elBackgrounPos); 
      el.style.backgroundPositionY = elBackgrounPos; 

     }); 
    }; 

})(); 


(function(zooming) { 
    var parallaxfacts = document.querySelectorAll(".parallaxfacts"), 
     constantsize = 100; 
    speed = -0.03; 
    window.onscroll = function() { 

     if (window.innerWidth > 1024) { 
      [].slice.call(parallaxfacts).forEach(function(el, i) { 

       var windowXOffset = window.pageYOffset, 
        elBackgrounScale = (windowXOffset/950 * constantsize) + "%"; 

       el.style.backgroundSize = elBackgrounScale; 

      }); 
     } 
    }; 

})(); 

Das Problem ist, dass ich sie brauchen beides zugleich zu laufen, aber sie nur separat ausgeführt werden. Wenn sie beide so geschrieben sind - der zweite läuft nur und der erste tut nichts. Wenn ich den zweiten entferne, fängt der erste an zu arbeiten. Ich habe in letzter Zeit ein wenig eingerostet, damit ich es nicht herausfinden kann. Gibt es einen Weg, sie beide arbeiten zu lassen?

+0

Bitte zeigen, wie Sie die Funktionen und unter welchen Bedingungen sind aufgerufen wird. – Difster

+0

@Difster Sie sind IIFE (sie nennen sich selbst). – JJJ

Antwort

1

Sie zweimal window.onscroll zuweisen. Das bedeutet, dass der zweite Handler den ersten "abmeldet".

Sie können addEventListener verwenden, um den Fall, in beiden Funktionen zu hören:

window.addEventListener("scroll", function() { /* function 1*/ }); 
window.addEventListener("scroll", function() { /* function 2*/ }); 
+0

Das hat das Ding gemacht. Ich hatte keine Ahnung, dass sie sich gegenseitig absagen. Vielen Dank! –

+0

Es ist wie jede andere Eigenschaft; wenn du 'a = {}; a.x = 1; a.x = 2; ',' x' ist '2' am Ende, weil Eigenschaften nur einen Wert haben können. – joews

1

Sie überschreiben die window.onscroll Ereignis

versuchen, diese beiden Zeilen:

window.onscroll = el => console.log ('first'); 
window.onscroll = el => console.log ('second'); 

den folgenden Code verwenden ...

window.addEventListener('scroll', el => console.log ('firstlistener')); 
window.addEventListener('scroll', el => console.log ('secondlistener')); 
+0

Verwenden Sie nicht 'el' hier. Es wird als Variable in einer inneren Funktion verwendet. – Xufox

+0

ja kannst du auch schreiben: 'window.addEventListener ('scroll',() => console.log ('secondlistener'));' –

Verwandte Themen