javascript - 检测部分当前在滚动上是否可见

标签 javascript jquery

我正在尝试根据当前部分进行某种导航。

我的代码如下:

$(function() {
    'use strict';

    function setTitle(title) {
        $('.overlay').text(title);
    }

    function removeTitle() {
        $('.overlay').text('');
    }

    $(window).on('scroll', function() {
        let windowScroll = $(window).scrollTop(),
            sections = $('section[data-title]');

        sections.each(function() {
            let thisStart = $(this).offset().top,
                thisHeight = $(this).outerHeight(true),
                thisTitle = $(this).attr('data-title'),
                thisEnd = thisHeight + thisStart;

            console.log(`start: ${thisStart}, end: ${thisEnd}, scroll: ${windowScroll}`);

            if(windowScroll >= thisStart && windowScroll < thisEnd) {
                setTitle(thisTitle);
            } else {
                removeTitle();
            }
        });
    });
});

HTML

<section class="section section-first"></section>
<section class="section section-what" data-title="First">
</section>
<section class="section section-cv" data-title="Secound">
</section>
<div class="overlay"></div>

不幸的是,它仅适用于最后一个 .section。我能做什么?

请参阅我的 CodePen 以了解我的确切意思:http://codepen.io/tomekbuszewski/pen/Xmovwq

最佳答案

在此处添加return false;:

if(windowScroll >= thisStart && windowScroll < thisEnd) {
    setTitle(thisTitle);
    return false;        // <- add this
} else {
    removeTitle();
}

这将突破 each 方法并防止标题设置后被删除。

CodePen

关于javascript - 检测部分当前在滚动上是否可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33714407/

相关文章:

javascript - 打开模态窗口时如何使背景模糊

javascript - Sweetalert AJAX 失败

javascript - 如何使用angularjs仅在数据库中的日期选择器中显示日期

javascript - Angular js使用checked()而不是indexof()作为复选框

javascript - 基于动态 bool Angular 显示div

javascript - 将utf8内容 append 到html中

javascript - 事件和函数之间的区别?

javascript - JavaScript 数字中的“e”

jquery - 使用javascript设置溢出滚动

javascript - 如何更改使用 jquery 克隆的元素名称