摘要:移動的實質(zhì)則是切換焦點,所以我們需要去理解什么焦點。元素能夠被聚焦的元素,比如接下來我們需要了解一下屬性,這個很重要,沒有它實現(xiàn)不了焦點管理。
在開發(fā)TV web 應(yīng)用時,發(fā)現(xiàn)在交互方式上和傳統(tǒng)web開發(fā)很不一樣。PC上的頁面上都是通過鼠標(biāo)進行交互,而TV則不同,它是通過遙控器按鍵進行交互,它有點擊、移動(上下左右)、返回、主頁等操作。
移動的實質(zhì)則是切換焦點,所以我們需要去理解什么焦點。
focusable元素: 能夠被聚焦的元素,比如 button?、 input
接下來我們需要了解一下 tabindex?屬性,這個很重要,沒有它實現(xiàn)不了焦點管理。
Tab Index根據(jù)?HTML5?規(guī)范,屬性 tabindex?定義了元素是否可以聚焦。
也就是說如果一個元素聲明了 tabindex="0"? ,那么這個元素就允許聚焦了。
<div tabindex="0">div>
tabindex?的值有一些規(guī)則,我們接下來看一看。
它的值必須是一個整數(shù)(Integer),包括正整數(shù)、負整數(shù)、0。
如果該屬性值為負整數(shù),瀏覽器必須允許該元素可被聚焦,但,不能允許它被連續(xù)聚焦導(dǎo)航觸及。
連續(xù)聚焦導(dǎo)航: 通過鍵盤進行連續(xù)導(dǎo)航,比如 tab?鍵
舉個具體例子,在chrome下,給一個 div?設(shè)置 tabindex="-1"
<div id="test" tabindex="-1" >div>
如果使用 tab?鍵進行焦點切換,這個div是選不中的,如果使用 focus?事件,是可以選中的。
document.getElementById("test").focus()
0
如果該屬性值為 0,瀏覽器必須允許該元素可聚焦,允許該元素可被連續(xù)聚焦導(dǎo)航觸及,遵循平臺(platform)約定去判定該元素的相對順序。
也就是說不論通過鍵盤(tab鍵),還是 focus?事件,都可以選中元素。
正整數(shù)如果該屬性值為正整數(shù),瀏覽器必須允許該元素可聚焦,允許該元素可被連續(xù)聚焦導(dǎo)航觸及,應(yīng)該安排該元素在連續(xù)聚焦導(dǎo)航中的順序
在0和正整數(shù)中出現(xiàn)了導(dǎo)航順序這個概念,那這又是什么呢?
導(dǎo)航順序導(dǎo)航順序,使用tab鍵進行焦點切換的順序。
根據(jù)HTML5文檔來看,假設(shè)有一個元素設(shè)置了tabindex,且屬性值為正整數(shù),那元素排序具體有以下幾個規(guī)則:
在任何tabindex屬性被忽略或?qū)ζ渲到馕龊蠓祷匾粋€錯誤的可聚焦元素之前
在任何tabindex屬性值小于等于零的可聚焦元素之前
在任何tabindex屬性值大于零,小于該元素的tabindex值的元素之后,
在任何tabindex屬性值等于該元素的tabindex值且在文檔的樹順序(#tree order)中比該元素靠前的元素之后,
在任何tabindex屬性值等于該元素的tabindex值且在文檔的樹順序(#tree order)中比該元素靠后的元素之前,
在任何tabindex屬性值大于該元素的tabindex值的元素之前。
我根據(jù)規(guī)范在chrome中進行了測試,順序在chrome中簡單來說就是:
導(dǎo)航順序以從小到大的順序,正序排列,?0?特殊,始終在最后面。(e.g. [1, 2, 3, 4, 5, 6, ..., 0]?)
負整數(shù)不在導(dǎo)航順序之中
如果屬性值一樣,那就依據(jù)在文檔流中的順序進行排列(0和正整數(shù)都適用)
默認的聚焦元素HTML5規(guī)定,有一些元素默認是聚焦元素
具有href屬性的a元素
具有href屬性的link元素
沒有被禁用(#disabled)的button元素
type屬性不為隱藏(#Hidden)狀態(tài)且沒有被禁用的input元素
沒有被禁用的select元素
沒有被禁用的textarea元素
沒有disabled屬性的command元素
設(shè)有draggable屬性的元素,如果有可能user agent允許用戶使用非指針設(shè)備進行拖拽操作的
編輯宿主(#Editing hosts)
瀏覽上下文容器(#Browsing context containers)
另外,每一個由area元素生成的形狀都應(yīng)該為可聚焦元素。除非平臺約定有不同的描述。
我在chrome下測試了幾個元素,發(fā)現(xiàn)實現(xiàn)和規(guī)范還是有一些出入。比如:具有href屬性的link元素,不能被聚焦。
焦點使用場景TV,遙控器操作
無障礙訪問網(wǎng)站
表單輸入框自動切換
……
其它對焦點元素的樣式控制,使用的是?:focus?選擇器。
在chrome控制臺中,使用 focus?事件無效,因為不是用戶真實的行為,會被瀏覽器攔截
通過合理的利用默認焦點元素和 tabindex?,就可以實現(xiàn)對web頁面的焦點控制。
參考資料HTML5規(guī)范-focus
HTML5規(guī)范-聚焦
說說focus/focusin/focusout/blur事件
html-focus.md
HTML4-give focus to an element
why HTML elements can receive focus");
鍵盤導(dǎo)航的JavaScript組件
關(guān)于focus的一些事
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/7201.html
摘要:元素中的焦點管理焦點元素表單元素或者等以及如何查看當(dāng)前焦點元素返回當(dāng)前頁面中獲得焦點的元素,也就是說,如果此時用戶按下了鍵盤上某個鍵,會在該元素上觸發(fā)鍵盤事件。使用定義的新屬性,可以讓元素自動獲得焦點。 DOM 元素中的焦點管理 1. 焦點元素 表單元素(input、select 或者 textarea 等) 以及 document.body 2. 如何查看當(dāng)前焦點元素 documen...
摘要:元素中的焦點管理焦點元素表單元素或者等以及如何查看當(dāng)前焦點元素返回當(dāng)前頁面中獲得焦點的元素,也就是說,如果此時用戶按下了鍵盤上某個鍵,會在該元素上觸發(fā)鍵盤事件。使用定義的新屬性,可以讓元素自動獲得焦點。 DOM 元素中的焦點管理 1. 焦點元素 表單元素(input、select 或者 textarea 等) 以及 document.body 2. 如何查看當(dāng)前焦點元素 documen...
摘要:元素中的焦點管理焦點元素表單元素或者等以及如何查看當(dāng)前焦點元素返回當(dāng)前頁面中獲得焦點的元素,也就是說,如果此時用戶按下了鍵盤上某個鍵,會在該元素上觸發(fā)鍵盤事件。使用定義的新屬性,可以讓元素自動獲得焦點。 DOM 元素中的焦點管理 1. 焦點元素 表單元素(input、select 或者 textarea 等) 以及 document.body 2. 如何查看當(dāng)前焦點元素 documen...
摘要:擴展為了實現(xiàn)更多的功能,會有一些標(biāo)準(zhǔn)或?qū)S械臄U展。標(biāo)準(zhǔn)擴展主要有選擇符元素遍歷一選擇符選擇符能夠允許代碼直接根據(jù)選擇符選擇與某個模式匹配的元素。 DOM擴展 為了實現(xiàn)更多的功能,會有一些標(biāo)準(zhǔn)或?qū)S械腄OM擴展。 標(biāo)準(zhǔn)擴展主要有: SelectorAPI(選擇符API) HTML5 Element Traversal(元素遍歷) 一、 選擇符API 選擇符API能夠允許J...
閱讀 1322·2021-11-24 09:38
閱讀 3261·2021-11-22 12:03
閱讀 4183·2021-11-11 10:59
閱讀 2324·2021-09-28 09:36
閱讀 1037·2021-09-09 09:32
閱讀 3424·2021-08-05 10:00
閱讀 2535·2021-07-23 15:30
閱讀 2979·2019-08-30 13:12