带提取功能的JQuery滚动条

带提取功能的JQuery滚动条,jquery,Jquery,有人能解释为什么我的代码不起作用吗?我只是想提取一个函数: $(document).ready(function(){ $('section.bgParallax').each(function(){ var $obj = $(this); $(window).scroll(function() { var yPos = -($(window).scrollTop() / $obj.data('speed'));

有人能解释为什么我的代码不起作用吗?我只是想提取一个函数:

 $(document).ready(function(){

   $('section.bgParallax').each(function(){
        var $obj = $(this);
        $(window).scroll(function() {
            var yPos = -($(window).scrollTop() / $obj.data('speed')); 
            var bgpos = '50% '+ yPos + 'px'; 
           $obj.css('background-position', bgpos );
        }); 

});
$(window).scroll(function(){
    doScroll($obj);
});
这是行不通的:

$(document).ready(function(){

    var doScroll = function($div) {
            var yPos = -($(window).scrollTop() / $div.data('speed')); 
            var bgpos = '50% '+ yPos + 'px'; 
           $div.css('background-position', bgpos );
        };

   $('section.bgParallax').each(function(){
        var $obj = $(this);
        $(window).scroll(doScroll($obj)); 

   });
});
我刚刚尝试提取函数,但在scroll上没有调用我的函数。

函数
$(窗口)。scroll
必须是接收函数作为参数的事件

它不起作用,因为您正在调用函数
doscorl
,并将其返回值作为参数传递给
$(窗口)。滚动
。您应该传递doScroll函数:

$(窗口)。滚动(doScroll)

但由于需要向其传递参数,因此可以将其包装在匿名函数中:

 $(document).ready(function(){

   $('section.bgParallax').each(function(){
        var $obj = $(this);
        $(window).scroll(function() {
            var yPos = -($(window).scrollTop() / $obj.data('speed')); 
            var bgpos = '50% '+ yPos + 'px'; 
           $obj.css('background-position', bgpos );
        }); 

});
$(window).scroll(function(){
    doScroll($obj);
});

您可以使用
console.log(“某物”)以调试代码。添加
console.log($obj)
var$obj=$之后(此)
控制台日志(yPos)
doscorl
函数的第一行之后。我正在用console.log调试,这些函数只在页面加载时调用,而不是在滚动时调用。还有其他想法吗@科德兹