LVRS Storyboard Frame
components/control/WheelScrollGuard.svx
Path: components/control/WheelScrollGuard.svx
WheelScrollGuard
위치: qml/components/control/util/WheelScrollGuard.qml
WheelScrollGuard는 휠 델타를 의도된 내부 플릭 가능 항목으로 라우팅하고 선택적으로 이벤트를 소비합니다.
목적
- 내부 스크롤 표면과 외부 스크롤 표면 사이에 중첩된 스크롤 블리드를 방지합니다.
- 휠 델타 입력을 한계가 설정된
contentY업데이트로 변환합니다.
API
targetFlickable(contentY,contentHeight,height를 노출해야 함)consumeInside(기본값true)fallbackStep(기본값Theme.gap20)wheelRouted(wheelEvent, delta, previousContentY, nextContentY)신호
사용법
import LVRS 1.0 as LV
LV.WheelScrollGuard {
anchors.fill: parent
targetFlickable: innerFlick
consumeInside: true
}
동작 원리
- 내부
EventListener트리거wheel를 사용합니다. - 포인터 포인트가 대상 플릭 가능한 범위 내에 있는 경우에만 이벤트를 라우팅합니다.
- 델타 소스 우선순위:
pixelDelta.y->angleDelta.y는fallbackStep로 변환됩니다. - 한계가 설정된
contentY업데이트(0..maxContentY)를 적용하고wheelRouted를 내보냅니다.
고급 예: 패시브 라우팅 모드
import LVRS 1.0 as LV
LV.WheelScrollGuard {
targetFlickable: editorFlick
consumeInside: false
}
이 모드는 휠 델타를 라우팅하지만 이벤트 수락을 강제하지는 않습니다.
FAQ
Q. 휠 스크롤이 여전히 외부 컨테이너에 영향을 미치는 이유는 무엇입니까? A. consumeInside를 확인하세요. false인 경우 이벤트 전파가 의도적으로 허용됩니다.
Q. 휠 이벤트가 발생해도 왜 움직이지 않나요? A. 대상이 유효한 contentHeight, height를 노출하고 현재 스크롤 가능한 오버플로가 있는지 확인합니다.
검증 체크리스트
- 포인터 내부 감지는 중첩된 변환 아래에 올바르게 매핑됩니다.
- 델타 변환은 마우스와 터치패드 전체에서 일관되게 작동합니다.
- 한계가 설정된 스크롤은 콘텐츠 제한을 초과하는 것을 방지합니다.