2017-07-08 10 views
0

私はバックグラウンド位置をシフトし、ズームのdivの背景に2つの関数を使用しています。ここで彼らは、次のとおりです。JS関数は別々に動作しますが、一緒には動作しません

(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; 

      }); 
     } 
    }; 

})(); 

問題は、私はそれらの両方を同時に実行する必要があるが、彼らはのみ別途実行することです。それらが両方のように書かれていれば、第2のものは実行され、第1のものは何もしません。私が2番目を削除すると、最初のものが動作し始めます。私は最近JSで少し錆びているので、私はそれを理解できません。それらを両方とも機能させる方法はありますか?

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

は、次のコードを使用して...あなたが二回window.onscrollに代入している

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

あなたが関数を呼び出すと、どのような条件の下でいる方法を示してください。 – Difster

+0

@Difster彼らはIIFEです(彼らは彼ら自身を呼びます)。 – JJJ

答えて

1

+0

それは事をしました。私は彼らがお互いを打ち消すのか分からなかった。ありがとうございました! –

+0

他のプロパティと同様です。もしあなたが 'a = {}; a.x = 1; a.x = 2; '、' x'はプロパティが1つの値しか持てないため、最後は '2 'です。 – joews

1

あなたはwindow.onscrollイベントに

してみてください。この2行を上書きします。つまり、2番目のハンドラは最初のハンドラを「登録解除」します。

あなたは、両方の機能でイベントに耳を傾けるaddEventListenerを使用することができます。

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

ここで 'el'は使わないでください。これは、内部関数の変数として使用されます。 – Xufox

+0

はいあなたも書くことができます: 'window.addEventListener( 'scroll'、()=> console.log( 'secondlistener')); ' –

関連する問題