blockly > IFocusableNode

IFocusableNode 인터페이스

입력 포커스를 가질 수 있는 모든 항목을 나타냅니다.

서명:

export interface IFocusableNode 

메서드

메서드 설명
canBeFocused()

이 노드가 포커스를 허용하는지 여부를 나타냅니다. 이 메서드가 false를 반환하면 다른 IFocusableNode 메서드는 호출되지 않습니다.

특정 환경 조건이 이 노드의 DOM 요소의 포커스 가능성에 영향을 줄 수 있으므로 (예: 요소에 양수 또는 0 tabindex가 있는지) 노드의 수명 동안 이 함수의 반환 값을 동적으로 변경하는 경우 특별히 주의해야 합니다. 또한 노드가 포커스를 보유하는 동안 true에서 false 값으로 변경하면 노드의 현재 포커스나 FocusManager의 내부 상태가 즉시 변경되지 않으므로 포커스가 해제될 때 노드의 일부 함수가 나중에 호출될 수 있습니다 (이전에 포커스가 있을 때 포커스 가능으로 간주되었기 때문).

구현은 포커스 고려사항을 위해 이 노드를 건너뛰어야 하는 상황이 없는 한 일반적으로 항상 여기서 true를 반환해야 합니다. 예로는 사용 중지됨, 읽기 전용, 순전히 시각적 장식, 이 인터페이스를 구현해야 하는 시각적 표현이 없는 노드 (예: 상위 인터페이스가 확장하기 때문에)가 있습니다. 노드에 포커스를 지정할 수 있는지 여부를 결정할 때는 접근성 권장사항을 염두에 두세요. 사용 중지되고 읽기 전용인 요소도 사용자에게 조직 컨텍스트를 제공하는 데 여전히 관련이 있는 경우가 많기 때문입니다 (특히 스크린 리더를 사용하는 경우).

getFocusableElement()

포커스를 수신하도록 명시적으로 요청할 수 있는 DOM 요소를 반환합니다.

중요: 이 요소는 현재 포커스 상태 (예: 흐려짐, 적극적으로 포커스됨, 소극적으로 포커스됨)에 따라 명시적으로 포커스가 지정되고 스타일이 변경되므로 페이지에 시각적으로 표시되어야 합니다. 요소에는 두 가지 스타일 중 하나가 연결됩니다 (스타일이 없으면 흐리게 표시되거나 포커스가 없음을 나타냄). - blocklyActiveFocus - blocklyPassiveFocus

반환된 요소에는 유효한 ID가 지정되어 있어야 하며 이 ID는 전체 페이지에서 고유해야 합니다. 적절한 고유 ID가 없으면 한 노드에 포커스를 설정하려고 할 때 (예: 마우스 클릭을 통해) FocusManager가 실제로 동일한 ID를 가진 다른 노드에 포커스를 설정할 수 있습니다.

반환된 요소는 FocusManager.focusNode() 또는 FocusManager.focusTree()를 통해 노드에 포커스가 지정되는 경우 표시되어야 합니다. onNodeFocus()가 호출될 때까지 요소가 숨겨지거나 onNodeBlur() 호출로 숨겨지는 것은 허용됩니다.

실제로 반환된 요소는 노드의 수명 기간 동안 변경되지 않을 것으로 예상됩니다. 즉, 속성은 변경될 수 있지만 새 요소는 반환되지 않아야 합니다. 또한 반환된 요소의 tabindex는 이 노드와 FocusManager의 수명 주기 전반에 걸쳐 덮어쓰여집니다.

노드가 FocusManager를 통해 먼저 포커스가 지정되지 않고 직접 포커스가 지정될 수 있어야 하는 경우 자체 탭 색인을 설정해야 합니다.

getFocusableTree() 이 노드의 가장 가까운 상위 트리를 반환합니다 (트리에 하위 트리가 별도로 있는 경우). 이 노드가 속한 트리를 나타냅니다.
onNodeBlur()

이 노드가 활성 포커스를 잃을 때 호출됩니다. 여전히 수동 포커스가 있을 수 있습니다.

이는 onNodeFocus()와 동일한 구현 제한사항이 있습니다.

onNodeFocus()

이 노드가 활성 포커스를 수신할 때 호출됩니다.

구현에서 공개 범위 수정자를 변경해도 되지만 다음은 피해야 합니다. - 렌더러나 드로어를 통해 DOM 요소를 생성하거나 삭제 - DOM focus() 호출 또는 FocusManager를 통해 포커스에 영향을 미침