为什么JS不在滚动上调用函数?

时间:2015-04-06 11:57:17

标签: javascript jquery css

function mobileNavTop () {
  if($('#mobile-navigation').offset().top <= 25) {
    $('#mobile-navigation').css({'position':'absolute', 'right':'0', 'top':'18px'});
    $('.jq1').css({'position':'absolute'});
    $('.move_up').hide();
  } else {
    $('#mobile-navigation').removeAttr('style');
    $('.jq1').removeAttr('style');
    $('.move_up').removeAttr('style');
  }
}
$(document).ready(function(){
  move_up = $('.move_up');

  $('.move_up').click(function(){
    $('html, body').animate({ scrollTop: 0 }, 'slow');
  });

  if ($('#mobile-navigation').offset().top <= 25) { move_up.hide(); }

  mobileNavTop();
});

$(window).scroll(function(){
  mobileNavTop();
});

我的想法是,当导航从顶部滚动低于25px时,会发生一点css。这适用于document.ready,但不适用于scroll(由于任何原因,它不会removeAttr('style')。这会导致什么原因?

修改

如果我向上滚动(在offset().top > 25时加载页面),它会起作用,但如果我向下滚动则不行。

3 个答案:

答案 0 :(得分:2)

滚动事件也必须在document.ready函数内。

$(document).ready(function(){

   $(window).scroll(function(){
     mobileNavTop();
  });
});
  

一些建议:

var您错过了move_up = $('.move_up');,这将使move_up成为全局变量,并且当您引用jquery包装对象时也是如此。它的好用$move_up

$(document).ready(function(){
  var $move_up = $('.move_up');

  $move_up.click(function(){
    $('html, body').animate({ scrollTop: 0 }, 'slow');
  });

  if ($('#mobile-navigation').offset().top <= 25) { $move_up.hide(); }

   $(window).scroll(function(){
     mobileNavTop();
  }).trigger("scroll");

});

答案 1 :(得分:2)

您必须将scroll功能包含在$(function(){标记内。 尝试以下一个:

$(function(){
$(window).scroll(function(){
    if($(document).height()==$(window).scrollTop()+$(window).height()){
        alert('I am at bottom');
        //mobileNavTop();
});

选中此JSFIDDLE

答案 2 :(得分:1)

<script>
jQuery(document).ready(function($) {
$(window).scroll(function () {
    if ($(document).scrollTop().valueOf() > 25) { 
        //code
    }
    else{
        //code
    }
});
});
 </script>