В настоящее время я создаю пользовательскую библиотеку веб-компонентов с помощью Svelte.
Я закончил выпадающий компонент select-options, который может принимать вложенное содержимое с временными интервалами для включения опций выпадающего меню. Он работает без каких-либо известных проблем для пользователей мыши и будет реализован следующим образом:
<custom-select label="My Custom Select Element">
<custom-option value="1">Option 1</custom-option>
<custom-option value="2">Option 2</custom-option>
<custom-option value="3">Option 3</custom-option>
</custom-select>
Сейчас я работаю над доступностью компонента, и мне нужно реализовать «фокус-ловушку». Не вдаваясь в различные способы реализации фокусировки ловушек, я пытаюсь выполнить простой тест по назначению фокусировки одному из элементов с прорезями из родительского компонента. Все элементы в слотах имеют tabindex = "0", и я могу без проблем просматривать их.
Я могу успешно "схватить" элемент, который хочу сфокусировать, используя привязки в Svelte. Хотя вы не можете поместить директиву привязки непосредственно в элемент слота (вы можете разместить атрибуты в слоте), я смог привязать родительский тег span следующим образом:
<span bind:this={slotObj}>
<slot />
</span>
Затем Я могу развернуть связанного родителя с помощью некоторого JavaScript и назначить выделенные элементы в объект с именем 'options':
let slot = slotObj.children[0];
options = slot.assignedElements();
Если бы я должен был консоль записать первый элемент в объекте параметров, я будет видеть ожидаемое:
console.log(options[0]); // <custom-option value="1">Option 1</custom-option>
Я также могу успешно изменить атрибуты элементов в объекте параметров и увидеть изменения в DOM. Таким образом, нет никаких проблем, когда дело доходит до «захвата» выделенного элемента и изменения его атрибутов. Однако следующее не будет работать из родительского компонента для фокусировки выделенного элемента:
options[0].focus();
Это не выдает никаких ошибок, оно просто ничего не делает, что я могу DISCERN. Как уже упоминалось, я могу переключаться между параметрами, поэтому они могут получать фокус в обычном сценарии вкладок. Мне кажется, что только через JavaScript я не могу назначить фокус.
Любые советы и / или общие рекомендации Svelte c при работе с пользовательскими веб-элементами и слот-контентом будут высоко оценены. Большое спасибо.