javascript - onScroll 通过在屏幕上可见将类添加到 div

标签 javascript jquery html css

我正在为网站制作时间轴,在滚动时我需要 addClass 到窗口中可见的部分。我的 jQuery 适用于所有甚至在屏幕上不可见的 div 或部分。

你可以在我的 JSFiddle 上测试

这是我的 jQuery

$(window).on('load scroll', function() {
    var $elem = $('#timeline .section');
    var $window = $(window);

    var docViewTop = $window.scrollTop();
    var docViewBottom = docViewTop + 20 + $window.height();
    var elemTop = $elem.offset().top;
    var elemBottom = elemTop + $elem.height();
    if (elemTop < docViewBottom) {
    $("#timeline .section").each(function(i) {
      $(this).delay(300 * i).addClass("active");
    });

    }
});

最佳答案

$(window).on('load scroll', function() {
    var $e = $('#timeline .section');
    $e.removeClass("active")
    $e.each(function(index){

		    var $window = $(window);

    var docViewTop = $window.scrollTop();
    var docViewBottom = docViewTop + 20 + $window.height();
    var elemTop = $e.eq(index).offset().top;
    var elemBottom = elemTop + $e.eq(index).height();
    if (elemTop > docViewTop && elemBottom < docViewBottom){
			$e.eq(index).addClass("active");
  }
  });
});
#timeline{
    max-width: 620px;
    margin: 40px auto 20px;
}

#timeline .section{
    position: relative;
}

#timeline .section .year{
    text-align: center;
    padding: 30px 0 10px 0;
    font-size: 18px;
    font-weight: 300;
    transition: 1s ease-in-out;
}

#timeline .section .year:after{
    content: "";
    opacity: 0;
    width: 9px;
    height: 9px;
    background: #006699;
    border-radius: 100%;
    position: absolute;
    margin: auto;
    bottom: 0;
    left: 0;
    right: 0;
    transition:1s ease-in-out;
}

#timeline .section .text-sec{
    position: absolute;
    font-weight: 100;
    line-height: 24px;
    right: 0;
    bottom: 40px;
    transition: 1s ease-in-out;
}

#timeline .section .sec-left{
    max-width: 275px;
    text-align: right;
    float: left;
    position: absolute;
    left: 0;
    top: 100px;
    padding: 0 0 0 0;
}

#timeline .section .line{
    background: #dedede;
    width: 1px;
    height:200px;
    position: relative;
    margin: 0 auto;
    transition: 1s ease-in-out;
}

#timeline .section .sec-right{
    max-width: 265px;
    float: right;
}

#timeline .section.active .year{
    color: #333333;
}

#timeline .section.active .year:after{
    opacity: 1;
}

#timeline .section.active .text-sec{
    color: #333333;
}

#timeline .section.active .sec-left{}

#timeline .section.active .line{
    background: #006699;
}

#timeline .section.active .sec-right{}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="timeline">
<div class="section">
    <div class="year">2014</div>
    <div class="text-sec sec-left">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc a porta erat. Vestibulum commodo neque in iaculis lobortis. Nullam sit amet placerat sapien. </div>
    <div class="line"></div>
    <div class="text-sec sec-right">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc a porta erat. Vestibulum commodo neque in iaculis lobortis. Nullam sit amet placerat sapien. Pellentesque sollicitudin, nulla quis efficitur feugiat, augue tortor scelerisque urna, sit amet ultricies lectus</div>
</div>

<div class="section">
    <div class="year">2015</div>
    <div class="text-sec sec-left">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc a porta erat. Vestibulum commodo neque in iaculis lobortis. Nullam sit amet placerat sapien. Pellentesque sollicitudin, nulla quis </div>
    <div class="line"></div>
    <div class="text-sec sec-right">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc a porta erat. Vestibulum commodo neque in iaculis lobortis.</div>
</div>

<div class="section">
    <div class="text-sec sec-left">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc a porta erat. Vestibulum commodo neque in iaculis lobortis. Nullam sit amet placerat sapien. Pellentesque sollicitudin, nulla quis efficitur feugiat, augue torto</div>
    <div class="line"></div>
    <div class="text-sec sec-right">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc a porta erat. Vestibulum commodo neque in iaculis lobortis. Nullam sit amet placerat sapien. Pellentesque sollicitudin, nulla quis.</div>
</div>

<div class="section">
    <div class="year">2016</div>
    <div class="text-sec sec-left">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc a porta erat. Vestibulum commodo neque in iaculis lobortis. Nullam sit amet placerat sapien. Pellentesque sollicitudin, nulla quis efficitur feugiat, augue</div>
    <div class="line"></div>
    <div class="text-sec sec-right">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc a porta erat. Vestibulum commodo neque in iaculis lobortis. Nullam sit amet placerat sapien. Pellentesque</div>
</div>

<div class="section">
    <div class="text-sec sec-left">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc a porta erat. Vestibulum commodo neque in iaculis lobortis. Nullam sit amet placerat sapien. Pellentesque sollicitudin, nulla quis efficitur feugiat</div>
    <div class="line"></div>
    <div class="text-sec sec-right">Lorem ipsum dolor sit amet, consectetur adipiscing elit..</div>
    <div class="year">Now</div>
</div>
</div>

您需要使用节类遍历每个 div。

$(window).on('load scroll', function() {
var $e = $('#timeline .section');
$e.removeClass("active")
console.log($e)
$e.each(function(index){

        var $window = $(window);

var docViewTop = $window.scrollTop();
var docViewBottom = docViewTop + 20 + $window.height();
var elemTop = $e.eq(index).offset().top;
var elemBottom = elemTop + $e.eq(index).height();
if (elemTop > docViewTop && elemBottom < docViewBottom){
        $e.eq(index).addClass("active");
  }
  });
});

jsfiddle

关于javascript - onScroll 通过在屏幕上可见将类添加到 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43205355/

相关文章:

javascript - jquery BlockUI 错误

javascript - 第一个 li 项的 Jquery 点击事件

javascript - 为什么多次调用 consumers.py 中的事件处理函数,然后强行终止 web-socket 连接?

javascript - 这是查看是否在 javascript 中使用 php 设置 2 个 cookie 的有效方法

javascript - 当 id 未知时,在动态生成的选择框中选择选项

javascript - 当我点击打印按钮时隐藏 <td>

html - 具有相关单位以确保第 508 节/WCAG 2.0 AA 级兼容性是否重要?

Javascript从ajax函数传递变量

javascript - 有没有办法让父Link排除一些子元素?

jquery ui 自动完成事件计时