워드프레스 Divi 메뉴가 미디엄처럼 작동하도록 만들기

Last Updated: 2023년 07월 17일 댓글

미디엄(Medium)에서 글을 읽을 때 아래로 스크롤할 때에는 상단의 메뉴(헤더) 부분이 표시되지 않다가 마우스를 위로 스크롤하면 메뉴 부분이 표시됩니다. 미디엄처럼 Divi 테마에서 아래로 스크롤할 때 메뉴를 표시하고 위로 스크롤할 때 메뉴를 숨기고 싶은 경우 이 글에서 제시하는 코드를 활용할 수 있습니다.

워드프레스 Divi 메뉴가 미디엄처럼 작동하도록 만들기

미디엄 글을 하나 보면서 테스트해보면 어떻게 작동하는지 보다 잘 이해할 것입니다. 가령 이 미디엄 글에서 마우스를 아래로 스크롤하면 헤더가 표시되지 않지만 글 중간에 위로 이동하기 위해 마우스를 위로 스크롤하면 메뉴 부분이 표시됩니다. (업데이트: 이제 더 이상 미디엄에서 이와 같이 작동하지 않습니다.)

Medium처럼 위아래 스크롤에 따라 헤더 숨기기/표시하기에서 미디엄처럼 구현하는 방법이 설명되어 있습니다. Elegant Themes의 Divi 테마(현재 이 블로그에 사용되고 있음)에서도 동일한 기능을 구현할 수 있습니다. 다음과 같은 방법으로 Divi에서 아래로 스크롤하면 헤더를 숨기고 위로 스크롤하면 헤더를 표시되도록 할 수 있습니다.

먼저 Divi > 테마 옵션 > 일반으로 이동하여 맨 아래의 사용자 맞춤 CSS에 다음 CSS 코드를 추가합니다.

/**
* 헤더 스타일 - Header Styles
*/
#main-header {
-webkit-transition: all 0.2s;
-moz-transition: all 0.2s;
transition: all 0.2s;
}

#main-header.invisible {
opacity: 0;
top: -1000% !important;
}

.et-fixed-header#main-header {
opacity: 0;
}

#main-header.detached {
position: fixed !important;
top: 0;
opacity: 1 !important;
}

그리고 다음 jQuery 코드를 추가하도록 합니다. Divi 테마에서 자바스크립트/jQuery를 삽입하는 방법은 이 글을 참고해보시기 바랍니다.

<script type="text/javascript">
$(document).ready(function() {

/**
* Menu Hide
*/
var previousScroll = 0, // previous scroll position, 이전 스크롤 위치
menuOffset = 60, // height of menu (once scroll passed it, menu is hidden), 메뉴 높이
detachPoint = 650, // point of detach (after scroll passed it, menu is fixed), 분리 위치
hideShowOffset = 6; // scrolling value after which triggers hide/show menu

/**
* on scroll hide/show menu, 스크롤 시 메뉴 숨기기/표시
*/
$(window).scroll(function() {
if (!$('#main-header').hasClass('expanded')) {
var currentScroll = $(this).scrollTop(), // gets current scroll position
scrollDifference = Math.abs(currentScroll - previousScroll); // calculates how fast user is scrolling

// if scrolled past menu
if (currentScroll > menuOffset) {
// if scrolled past detach point add class to fix menu
if (currentScroll > detachPoint) {
if (!$('#main-header').hasClass('detached'))
$('#main-header').addClass('detached');
}

// if scrolling faster than hideShowOffset hide/show menu
if (scrollDifference >= hideShowOffset) {
if (currentScroll > previousScroll) {
// scrolling down; hide menu
if (!$('#main-header').hasClass('invisible'))
$('#main-header').addClass('invisible');
} else {
// scrolling up; show menu
if ($('#main-header').hasClass('invisible'))
$('#main-header').removeClass('invisible');
}
}
} else {
// only remove “detached” class if user is at the top of document (menu jump fix)
if (currentScroll <= 0){
$('#main-header').removeClass();
}
}

// if user is at the bottom of document show menu, 사용자가 문서의 맨 아래에 도달하면 메뉴 표시
if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) {
$('#main-header').removeClass('invisible');
}

// replace previous scroll position with new one, 이전 스크롤 위치를 새로운 위치로 바꿈
previousScroll = currentScroll;
}
})

});
</script>
// Source: Adam Haworth

실제 테스트해보니 잘 작동합니다. 이처럼 아래로 스크롤할 때에는 메뉴를 숨기고 위로 스크롤할 때에는 메뉴를 표시하면 글 읽기에 더욱 집중하는 데 도움이 될 것 같습니다.

마치며

워드프레스 Divi 테마에서 마우스를 아래로 스크롤할 때 메뉴가 숨김 상태가 되고 위로 마우스를 스크롤하면 메뉴가 다시 표시되도록 하는 방법에 대하여 살펴보았습니다.

워드프레스에서는 뉴스페이퍼와 GeneratePress와 같은 일부 테마에서 이와 같이 작동하도록 하는 옵션에 제공됩니다.

참고:


댓글 남기기

Leave a Comment