HTML 的 tabindex 屬性開發過程中一般不會使用到,最近開發中有個需求兼顧富交互,便總結了一下。本篇文章同時收錄在我的【前端知識點】中,Github鏈接請點擊閱讀原文直達,歡迎 Star
兼容性:Safari不支持!
在我們日常使用網頁的過程中,可以通過鍵盤控制一些元素的聚焦,從而達到便捷訪問的目的
element 分為 focusable 和 非focusable ,如果使用了tabindex就可以改變相關的行為
在HTML中有6個元素默認支持聚焦:
以上的元素默認都可以使用 Tab 鍵,以及 JS focus() 方法聚焦
document.querySelector("a").focus();
使用 tab鍵 進行聚焦元素時,聚焦的順序等于元素在代碼中的出現先后順序,當我們進行富交互優化時,就需要用到 tabindex 這個屬性來幫助我們進行更好用戶體驗的優化了
①元素是否能聚焦:通過鍵盤這類輸入設備,或者通過 JS focus() 方法
②元素什么時候能聚焦:在用戶通過鍵盤與頁面交互時
通俗來說:就是當用戶使用鍵盤時,tabindex用來定位html元素,即使用tab鍵時焦點的順序。
tabindex理論上可以使用在幾乎所有元素上
tabindex 有三個值:0,-N(通常是-1),N(正值)
tabindex 決定聚焦順序
// HTML
<button type="button" tabindex="1">tabindex === 1</button>
<button type="button" tabindex="999">tabindex === 999</button>
<button type="button" tabindex="0">tabindex === 0</button>
// HTML
<button type="button" tabindex="0">tabindex === 0</button>
<button type="button" tabindex="1">tabindex === 1</button>
<button type="button" tabindex="999">tabindex === 999</button>
<button type="button" tabindex="0">tabindex === 0</button>
tabindex 決定是否聚焦
// HTML
<button type="button">未設置tabindex</button>
<button type="button" tabindex="-1">tabindex === -1</button>
<button type="button" tabindex="0">tabindex === 0</button>
<button type="button" tabindex="1">tabindex === 1</button>
tabindex 與JS編程聚焦
// HTML
<button type="button" @click="clickBtn()">點擊讓DIV聚焦</button>
<div id="FocusDiv" ref="FocusDiv" tabindex="-1">這是一個div</div>
// JS
clickBtn: function() {
document.getElementById('FocusDiv').focus();
}
針對自定義標簽進行富交互優化
針對特定節點禁止聚焦操作
復雜列表控制聚焦順序
局屬性是任何元素都可以設置的屬性,即便有一些元素使用了該屬性不會引起什么變化。
元素特有的屬性叫做局部屬性,該屬性是元素特有的。
該屬性設置鍵盤焦點快捷鍵,使用方式是 Alt + 屬性值 。以下的例子使用 input 元素,設置鍵盤焦點快捷鍵 Alt + a 定位到姓名輸入框,使用 Alt + p 定位到密碼輸入框。
<!DOCTYPE html>
<html>
<head>
<title>小白學HTML</title>
</head>
<body>
<div>
賬號:<input type="text" accesskey="a"/>
</div>
<div>
密碼:<input type="password" accesskey="p"/>
</div>
</body>
</html>
使用時注意:如果和其他軟件的快捷鍵沖突,可能會無效。
該屬性設置元素類型名,可以設置多個,用空格分開。結合CSS使用,可以設置元素的外觀樣式。例如:
<div class="style1">
賬號:<input type="text" accesskey="a"/>
</div>
<div class="style1 style2 style3">
密碼:<input type="password" accesskey="p"/>
</div>
第一個div元素使用 style1 類型樣式。第二個div元素同時使用 style1、 style2、 style3 類型樣式。
設置元素是否可編輯,當屬性值設置為 true 時,焦點到元素上時,可修改文本內容。
<p contenteditable='true'>這是一段可編輯的文字</p>
屬性值使用的是單引號,以前的示例都是使用的雙引號,在HTML中兩種形式都可以。
對于值是 true 或 false 的屬性來說,將值設置成 true 還有一種簡寫形式,就是只有屬性名,那么屬性值就會被瀏覽器解析成 true。以下示例具有同樣的效果:
<p contenteditable>這是一段可編輯的文字</p>
屬性值設置的如果不是 true 和 false ,而是其他不合法的值,有些瀏覽器會解析成 false 來對待,不允許編輯。
右鍵菜單屬性,目前沒有瀏覽器支持。大概率會和瀏覽器本身的右鍵菜單沖突吧。
設置文字方向,有效值有 ltr 和 rtl,分別表示從左到右和從右到左。
兩個是HTML5中所支持的拖拽屬性。
隱藏元素屬性,bool值。使用此屬性的元素,一般來說不會在html文檔中顯示。另一個隱藏方式是在 style 屬性中設置 display:none,在html文檔中可以看到此元素,但是不會顯示在瀏覽器中。
元素的唯一標識符。也常常用來和css結合使用,選擇指定的外觀樣式。
id還可以用來定位文檔中的位置(#號加id)。
設置元素語言,例如 lang="en" 。
元素是否進行拼寫檢查,只有在可編輯的元素上才有意義。bool值。
直接在元素上設置CSS樣式。
設置 tab 鍵的選擇順序,整數值。
提供鼠標懸浮提示值。
TML 屬性
HTML 標簽可以擁有屬性。屬性提供了有關 HTML 元素的更多的信息。
屬性總是以名稱/值對的形式出現,比如:name="value"。
屬性總是在 HTML 元素的開始標簽中規定。
屬性實例
HTML 鏈接由 <a> 標簽定義。鏈接的地址在 href 屬性中指定:
[demo]
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<a >
This is a link</a>
</body>
</html>
[/demo]
更多 HTML 屬性實例
屬性例子 1:
<h1> 定義標題的開始。
<h1 align="center"> 擁有關于對齊方式的附加信息。
[demo]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<h1 align="center">This is heading 1</h1>
<p>上面的標題在頁面中進行了居中排列。上面的標題在頁面中進行了居中排列。上面的標題在頁面中進行了居中排列。</p>
</body>
</html>
[/demo]
屬性例子 2:
<body> 定義 HTML 文檔的主體。
<body bgcolor="yellow"> 擁有關于背景顏色的附加信息。
[demo]
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html />
<meta http-equiv="Content-Language" content="zh-cn" />
</head>
<body bgcolor="yellow">
<h2>請看: 改變了顏色的背景。</h2>
</body>
</html>
[/demo]
屬性例子 3:
<table> 定義 HTML 表格。(您將在稍后的章節學習到更多有關 HTML 表格的內容)
<table border="1"> 擁有關于表格邊框的附加信息。
HTML 提示:使用小寫屬性
屬性和屬性值對大小寫不敏感。
不過,萬維網聯盟在其 HTML 4 推薦標準中推薦小寫的屬性/屬性值。
而新版本的 (X)HTML 要求使用小寫屬性。
始終為屬性值加引號
屬性值應該始終被包括在引號內。雙引號是最常用的,不過使用單引號也沒有問題。
在某些個別的情況下,比如屬性值本身就含有雙引號,那么您必須使用單引號,例如:
name='Bill "HelloWorld" Gates'
下面列出了適用于大多數 HTML 元素的屬性:
屬性 值 描述
class classname 規定元素的類名(classname)
id id 規定元素的唯一 id
style style_definition 規定元素的行內樣式(inline style)
title text 規定元素的額外信息(可在工具提示中顯示)
HTML 全局屬性
HTML 屬性賦予元素意義和語境。
下面的全局屬性可用于任何 HTML 元素。
HTML 全局屬性
屬性 描述
accesskey 規定激活元素的快捷鍵。
class 規定元素的一個或多個類名(引用樣式表中的類)。
contenteditable 規定元素內容是否可編輯。
contextmenu 規定元素的上下文菜單。上下文菜單在用戶點擊元素時顯示。
data-* 用于存儲頁面或應用程序的私有定制數據。
dir 規定元素中內容的文本方向。
draggable 規定元素是否可拖動。
dropzone 規定在拖動被拖動數據時是否進行復制、移動或鏈接。
hidden 規定元素仍未或不再相關。
id 規定元素的唯一 id。
lang 規定元素內容的語言。
spellcheck 規定是否對元素進行拼寫和語法檢查。
style 規定元素的行內 CSS 樣式。
tabindex 規定元素的 tab 鍵次序。
title 規定有關元素的額外信息。
translate 規定是否應該翻譯元素內容。
HTML 事件屬性
Window 事件屬性
針對 window 對象觸發的事件(應用到 <body> 標簽):
屬性 值 描述
onafterprint script 文檔打印之后運行的腳本。
onbeforeprint script 文檔打印之前運行的腳本。
onbeforeunload script 文檔卸載之前運行的腳本。
onerror script 在錯誤發生時運行的腳本。
onhaschange script 當文檔已改變時運行的腳本。
onload script 頁面結束加載之后觸發。
onmessage script 在消息被觸發時運行的腳本。
onoffline script 當文檔離線時運行的腳本。
ononline script 當文檔上線時運行的腳本。
onpagehide script 當窗口隱藏時運行的腳本。
onpageshow script 當窗口成為可見時運行的腳本。
onpopstate script 當窗口歷史記錄改變時運行的腳本。
onredo script 當文檔執行撤銷(redo)時運行的腳本。
onresize script 當瀏覽器窗口被調整大小時觸發。
onstorage script 在 Web Storage 區域更新后運行的腳本。
onundo script 在文檔執行 undo 時運行的腳本。
onunload script 一旦頁面已下載時觸發(或者瀏覽器窗口已被關閉)。
Form 事件
由 HTML 表單內的動作觸發的事件(應用到幾乎所有 HTML 元素,但最常用在 form 元素中):
屬性 值 描述
onblur script 元素失去焦點時運行的腳本。
onchange script 在元素值被改變時運行的腳本。
oncontextmenu script 當上下文菜單被觸發時運行的腳本。
onfocus script 當元素失去焦點時運行的腳本。
onformchange script 在表單改變時運行的腳本。
onforminput script 當表單獲得用戶輸入時運行的腳本。
oninput script 當元素獲得用戶輸入時運行的腳本。
oninvalid script 當元素無效時運行的腳本。
onreset script 當表單中的重置按鈕被點擊時觸發。HTML5 中不支持。
onselect script 在元素中文本被選中后觸發。
onsubmit script 在提交表單時觸發。
Keyboard 事件
屬性 值 描述
onkeydown script 在用戶按下按鍵時觸發。
onkeypress script 在用戶敲擊按鈕時觸發。
onkeyup script 當用戶釋放按鍵時觸發。
Mouse 事件
由鼠標或類似用戶動作觸發的事件:
屬性 值 描述
onclick script 元素上發生鼠標點擊時觸發。
ondblclick script 元素上發生鼠標雙擊時觸發。
ondrag script 元素被拖動時運行的腳本。
ondragend script 在拖動操作末端運行的腳本。
ondragenter script 當元素元素已被拖動到有效拖放區域時運行的腳本。
ondragleave script 當元素離開有效拖放目標時運行的腳本。
ondragover script 當元素在有效拖放目標上正在被拖動時運行的腳本。
ondragstart script 在拖動操作開端運行的腳本。
ondrop script 當被拖元素正在被拖放時運行的腳本。
onmousedown script 當元素上按下鼠標按鈕時觸發。
onmousemove script 當鼠標指針移動到元素上時觸發。
onmouseout script 當鼠標指針移出元素時觸發。
onmouseover script 當鼠標指針移動到元素上時觸發。
onmouseup script 當在元素上釋放鼠標按鈕時觸發。
onmousewheel script 當鼠標滾輪正在被滾動時運行的腳本。
onscroll script 當元素滾動條被滾動時運行的腳本。
Media 事件
由媒介(比如視頻、圖像和音頻)觸發的事件(適用于所有 HTML 元素,但常見于媒介元素中,比如 <audio>、<embed>、<img>、<object> 以及 <video>):
屬性 值 描述
onabort script 在退出時運行的腳本。
oncanplay script 當文件就緒可以開始播放時運行的腳本(緩沖已足夠開始時)。
oncanplaythrough script 當媒介能夠無需因緩沖而停止即可播放至結尾時運行的腳本。
ondurationchange script 當媒介長度改變時運行的腳本。
onemptied script 當發生故障并且文件突然不可用時運行的腳本(比如連接意外斷開時)。
onended script 當媒介已到達結尾時運行的腳本(可發送類似“感謝觀看”之類的消息)。
onerror script 當在文件加載期間發生錯誤時運行的腳本。
onloadeddata script 當媒介數據已加載時運行的腳本。
onloadedmetadata script 當元數據(比如分辨率和時長)被加載時運行的腳本。
onloadstart script 在文件開始加載且未實際加載任何數據前運行的腳本。
onpause script 當媒介被用戶或程序暫停時運行的腳本。
onplay script 當媒介已就緒可以開始播放時運行的腳本。
onplaying script 當媒介已開始播放時運行的腳本。
onprogress script 當瀏覽器正在獲取媒介數據時運行的腳本。
onratechange script 每當回放速率改變時運行的腳本(比如當用戶切換到慢動作或快進模式)。
onreadystatechange script 每當就緒狀態改變時運行的腳本(就緒狀態監測媒介數據的狀態)。
onseeked script 當 seeking 屬性設置為 false(指示定位已結束)時運行的腳本。
onseeking script 當 seeking 屬性設置為 true(指示定位是活動的)時運行的腳本。
onstalled script 在瀏覽器不論何種原因未能取回媒介數據時運行的腳本。
onsuspend script 在媒介數據完全加載之前不論何種原因終止取回媒介數據時運行的腳本。
ontimeupdate script 當播放位置改變時(比如當用戶快進到媒介中一個不同的位置時)運行的腳本。
onvolumechange script 每當音量改變時(包括將音量設置為靜音)時運行的腳本。
onwaiting script 當媒介已停止播放但打算繼續播放時(比如當媒介暫停已緩沖更多數據)運行腳本
*請認真填寫需求信息,我們會在24小時內與您取得聯系。