如何在div中滚动时添加活动类?

时间:2017-02-15 04:28:13

标签: javascript jquery

你可以告诉我如何在div中滚动时添加活动类吗?我有一个容器,其中有四个div。在页脚中,我还有四个li(第一,第二,第三)。我想在用户滚动div时选择li

实施例

代码运行时,应选择第一个li,因为第一个div位于视口中。如果用户滚动并移动到第二个div,则应选择第二个li。等等。

我试过了那个

https://jsbin.com/giwizufotu/edit?html,css,js,output

(function(){
  'use strict';
  $(function(){
    $( "#container" ).scroll(function() {
      console.log('scrlling');
      if (elementInViewport2($('#first'))) {
        // The element is visible, do something
        console.log('first visible')
    } else {
         console.log('second visible')
    }
    });
  })

  function elementInViewport2(el) {
  var top = el.offsetTop;
  var left = el.offsetLeft;
  var width = el.offsetWidth;
  var height = el.offsetHeight;

  while(el.offsetParent) {
    el = el.offsetParent;
    top += el.offsetTop;
    left += el.offsetLeft;
  }

  return (
    top < (window.pageYOffset + window.innerHeight) &&
    left < (window.pageXOffset + window.innerWidth) &&
    (top + height) > window.pageYOffset &&
    (left + width) > window.pageXOffset
  );
}

})()

我不想使用插件

2 个答案:

答案 0 :(得分:0)

您应该考虑根据一方改变课程 -

function elementInViewport(e) {
    var winBottom = $(window).scrollTop() + $(window).height();

    var visibleETop  = e.offset().top - winBottom;
    if(visibleETop < 0){
        return false;
    }else{
        return true;
    }

}

答案 1 :(得分:0)

我尝试使用几乎所有编写的代码而几乎没有修改: 以下是工作示例链接:https://jsfiddle.net/almamun1996/21wc37sx/3/

<强> CSS:

.item {
  width:25%;
  display:inline-block;
  margin:0;
  padding:0;
  color:blue;
  font-size:20px;
  text-align: center;
}
.footer{
  border:1px solid;
  position:fixed;
  width:100%;
  bottom:0px;
}
#container {
  border:1px solid red;
  overflow:auto;
  width:100%;
  height:300px;
}
.fC{
  background-color:yellow;
  padding:0;
}
#first{
  background-color:blue;
}
#second {
  background-color:green;
}
#third {
  background-color:pink;
}

#fourth {
  background-color:red;
}
.active {
  background-color : red;
}

<强> JS:

(function(){
  'use strict';
  $(function(){
  $('.fC li:eq(0)').css('background-color','red').css('color','#ffffff');

  $( "#container" ).scroll(function() {
   //console.log('scrlling');
   if (elementInViewport($('#first'))) {
     // The element is visible, do something
     //console.log('first visible')
 } else {
      //console.log('second visible')
     }
 });

});

function elementInViewport(e) {
    var winBottom = $(window).scrollTop() + $(window).height();

    var visibleETop  = e.offset().top - winBottom;

    var first = parseInt($('#first').css('height'));
    var second = parseInt($('#second').css('height'));
    var third = parseInt($('#third').css('height'));
    var fourth = parseInt($('#fourth').css('height'));

    if(Math.abs(e.offset().top) > first - parseInt($('#container').css('height')) && Math.abs(e.offset().top) <= first+second - parseInt($('#container').css('height')))
    {
        $('.fC li:eq(0)').css('background-color','').css('color','');
        $('.fC li:eq(2)').css('background-color','').css('color','');
        $('.fC li:eq(3)').css('background-color','').css('color','');
        $('.fC li:eq(1)').css('background-color','red').css('color','#ffffff');
    }
    else if(Math.abs(e.offset().top) > first+second - parseInt($('#container').css('height')) && Math.abs(e.offset().top) <= first+second+third - parseInt($('#container').css('height')))
    {
        $('.fC li:eq(0)').css('background-color','').css('color','');
        $('.fC li:eq(1)').css('background-color','').css('color','');
        $('.fC li:eq(3)').css('background-color','').css('color','');
        $('.fC li:eq(2)').css('background-color','red').css('color','#ffffff');

    }
    else if(Math.abs(e.offset().top) > first+second+third - parseInt($('#container').css('height')) && Math.abs(e.offset().top) <= first+second+third+fourth - parseInt($('#container').css('height')))
    {
        $('.fC li:eq(0)').css('background-color','').css('color','');
        $('.fC li:eq(1)').css('background-color','').css('color','');
        $('.fC li:eq(2)').css('background-color','').css('color','');
        $('.fC li:eq(3)').css('background-color','red').css('color','#ffffff');

    }
    else{
        $('.fC li:eq(1)').css('background-color','').css('color','');
        $('.fC li:eq(2)').css('background-color','').css('color','');
        $('.fC li:eq(3)').css('background-color','').css('color','');
        $('.fC li:eq(0)').css('background-color','red').css('color','#ffffff');
    }
    if(visibleETop < 0){
        return false;
    }else{
        return true;
    }

 }

})();

<强> HTML: 只需将第三个div中的id='three'替换为id='third'即可。