当元素位于屏幕顶部时,将类添加到元素

时间:2016-06-26 17:39:23

标签: javascript jquery append offset scrolltop

我正在尝试通过单击父DIV内的按钮或在输入表单中输入文本,将类添加到屏幕顶部的元素。

它有效,但不适用于附加元素。当它对附加元素起作用时,就像每次附加元素时这些元素的偏移量都会消失,然后它会将类应用到每个附加元素之后。这很烦人,我已经坚持了至少一个星期了。

当元素点击屏幕顶部时,我用来添加类的代码是:

window.poo = function poo() {
     $("#message").each(function() {


var win = $(".chat-log"),
  nav = $(this),

  pos = nav.offset().top,
  sticky = function() {

    win.scrollTop() > pos ?
       nav.addClass('inactive') :
      nav.removeClass('inactive')
  }

win.scroll(sticky);
});

}

poo();

父元素是 #message #message 的父元素是 .chat-log 。我已将 #message 更改为 .message ,但它仍然给了我相同的结果。

当用户点击父母中的按钮时,每次偏移都会变得更糟,并且在他们甚至到达屏幕顶部之前将该类应用于所有元素。

2 个答案:

答案 0 :(得分:1)

$(".chat-log").on("scroll", function() {  
    console.log("I'm scrolling!");

    var win = $(this);  // .chat-log
    win.find(".message").each(function(){

        var nav = $(this);  // each .message found

        //console.log("win: "+win.scrollTop());
        console.log("nav: "+nav.offset().top);

        nav.offset().top < 0 ? nav.addClass('inactive') : nav.removeClass('inactive')
    });
});

答案 1 :(得分:0)

似乎您正在尝试将函数附加到每个.chat-log div,因此它会在滚动时执行。问题是当它执行时,只有一个这样的div,所以只有它在传递顶部时才会改变它的类。

您必须更改函数,以便for each位于每个滚动执行的函数内。例如,您可以将其附加到窗口,然后在其中搜索应该应用样式的div。