스크롤 할 때 탐색에서 현재 섹션이 올바르게 강조 표시되지 않음

아담

앵커 링크가있는 탐색이있는 긴 페이지를 만들고 있습니다. 페이지를 아래로 스크롤하면 탐색의 해당 링크가 현재있는 섹션과 일치하도록 강조 표시됩니다.

잘 작동하지만 탐색에 앵커 링크가없는 페이지 섹션도 있습니다. 문제는이 섹션을 추가하면 섹션 순서가 손상되어 올바른 선택된 상태가 손상된다는 것입니다.

여기에 예제를 보여주는 코드 펜이 있습니다. http://codepen.io/anon/pen/jEdKBp- '새 섹션'으로 스크롤하면 탐색의 '소유권 주장'링크가 강조 표시됩니다. 이는 잘못된 것입니다!

현재 링크 만 강조 표시되도록하려면 어떻게해야합니까?

내 코드는 다음과 같습니다.

HTML

    <nav id="prod-menu">
  <div class="wrapper">
      <ul>
        <li><a href="#features">Features</a></li>
        <li><a href="#claims">Claims</a></li>
        <li><a href="#guides">Guides</a></li>
        <li><a href="#reviews">Reviews</a></li>
        <li><a href="#faq">FAQs</a></li>
      </ul>
  </div>
</nav> 


<section class="prod-hero"></section>

<div class="wrapper">

    <section class="tile js-panel pad0">        

        <section id="features" class="prod-panels"> 
            <h2>Features</h2>
        </section>

  <section class="prod-panels"> 
            <h2>New section</h2>
    <p>I do not want this section to appear in the nav</p>
        </section>

        <section id="claims" class="prod-panels">   
            <h2>Claims</h2>
        </section>

        <section id="guides" class="prod-panels">   
            <h2>Guides</h2>
        </section>

        <section id="reviews" class="prod-panels">  
            <h2>Reviews</h2>
        </section>

        <section id="faq" class="prod-panels">  
            <h2>FAQs</h2>
        </section>

    </section>
</div>

jQuery

var homeH = $( window ).height(),
    pH = [];
pH.push("0"); 

// create array with panel heights
for (var s=1; s<5; s++) { 
  var po = $(".js-panel section:nth-child("+s+")").position();
  pH.push( Math.round(po.top) );
};

$( window ).scroll(function() {      

  // toggle top menu selection
  for (var i=0;i<6;i++) {
    if ( $( window ).scrollTop() > pH[i]+900 ) { 
      $("#prod-menu ul li").removeClass("sel");
      $("#prod-menu ul li:nth-child("+(i+1)+")").addClass("sel");
     }
  };

});
데이브

나는 이것도 찌르기로 결정했다. 나는 유연성을 염두에두고 이와 같은 것에 접근하고 가능한 한 하드 코딩 된 값을 제거하고 동적 페이지 흐름을 고려하는 것을 좋아합니다. 내 포크에서는 상단 탐색에 연결하려는 패널의 클래스를 사용하는 대신 href 및 패널 ID를 사용하여 해당 일치가 암시하는 링크를 활용합니다.

var navPanels = $();
$('#prod-menu a').each(function() {
    navPanels = navPanels.add($(this.hash));    // easy array of nav panels according to nav items
});

이 방법을 사용하면 추가 클래스없이 탐색 항목과 패널을 간단히 추가하거나 뺄 수 있습니다. 또한 스택에서 그 위에있는 다른 요소로 인해 오프셋이 변경되어 높이가 변경되거나 이동하는 경우 스크롤 할 때 처음부터 offset (). top 값의 배열이 일치하지 않으므로 스크롤시 확인됩니다. 오프셋 검사는 다음과 같습니다.

navPanels.each(function() {
    var $p = $(this)    // current panel in loop

    if ( $( window ).scrollTop() + $('#prod-menu').outerHeight() >= $p.offset().top) { 
        $("#prod-menu ul li").removeClass("sel");
        $('#prod-menu a').filter('[href="#'+$p.attr('id')+'"]').parent().addClass("sel");
    }
});

또한 스크립트 전체에서 상단 탐색 높이를 고려하여 섹션이 상단 탐색 아래에서 시작하는보기 가능 영역을지나 스크롤 할 때 탐색 항목이 강조 표시되도록합니다.

이 접근 방식이 수행하지 않는 것은 탐색에 표시하지 않으려는 섹션에 대한 강조 표시를 제거하는 것입니다. 대신 강조 표시되기 전에 탐색을 떠나는 것입니다.

이것은 전체 JS입니다.

$(function() {
    var homeH = $( window ).height(),
        navPanels = $();

    $('#prod-menu a').each(function() {
        navPanels = navPanels.add($(this.hash));    // easy array of nav panels according to nav items
    });

    $( window ).scroll(function() {
        // toggle top menu
        if ( $( window ).scrollTop() < homeH/2) {
            $("#prod-menu ul li").removeClass("sel");
            $("#prod-menu").css("top", ($('#prod-menu').outerHeight()*-1));
        } 
        else {
            $("#prod-menu").css("top", "0");
        };

        // toggle top menu selection
        navPanels.each(function() {
            var $p = $(this)    // current panel in loop

            if ( $( window ).scrollTop() + $('#prod-menu').outerHeight() >= $p.offset().top) { 
                $("#prod-menu ul li").removeClass("sel");
                $('#prod-menu a').filter('[href="#'+$p.attr('id')+'"]').parent().addClass("sel");
            }
        });
    });

    // animating anchor link scrolling
    // snippet from css-tricks 
    // css-tricks.com/snippets/jquery/smooth-scrolling
    $("a[href*=#]:not([href=#])").click(function() {
        if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
            var target = $(this.hash);
            target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
            if (target.length) {
                $('html,body').animate({
                    scrollTop: target.offset().top-$('#prod-menu').outerHeight()
                }, 700);
                return false;
            }
        }
    });
});

전체 펜은 여기 : http://codepen.io/anon/pen/MYNmbb

편집 : 나는 지루해서 이것을 확장하기로 결정했습니다. 내비게이션에없는 섹션으로 스크롤 할 때 내비게이션의 강조 표시가 해제되도록하려면 "상단 메뉴 선택 전환"기능을 다음과 같이 변경하여 볼 수있는 영역을 기준으로 패널 하단을 확인합니다.

// toggle top menu selection
navPanels.each(function() {
    var $p = $(this)    // current panel in loop
    var viewTop = $( window ).scrollTop() + $('#prod-menu').outerHeight();
    if (viewTop  >= $p.offset().top) {
        $("#prod-menu ul li").removeClass("sel");
        if ($p.offset().top + $p.outerHeight() > viewTop) { 
            $('#prod-menu a').filter('[href="#'+$p.attr('id')+'"]').parent().addClass("sel");
        }
    }
});

그런 다음 내비게이션에없는 섹션으로 스크롤하면 내비게이션의 다른 섹션을 클릭 할 때까지 아무 것도 강조 표시되지 않습니다.

다시 말하지만 전체 Pen은 http://codepen.io/anon/pen/emqWEW에서 볼 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

현재 페이지에있을 때 탐색 모음에서 링크 강조 표시

분류에서Dev

데이터베이스에서 쿼리 할 때 문자열이 올바르게 표시되지 않음

분류에서Dev

크기를 조정할 때 반응 형 탐색 모음에 모든 옵션이 표시되지 않음

분류에서Dev

작업 표시 줄에서 최대화 할 때 Chrome이 올바르게 표시되지 않음

분류에서Dev

십진수로 배율을 조정할 때 이미지가 올바르게 표시되지 않음

분류에서Dev

부트 스트랩 탐색 모음이 태블릿에서 올바르게 표시되지 않음

분류에서Dev

현재 메뉴 항목 강조 표시가 올바르게 온라인으로 강조 표시되지 않음

분류에서Dev

iOS에서 UITableView를 스크롤 할 때 cellForRowAtIndexPath가 셀을 올바르게 표시하지 않습니다.

분류에서Dev

Excel 양식 컨트롤 텍스트 크기 조정-양식 컨트롤에서 텍스트 편집을 클릭 할 때 강조 표시되지 않음

분류에서Dev

탐색 모음에서 기본 페이지 현재 메뉴 강조 표시

분류에서Dev

Segue를 내비게이션 컨트롤러로 드래그 할 때 액세서리 액션 섹션이 표시되지 않음

분류에서Dev

매크로를 통해 정의 할 때 특성 구현이 올바르게 추론되지 않음

분류에서Dev

페이지를 아래로 스크롤 할 때 탐색 링크 강조

분류에서Dev

빠르게 스크롤 할 때 ListView에 이미지가로드되지 않음

분류에서Dev

Firefox에서 javascript를 사용할 때 html 데이터 속성이 예상대로 표시되지 않지만 크롬에서는 올바르게 표시됨

분류에서Dev

UITableView를 스크롤 할 때 셀이 강조 표시되지 않도록하는 방법

분류에서Dev

각도 재질에서 사이드 네비게이션과 툴바를 함께 사용할 때 페이지가 스크롤되지 않음

분류에서Dev

지침에 넣을 때 모달이 올바르게 표시되지 않음

분류에서Dev

현재 선택된 옵션이 올바르게 표시되지 않음

분류에서Dev

웹 사이트에 처음 접속할 때 자바 스크립트가 메뉴를 강조하지 않음

분류에서Dev

결함이있는 각 섹션으로 스크롤 할 때 메뉴 항목이 강조 표시됨

분류에서Dev

UICollectionView를 위아래로 스크롤 할 때 뷰 높이 제약 조건이 올바르게 설정되지 않았습니다.

분류에서Dev

요소를 빠르게 클릭 할 때 강조 표시되지 않음

분류에서Dev

스크롤시 현재 섹션 강조 표시-섹션 간 간격

분류에서Dev

선택한 링크 클래스가 inet 탐색기에서 올바르게 표시되지 않음

분류에서Dev

Firefox에서 부트 스트랩 열이 올바르게 표시되지 않음

분류에서Dev

Windows PowerShell에서 node.js 스크립트를 실행할 때 인수 이스케이프가 올바르게 해석되지 않음

분류에서Dev

Excel에서 시간이 올바르게 표시되지 않음

분류에서Dev

기록에서 다시 탐색 할 때 스크롤 애니메이션이 트리거되지 않도록 방지

Related 관련 기사

  1. 1

    현재 페이지에있을 때 탐색 모음에서 링크 강조 표시

  2. 2

    데이터베이스에서 쿼리 할 때 문자열이 올바르게 표시되지 않음

  3. 3

    크기를 조정할 때 반응 형 탐색 모음에 모든 옵션이 표시되지 않음

  4. 4

    작업 표시 줄에서 최대화 할 때 Chrome이 올바르게 표시되지 않음

  5. 5

    십진수로 배율을 조정할 때 이미지가 올바르게 표시되지 않음

  6. 6

    부트 스트랩 탐색 모음이 태블릿에서 올바르게 표시되지 않음

  7. 7

    현재 메뉴 항목 강조 표시가 올바르게 온라인으로 강조 표시되지 않음

  8. 8

    iOS에서 UITableView를 스크롤 할 때 cellForRowAtIndexPath가 셀을 올바르게 표시하지 않습니다.

  9. 9

    Excel 양식 컨트롤 텍스트 크기 조정-양식 컨트롤에서 텍스트 편집을 클릭 할 때 강조 표시되지 않음

  10. 10

    탐색 모음에서 기본 페이지 현재 메뉴 강조 표시

  11. 11

    Segue를 내비게이션 컨트롤러로 드래그 할 때 액세서리 액션 섹션이 표시되지 않음

  12. 12

    매크로를 통해 정의 할 때 특성 구현이 올바르게 추론되지 않음

  13. 13

    페이지를 아래로 스크롤 할 때 탐색 링크 강조

  14. 14

    빠르게 스크롤 할 때 ListView에 이미지가로드되지 않음

  15. 15

    Firefox에서 javascript를 사용할 때 html 데이터 속성이 예상대로 표시되지 않지만 크롬에서는 올바르게 표시됨

  16. 16

    UITableView를 스크롤 할 때 셀이 강조 표시되지 않도록하는 방법

  17. 17

    각도 재질에서 사이드 네비게이션과 툴바를 함께 사용할 때 페이지가 스크롤되지 않음

  18. 18

    지침에 넣을 때 모달이 올바르게 표시되지 않음

  19. 19

    현재 선택된 옵션이 올바르게 표시되지 않음

  20. 20

    웹 사이트에 처음 접속할 때 자바 스크립트가 메뉴를 강조하지 않음

  21. 21

    결함이있는 각 섹션으로 스크롤 할 때 메뉴 항목이 강조 표시됨

  22. 22

    UICollectionView를 위아래로 스크롤 할 때 뷰 높이 제약 조건이 올바르게 설정되지 않았습니다.

  23. 23

    요소를 빠르게 클릭 할 때 강조 표시되지 않음

  24. 24

    스크롤시 현재 섹션 강조 표시-섹션 간 간격

  25. 25

    선택한 링크 클래스가 inet 탐색기에서 올바르게 표시되지 않음

  26. 26

    Firefox에서 부트 스트랩 열이 올바르게 표시되지 않음

  27. 27

    Windows PowerShell에서 node.js 스크립트를 실행할 때 인수 이스케이프가 올바르게 해석되지 않음

  28. 28

    Excel에서 시간이 올바르게 표시되지 않음

  29. 29

    기록에서 다시 탐색 할 때 스크롤 애니메이션이 트리거되지 않도록 방지

뜨겁다태그

보관