Javascript 从事件处理程序函数返回true

Javascript 从事件处理程序函数返回true,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我用Angular调用这个工厂函数,传入一个百分比值作为参数: if(scroll_factory.fetch(50)) { // If the user has scrolled 50% of page height, do something. }; scroll_factory.$inject = ['$window', '$document']; function scroll_factory($window, $document) { var factory = {

我用Angular调用这个工厂函数,传入一个百分比值作为参数:

if(scroll_factory.fetch(50)) {
 // If the user has scrolled 50% of page height, do something.
};

scroll_factory.$inject = ['$window', '$document'];
function scroll_factory($window, $document) {

    var factory = {
        fetch: fetch,
        fetch_position: fetch_position
       }

    return factory;



function fetch(percent) {
    $document.on('scroll', fetch_position)

    function fetch_position() {
        var window_inner_height = $window.innerHeight;
        var y = pageYOffset;
        var percentage = (y / window_inner_height) * 100;

        if (percentage > percent) {
            // Condition true - return true for the outer fetch.
        }
    }

    return false;
}

我想要的是,当滚动条件为true时,fetch函数返回true。谢谢。

你的方法行不通。在:

if(scroll_factory.fetch(50)) { ... }
您已经在对
fetch
函数进行求值(函数在此点返回一个值)

您需要重新考虑,
fetch\u位置
回调是连续计算的

您想将scroll spy功能作为单独的模块使用吗

.factory('ScrollSpy', function($document, $window) {
  return function(callback) {
    $document.on('scroll', function(e) {
      var y = ...
      if ( y > 123)
        callback(y);
    })
  };
})
解决这个问题的一种方法是提供一个工厂,它接受一个回调,这个回调可以根据您的需求进行评估


我举了一个小例子,希望能有所帮助:

fetch\u position
不在javascript作用域中
fetch()
之外的任何地方。如果您想要的是真/假…为什么首先要将工厂函数绑定到滚动处理程序。无法从事件处理程序返回。真的不清楚你想做什么整体。