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