class값으로 해당 섹션 스크롤 구현하기
본문
페이지 우측에 고정되어 있는 서브 메뉴입니다.
현재 상황상 html소스에 id값을 부여할 수 없고 a태그 사용이 어려워
class명을 넣어 컨트롤 해야 하는 상황인데요,,
클릭했을때 저 메뉴에 on이 켜지면서 해당 섹션으로 이동해야 합니다.
eq를 사용해서 for문을 돌리면 된다고 하는데 어떻게 짜야할지 감이 안옵니다.ㅠㅠ
현재 sctNav에 on class추가하는 것까지는 했는데 해당 섹션에 스크롤을 넣어야 하는데 어떻게 짜면 좋을까요?
메뉴 소스
<div class="acfIntNav">
<ul>
<li class="sctNav on"><a href="javascript:;">메뉴1</a></li>
<li class="sctNav"><a href="javascript:;">메뉴2</a></li>
<li class="sctNav"><a href="javascript:;">메뉴3</a></li>
<li class="sctNav"><a href="javascript:;">메뉴4</a></li>
<li class="sctNav"><a href="javascript:;">메뉴5</a></li>
</ul>
</div>
이동해야할 섹션
<div class="sctCnt"></div>
<div class="sctCnt"></div>
<div class="sctCnt"></div>
현재 js코드
for (let i = 0; i < $('.sctNav').length; i++) {
$('.sctNav').eq(i).click(function(){ // i번째 탭버튼 클릭 시
$('li').removeClass("on");
$(this).addClass("on");
});
}
!-->!-->!-->
답변 2
<style>
.acfIntNav {
background-color: f5f5f5;
position: fixed;
right: 0;
}
.acfIntNav ul {
list-style-type: none;
width: 10em;
padding: 0;
margin: 0;
}
.acfIntNav ul li.sctNav {
text-align: right;
}
.acfIntNav ul li.sctNav a {
text-decoration: none;
color: #aaa;
display: inline-block;
font-weight: bold;
padding: 0 0.4em 0 1em;
margin: 0.2em 0;
border-radius: 1em;
}
.acfIntNav ul li.sctNav a::after {
content: 'ㆍ';
font-size: 1.5em;
vertical-align: middle;
}
.acfIntNav ul li.sctNav.on a {
background-color: #333;
color: #eee;
}
.sctCnt {
height: 100em;
}
</style>
<div class="acfIntNav">
<ul>
<li class="sctNav on"><a href="javascript:;">메뉴1</a></li>
<li class="sctNav"><a href="javascript:;">메뉴2</a></li>
<li class="sctNav"><a href="javascript:;">메뉴3</a></li>
<li class="sctNav"><a href="javascript:;">메뉴4</a></li>
<li class="sctNav"><a href="javascript:;">메뉴5</a></li>
</ul>
</div>
<div class="sctCnt">1</div>
<div class="sctCnt">2</div>
<div class="sctCnt">3</div>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
for (let i = 0; i < $('.sctNav').length; i++) {
$('.sctNav').eq(i).click(function(){ // i번째 탭버튼 클릭 시
$('li').removeClass("on");
$(this).addClass("on");
if ($('.sctCnt').eq(i).get(0) != null) {
let top = $('.sctCnt').eq(i).offset().top;
// $(document).scrollTop(top);
$('body').animate({scrollTop: top});
}
});
}
</script>
참고를 해보시겠어요?
for (let i = 0; i < $('.sctNav').length; i++) {
$('.sctNav').eq(i).click(function(){ // i번째 탭버튼 클릭 시
$('li').removeClass("on");
$(this).addClass("on");
let targetSection = $('.sctCnt').eq(i); // i번째 섹션을 가져옴
let scrollTo = targetSection.offset().top; // 해당 섹션의 상단 위치
$('html, body').animate({ scrollTop: scrollTo }, 500); // 스크롤 이동 애니메이션
});
}
답변을 작성하시기 전에 로그인 해주세요.