Scroll UI(fixed, sticky)

양은지·2023년 3월 30일
0

JavaScript

목록 보기
25/31

fixed, sticky

<body style="height: 2000px;">
    <div class="box">
        <span class="text">lorem ipsum</span>
        <img class="image" src="#">
    </div>
</body>
.box {
    background: grey;
    height: 1000px;
    margin-top: 200px;
}
.text {
    float: left;
    width: 40%;
}
.image {
    float: right;
    width: 50%;
    position: sticky;
    top: 100px;
}
  • 개체를 화면 특정 위치에 고정시키기 위해 position: fixed or position: sticky를 사용할 수 있다
  • fixed: 브라우저 기준으로 항상 지정된 위치에 고정시켜 준다
  • sticky: 기본적으로 부모 개체에 종속되어 위치하나 좌표 조건에 해당하는 경우 그 위치에 고정되며, 부모 개체 밖으로는 벗어나지 않아 부모 개체 바운더리에 맞닿는 지점에서 위치 고정은 해제된다(예를 들어 스크롤 다운 시 sticky 개체가 부모 개체를 벗어나게 될 경우 sticky 해제)
    - (참고) sticky 속성은 고정 조건으로 좌표 속성과 함께 적용되어야 한다

수식 활용하여 스크롤 UI 구축

window.addEventListener('scroll', function() {
    var scroll_posy = this.window.scrollY;
    console.log(scroll_posy); 
    var scroll_arr = [
        {'name': 'card1', 'start': 3940, 'end': 4400}, 
        {'name': 'card2', 'start': 4440, 'end': 4900},
        {'name': 'card3', 'start': 4940, 'end': 5400},];

    for ( var i = 0; i < scroll_arr.length; i++ ) {
        var y = (-1/460) * scroll_posy + (scroll_arr[i].end/460);
        var scale = (-0.1/460) * scroll_posy + ((scroll_arr[i].start*0.1+460)/460);
        
        this.document.querySelectorAll('.card-box')[i].style.opacity = y;
        this.document.querySelectorAll('.card-box')[i].style.transform = `scale(${scale})`;
    }
});
  • 위와 같이 스크롤 이벤트를 줄 때 transition과 같은 효과를 주기 위해서는 변하는 속석 값(여기서는 opacity, scale)에 수식을 활용한 변수를 적용하는 방법이 있다
  • 1차 함수를 이용하여 스크롤 변화 값에 따라 속성 값이 비례하여 변하는 a, b 값을 찾아 수식으로 선언해주어 사용한다
profile
eunji yang

0개의 댓글