2016-10-12 18 views
3

私はここで少し問題に直面しています。私はJavascriptに関する基本的な知識を持っており、私は次のことをしたい:Javascript - 複数の異なるwindow.onscrollを実行

今、あなたが下にスクロールすると、メニューは小さくなる。あなたが戻ってきたら、それは正常に戻ります。今私は別の関数がアクションボタンに私の呼び出しにいくつかの効果を持つようにしたい、「テスト」機能を呼び出すことができます

var diff = 0; 
function effects(){ 
var topDistance = (document.documentElement &&  document.documentElement.scrollTop) || document.body.scrollTop; 
var clientWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; 
var clientHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; 

if(topDistance > diff){ 
    diff = topDistance; 
    if(clientWidth > 1024){ 
     if(topDistance > 300){ 
      document.getElementById("header").style.marginTop= "-100px"; 
     } 
    } 
}else if(topDistance < diff){ 
    diff = topDistance; 
    if(clientWidth > 1024){ 
     if(topDistance > 300){ 
      document.getElementById("header").style.marginTop= "0"; 
     } 
    } 
} 
} 

window.onscroll = effects(); 

、しかし、私はこれを同じ方法で行いたい場合:私はwindow.onscrollでこのイベントを呼び出します上記のように、エフェクト機能はもう機能しません:

function test(){ 
//do something 
} 
window.onscroll = test(); 

何か助けてください!私はそれを行うには大きな挑戦ではないtihnkが、私はそれが間違っていると思います。 (PS:NO jQueryのPLEASE)

+0

をオーバーライドしない方法

window.addEventListener('scroll', effects); window.addEventListener('scroll', test); 

だから、スクロール上の2つの関数を呼び出すしたいですか?しかし、 'effects'スタイルのヘッダと' test'スタイルのボタンもありますが、両方とも同じスクロール/オフセットの高さチェックをしますか? – nem035

+1

さて、あなたのonscroll関数のデバウンスを見てみるとよいでしょう。https://davidwalsh.name/javascript-debounce-function –

答えて

10

あなたはあなたが行うことができますwindow.onscroll = blabla

を実行して、機能onscrollオーバーライドします:あなたは、スクロールイベントに対して複数のリスナーを使用することができます

window.onscroll = function() { 
    effects(); 
    test(); 
} 

または

window.addEventListener('scroll', effects); 
window.addEventListener('scroll', test); 
+0

これは単純ですが、答えが見つからないためです。ありがとう! – Saypontigohe

関連する問題