맨 위로 돌아가기
12874 단어 htmlcssbeginnersjavascript
콘텐츠가 많은 페이지가 있다고 가정해 보겠습니다. 페이지 하단의 닫기
</body>
태그 앞에 더미 콘텐츠가 있는 간단한 버튼을 만듭니다(나중에 스타일 지정). 또한 버튼에 대한 스크립트 파일을 만들고 버튼 바로 아래에 있는 링크를 만들어 봅시다.<button class="button-to-top" type="button">To Top!</button>
<script src="script.js"></script>
</body>
.js 파일에서 버튼을 작동시키려면 먼저
document.querySelector
를 사용하여 버튼을 선택하고, 클릭 시 상단으로 스크롤을 트리거하는 이벤트 리스너를 추가하고, 스크롤을 수행하는 함수를 작성해야 합니다.// Selecting a button by its class
const buttonToTop = document.querySelector('.button-to-top');
// Scrolling function
const goToTop = () => {
scrollTo(top);
}
// Executing scrolling function on click
buttonToTop.addEventListener('click', goToTop);
scrollTo()는 Window 전역 객체의 메서드이며 페이지 절대 좌표(0,0) 또는 옵션(상단)을 포함할 수 있습니다
지금은 기본이 작동해야 합니다. 이 규칙을 CSS 파일에 추가하여 빠르게 스크롤을 부드럽게 만들어 보겠습니다.
html {
scroll-behavior: smooth;
}
버튼의 스타일을 지정하는 방법은 무수히 많습니다. 저는 버튼을 둥글고 반투명하게 만들고 싶고 버튼이 나타나고 사라지는 전환 효과도 만들고 싶습니다. 또한 왼쪽 하단 모서리에 고정되어 있어야 하며 추가 클래스
.hidden
가 필요합니다..button-to-top {
position: fixed;
right: 20px;
bottom: 20px;
width: 60px;
height: 60px;
border-radius: 50%;
border: 1px solid rgba(255, 255, 255, .9);
color: #fff;
background: #333;
box-shadow: 3px 3px 2px 0 rgba(0, 0, 0, .5);
opacity: .8;
font-size: 25px;
transition: all 300ms;
cursor: pointer;
}
.button-to-top:hover {
opacity: .95;
}
.button-to-top_hidden {
visibility: hidden;
opacity: 0;
}
버튼 텍스트도 '⯅' 기호로 변경했습니다. 원하는 대로 모든 것을 수정할 수 있습니다. 예를 들어 텍스트에 SVG 또는 FontAwesome을 사용할 수 있습니다. 현재 버튼은 다음과 같습니다.

스크립트로 다시 작업해 봅시다. 페이지 상단에 있을 때 버튼이 사라지고 조금 아래로 스크롤하면 표시되는 버튼이 필요합니다. 이를 위해 이번에는 브라우저 창 자체에 JavaScript로 또 다른 이벤트 리스너를 추가해야 합니다. 따라서 스크롤이 발생하고 문서 상단에서 200픽셀 아래에 있을 때 버튼이 표시되어야 합니다. 기본적으로 버튼에
.hidden
클래스를 추가하여 이를 수행하고 있으며 JS에서 제거할 것입니다.<button class="button-to-top button-to-top_hidden" type="button">
⯅
</button>
const buttonToTop = document.querySelector('.button-to-top');
const goToTop = () => {
scrollTo(top);
};
const showToTopButton = () => {
if (
document.body.scrollTop > 200 ||
document.documentElement.scrollTop > 200
) {
buttonToTop.classList.remove('button-to-top_hidden');
} else {
buttonToTop.classList.add('button-to-top_hidden');
}
};
buttonToTop.addEventListener('click', goToTop);
window.addEventListener('scroll', showToTopButton);
그리고 그것은 작동합니다!
하지만 이제 최적화에 대해 조금 이야기해 보겠습니다.
다음과 같이
console.log
함수에 약간의 showToTopButton
를 추가해 보겠습니다.const showToTopButton = () => {
console.log('scrolling');
// ...
그런 다음 페이지를 연 다음 잠시 스크롤을 시도하고 개발자 콘솔을 보면 다음과 같은 내용이 표시됩니다.

그리고 그것은 많은 함수 호출입니다! 여기서 중요하지는 않지만 최적화된 동작은 아닙니다. 고맙게도 이에 대한 해결책이 있으며 여기에서 우리의 도우미는 Lodash library 입니다.
다양한 방법으로 프로젝트에 추가할 수 있습니다(다운로드 또는 npm 사용). CDN 링크를 사용하여 HTML 파일의 스크립트 앞에 배치하겠습니다.
<button class="button-to-top button-to-top_hidden" type="button">
⯅
</button>
<script
src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js">
</script>
<script src="totop.js"></script>
Lodash에는 스로틀과 디바운스라는 두 가지 모듈이 있습니다. 그들이 하는 일은 지정된 시간에 한 번만 실행되는 함수를 만드는 것입니다. 스로틀부터 시작하겠습니다.
window.addEventListener('scroll', _.throttle(() =>
showToTopButton(), 200));
"_"는 모든 Lodash 메서드를 보유하는 개체입니다. 지금은
showToTopButton
함수가 200ms에 한 번만 호출되도록 구성했습니다. 콘솔을 봅시다.
확실히 낫습니다! Debounce는 비슷한 방식으로 작동하지만(자세한 내용은 공식 문서를 참조할 수 있음), 우리의 경우 스크롤을 중지한 후 200ms 후에만 함수가 실행됩니다.
window.addEventListener('scroll', _.debounce(() =>
showToTopButton(), 200));
개인적으로 이 경우에는 디바운스를 선호합니다.
그리고 그것이 제가 오늘 공유하고 싶었던 전부입니다!
읽어 주셔서 감사합니다! 게시물의 피드백과 공유는 매우 감사합니다! Twitter @ cat__logic에서 저를 찾을 수 있습니다.
Benjamin Davies의 배경
Reference
이 문제에 관하여(맨 위로 돌아가기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/catlogic/back-to-back-to-top-4oi4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)