>웹 프론트엔드 >CSS 튜토리얼 >동적 크기의 상위 요소 내에서 요소의 스크롤 범위를 제한하는 방법은 무엇입니까?

동적 크기의 상위 요소 내에서 요소의 스크롤 범위를 제한하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-17 21:52:01304검색

How to Limit Scrolling Range of an Element Within a Dynamically-Sized Parent Element?

세로 스크롤 요소에 대한 CSS 높이 제한 구현

대화형 인터페이스에서 요소의 스크롤 동작을 제어하는 ​​것은 사용자 경험과 접근성. 그러한 시나리오 중 하나는 동적으로 크기가 조정된 상위 요소 내에서 요소의 스크롤 범위를 제한하는 것입니다.

문제:
함께 이동하는 스크롤 가능한 지도 DIV가 있는 레이아웃을 고려해보세요. 고정된 사이드바와의 정렬을 유지하면서 사용자의 수직 스크롤. 그러나 지도의 스크롤이 뷰포트 높이를 초과하여 무한정 확장되어 사용자가 페이지 바닥글에 액세스할 수 없게 됩니다.

해결책:
이 문제를 해결하고 지도의 스크롤을 제한하려면 다음을 수행할 수 있습니다. CSS 및 JavaScript 기술을 활용합니다.

먼저 다음을 사용하여 지도 DIV에 대한 CSS 높이 제한을 정의합니다. "최대 높이" 속성. 이는 지도가 도달할 수 있는 최대 높이를 설정하여 상위 요소의 높이를 초과할 수 없도록 합니다.

</p>
<h1>map {</h1>
<p>max-height: 500px; <br>}<br>

다음으로 JavaScript를 사용하여 사용자의 스크롤 위치를 추적하고 이에 따라 지도의 위치를 ​​조정합니다. jQuery의 ".animate()" 메소드를 사용하는 대신 성능상의 이유로 직접적인 CSS 조작을 선택합니다.

<br>$(window).scroll(function() {<br> var scrollVal = $(this).scrollTop();<br> if (scrollVal > $("#sidebar").offset().top) {</p>
<pre class="brush:php;toolbar:false">$("#map").css({
  marginTop: (scrollVal - $("#sidebar").offset().top) + "px"
});

} else {

$("#map").css({
  marginTop: "0px"
});

}
});

이 코드에서는 다음을 계산합니다. 스크롤 위치와 사이드바 오프셋 상단 사이의 차이로 인해 사이드바 내에서 지도의 스크롤 범위가 효과적으로 제한됩니다. 높이.

대체 접근 방식:

일부 시나리오에서는 대체 접근 방식이 선호될 수 있습니다. 예를 들어 지도 요소의 높이가 고정되어 있고 사이드바가 동적으로 확장되는 경우 계산을 단순화할 수 있습니다.

<br>$(window).scroll(function() {<br> var scrollVal = $(this).scrollTop();<br> if (scrollVal > $(".header").height()) {</p>
<pre class="brush:php;toolbar:false">$("#map").css({
  position: "fixed",
  top: "0px"
});

} else {

$("#map").css({
  position: "static"
});

}
});

이 경우에는 고정된 높이로 유지된다고 가정하여 헤더의 높이를 참조점으로 삼습니다. 스크롤 위치가 헤더 높이를 초과하면 지도 위치를 뷰포트 상단으로 고정합니다. 이 접근 방식을 사용하면 뷰포트 높이 내에서 지도가 적절한 시간에 스크롤되어 표시됩니다.

위 내용은 동적 크기의 상위 요소 내에서 요소의 스크롤 범위를 제한하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.