2017-02-05 12 views
0

これは私の現在のコードであり、非常に効率的ではないと思われ、Timer/Timeoutが使用されている方が良いでしょう。しかし、私はそれについてどうやって行くのか迷っています。jQuery(ウィンドウ).scroll関数をjQueryで効率的に処理する方法は?

誰かに助けてもらえますか?あまり効率的ではないjavascriptで。私のJS男は休暇中です。

app.directive('ScrollBar', function() { 
    return { 
     restrict: 'A', 
     scope: {}, 
     link: function postLink(scope, elem, attrs) { 
      jQuery(window).scroll(function(){ 
       var SBar = jQuery("#ScrollStop").offset(); 
       var screenPosition = jQuery(document).scrollTop() + window.innerHeight; 
       if (screenPosition < SBar.top) { 
        jQuery(".ScrollClass").fadeIn(); 
       } 
       if (screenPosition >= SBar.top) { 
        jQuery(".ScrollClass").fadeOut(); 
       } 
      }); 
     } 
    }; 
}) 
+1

限り効率が行くように細かいようだが、あなたはおそらく、それはすべてのスクロール移動にフェードしないように*(スロットル)*これらの条件をデバウンスします。 – adeneo

+0

どうすればいいですか? –

答えて

1

スクロール機能をバインドすることでスクロール方向を区別するといいですが、私はフィドルを持っています。

http://jsfiddle.net/kavinhuh/17hca7wa/

myApp.directive('scrolly', function() { 
    return { 
     restrict: 'A', 
     link: function (scope, element, attrs) { 
     var lastScrollTop = 0; 
      var raw = element[0]; 
      console.log('loading directive'); 

      element.bind('scroll', function() { 
       console.log('in scroll'); 
       if(raw.scrollTop < lastScrollTop) 
       { 
       alert("scroll up"); 
       lastScrollTop = raw.scrollTop; 
       } 
       else{ 
       lastScrollTop = raw.scrollTop; 
       } 

       if (raw.scrollTop + raw.offsetHeight > raw.scrollHeight) { 
        scope.$apply(attrs.scrolly); 
       } 
      }); 
     } 
    }; 
}); 
関連する問題