Blazor에서 요소에 초점 맞추기
·
1분 읽기
Available in:
한국어
·
English
·
Español
·
Français
·
Deutsch
·
Português
·
日本語
·
Русский
·
中文
·
العربية
·
हिन्दी
·
Polski
·
Türkçe
·
Bahasa Indonesia
·
Nederlands
최근에 했던 Wordlzor 게임을 작업한 후, 매우 간단한 기능을 추가해야 했습니다. 즉, 게임에 들어갈 때 전체 게임에 집중해야 했습니다.
사용자가 화면 키보드를 사용할 뿐만 아니라 실제로 게임에 입력할 수 있기 때문에 이 작업이 필요했습니다.
자바스크립트 파일
이를 위해서는 함수를 담을 app.js라는 Javascript 파일을 생성해야 합니다.
window.FocusElement = (element) => {
element.focus();
};
그런 다음 index.html 파일에 스크립트를 포함해야 합니다.
<script src="js/app.js"></script>
Blazor 구성 요소
스크립트를 초기화한 후에는 집중할 요소를 찾아야 하므로 모든 구성 요소에서 해당 요소를 개체에 참조해야 합니다.
따라서 Blazor 구성 요소에 @ref 속성:
<div @ref=@elementToFocus tabindex="0" >
This is my focus component
</div>
그런 다음 구성 요소 논리에서 속성을 ElementReference로 가질 수 있습니다.
/// <summary>
/// Reference to element
/// </summary>
private ElementReference elementToFocus;
JSInterop 주입
이제 Javascript 파일에 있는 함수를 호출하려면 JSInterop를 사용해야 합니다.
우선 다음 구문을 사용하여 구성 요소에 주입해야 합니다.
[Inject]
public IJSRuntime JSRuntime { get; set; }
서비스가 주입되면 이제 InvokeVoidAsync와 같은 모든 메서드를 호출할 수 있습니다. 이 메서드는 함수를 호출합니다.
public async Task Focus()
{
// Focus when initializing
await JSRuntime.InvokeVoidAsync("window.FocusElement", elementToFocus);
}
그리고 함수 Focus()를 호출하면 우리가 만든 요소에 초점을 맞추게 됩니다. 분명히 요소 자체를 매개변수로 리팩토링하고 전달할 수 있습니다.
제가 어떻게 구현했는지 보고 싶으시면 Wordlzor 소스 코드를 보시면 됩니다. 명령어 모달을 닫을 때 경고와 포커스에 사용했습니다.