2015-05-09 155 views
1

我打电话角这家工厂的功能,在一个百分比值作为参数传递:从事件处理函数返回true

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

我要的是为获取函数返回真当滚动条件是真的。谢谢。

+0

'fetch_position'不是在JavaScript范围之外的'取()'任何地方。 – charlietfl

+0

如果你想要的只是true/false ...为什么绑定工厂函数来滚动处理程序。你不能从事件处理程序返回。真的不清楚你总想做什么。 – charlietfl

回答

0

您的方法不起作用。在:

if(scroll_factory.fetch(50)) { ... } 

你已经在评估(函数返回一个值这一点)fetch函数。

您需要重新考虑fetch_position回调会不断评估。

你想有一个滚动间谍功能作为一个分离的模块?

.factory('ScrollSpy', function($document, $window) { 
    return function(callback) { 
    $document.on('scroll', function(e) { 
     var y = ... 
     if (y > 123) 
     callback(y); 
    }) 
    }; 
}) 

解决此问题的一种方法是提供一个工厂,接受可以根据您的要求进行评估的回调。

我做了一个小例子,希望它有助于:http://plnkr.co/edit/du3dpMlaKYZFuy8WA0QL?p=preview

+0

谢谢。工作正常。 – andyr