1
<script type="text/javascript">
$(document).ready(function () {  
  var top = $('#rt_outer').offset().top - parseFloat($('#rt_outer').css('marginTop').replace(/auto/, 0));
  $(window).scroll(function (event) {
    // what the y position of the scroll is
    var y = $(this).scrollTop();

    // whether that's below the form
    if (y >= top) {
      // if so, ad the fixed class
      $('#rt_outer').addClass('fixed');
    } else {
      // otherwise remove it
      $('#rt_outer').removeClass('fixed');
    }
  });
});
</script>

问题很简单。如果我使用标头重定向到页面中的新位置(比如说一半,我在使用 header("somepage.php#halfway") 处理 php 脚本后跳转到#halfway,则由该脚本处理的 div 容器获胜'在页面向任一方向滚动之前不要向下跳。

我知道有一个解决方案,我只是不知道是什么。

4

2 回答 2

0

您可以使用 Window 的 hashchange 事件:

$(window).on("hashchange", function () {
   console.log('hash changed'); 
});​

对于您的解决方案,您可以将滚动代码提取到一个函数中,然后从滚动和 hashchange 处理程序中调用该函数。

于 2012-09-13T21:35:17.320 回答
0

根据 John Koerner 的回复,我能够进行一些研究并提出解决方案。您可以在http://www.colonelcoon.net?override=true/上看到它的实际效果

这是我最终使用的代码...

<script src="http://github.com/cowboy/jquery-hashchange/raw/v1.3/jquery.ba-hashchange.js"></script>
<script type="text/javascript">
$(document).ready(function () {

var top = $('#rt_outer').offset().top - parseFloat($('#rt_outer').css('marginTop').replace(/auto/, 0));

  function checkScroll() {
    // what the y position of the scroll is
    var y = $(this).scrollTop();

    // whether that's below the form
    if (y >= top) {
      // if so, ad the fixed class
      $('#rt_outer').addClass('fixed');
    } else {
      // otherwise remove it
      $('#rt_outer').removeClass('fixed');
    }
  }

  $(window).hashchange(function (event) {
      checkScroll();
  });

  $(window).scroll(function (event) {
      checkScroll();
  });

  $(window).hashchange();
});
</script>
于 2012-09-14T13:19:28.753 回答