【问题标题】:How do I call a function on each <li> when they near the top of the viewport?当它们靠近视口顶部时,如何在每个 <li> 上调用函数?
【发布时间】:2012-02-28 07:57:01
【问题描述】:

请帮忙。我为此失眠了! :)

我有一个简短的帖子列表;如果你愿意,可以称他们为引号。我有一个 200 像素高、透明背景的固定位置标题。我需要用户滚动浏览的每个帖子的标题都可见(因此是固定位置),并且我希望阅读的帖子在向上滚动并在标题后面时消失(或显着降低不透明度);如果您愿意,可以使用 200 像素的 pad 与“lazyload”相反。当然,如果用户滚动相反的方向以使帖子回到视口中(以及标题下方),我需要它重新出现。

我对 jQuery 还很陌生,所以请多多包涵。我已经广泛搜索了帮助和提示,但还没有修复。衷心感谢您的帮助!

样机:

Test Page

jQuery:

$(document).ready(function(){

  var headerheight = $('#header').height();
  var scrollposition = $(window).scrollTop();

    $(window).scroll(function(){

        var offset = .offset();

        $('li').each(function() {

            if(scrollposition <= $(this)offset.top-headerheight){

            // 
            $(this).fadeOut(400);
            // 

            } else {

            //
            $(this).fadeIn(400);
            //

            }
        });
    });
});

【问题讨论】:

    标签: jquery offset viewport scrolltop


    【解决方案1】:
    $(document).ready(function(){
    
        var headerheight = $('#header').height();
    
        $(window).scroll(function(){
            var scrollposition = $(window).scrollTop();
    
            $('li').each(function() {
                var obj = $('.test');
    
                if(scrollposition >= headerheight){
    
                    if(obj.css('display') == 'none') {
                        $('.test').fadeIn(400);
                    }
    
                } else {
    
                    if(obj.css('display') == 'block') {
                        $('.test').fadeOut(400);
                    }
    
                }
            });
        });
    });
    

    其中有相当多的缺陷和错误。但是我的修改应该可以解决问题。正如您一样,我们只捕获滚动位置一次,它永远不会更新。这将导致 if 语句总是以错误的方式运行 :) 如果 .test 类尚未淡入或淡出,这只会淡入或淡出。

    试一试,如果有效,请告诉我:)

    请记住,如果滚动位置高于或等于 #header 的高度,这将使 .test 类淡入/淡出 -

    【讨论】:

    • 感谢您的回复。如果我采用您的解决方案,它会相对于第一个
    • 的滚动位置成功淡入/淡出“.test”,但我需要它做的是在每个
    • 接近此淡入淡出阈值时独立地对它们进行操作。如果我将“test”作为一个类添加到其他列表项,那么当第一个
    • 达到 headerheight 阈值时,它们都会隐藏。我错过了什么吗?再次感谢!
  • 那么你需要的是当用户向下滚动页面并且其中一个项目到达页面末尾(顶部)时它会淡出它吗?
  • 没错。我在想 .fadeTo() 而不是 .fadeOut() 不会完全从页面中删除每个
  • (这会影响高度)。
  • 好吧,明天有时间我会为你画一个草图。你可以在这里做的事情是使用 animate 然后 opacity 不影响列表的高度。但我明天会画出来:) 在这个答案中留意它 - 编辑后的版本。
  • 谢谢,我会注意的! :)
  • 【解决方案2】:

    知道了。用过这个插件:http://imakewebthings.github.com/jquery-waypoints/

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签