亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

自定義虛擬鍵盤開(kāi)發(fā)實(shí)戰(zhàn):焦點(diǎn)管理、事件綁定與觸摸屏適配全指南

自定義虛擬鍵盤開(kāi)發(fā)實(shí)戰(zhàn):焦點(diǎn)管理、事件綁定與觸摸屏適配全指南 做自定義虛擬鍵盤這個(gè)需求聽(tīng)起來(lái)特別直接屏幕上擺幾個(gè)按鍵點(diǎn)擊就往輸入框里懟字符完事。但我最早在觸摸屏一體機(jī)上試水的時(shí)候光焦點(diǎn)這一個(gè)問(wèn)題就折騰了一周——每點(diǎn)一下鍵盤輸入框就失焦用戶辛辛苦苦輸?shù)揭话氲膬?nèi)容直接斷在中間。后來(lái)才明白虛擬鍵盤真正的難度根本不在畫按鍵而在于它要把自己偽裝成一套完整的輸入系統(tǒng)去對(duì)接頁(yè)面原有的輸入邏輯還不能喧賓奪主。這篇文章是我?guī)状螌?shí)操下來(lái)的一次完整復(fù)盤內(nèi)容包括技術(shù)方案選型、事件綁定鏈路、觸摸屏適配、數(shù)據(jù)驅(qū)動(dòng)布局還有那些文檔里不會(huì)寫的坑。不管你是要在普通Web頁(yè)面里做一個(gè)可定制按鍵的軟鍵盤還是在工業(yè)觸摸屏、自助終端上做一套專屬輸入組件這份指南都能當(dāng)做一個(gè)還算靠譜的起點(diǎn)。1. 虛擬鍵盤不是改個(gè)系統(tǒng)鍵盤皮膚這么簡(jiǎn)單1.1 先劃清楚邊界系統(tǒng)鍵盤和自定義鍵盤各自管什么移動(dòng)端瀏覽器里一個(gè)input聚焦之后系統(tǒng)鍵盤自動(dòng)彈出來(lái)這是操作系統(tǒng)給出的默認(rèn)輸入方案。它體驗(yàn)好、兼容強(qiáng)但你幾乎沒(méi)法控制它按鍵長(zhǎng)什么樣、允許輸入什么字符、按下之后額外觸發(fā)什么業(yè)務(wù)邏輯全部黑盒。自定義虛擬鍵盤恰恰相反——它拿回的是輸入過(guò)程的控制權(quán)。你可以決定鍵盤上只出現(xiàn)數(shù)字和大寫字母可以讓某個(gè)按鍵按下后不僅輸入字符還聯(lián)動(dòng)查詢可以為了讓戴手套的工人也能準(zhǔn)確點(diǎn)按而把按鍵做到60px高。但代價(jià)是系統(tǒng)原本替你處理的焦點(diǎn)管理、光標(biāo)移動(dòng)、輸入法組合、撤銷棧全部要自己接一遍。這里要特別提醒一下如果不是因?yàn)榭刂茩?quán)的需求只是覺(jué)得系統(tǒng)鍵盤丑想換個(gè)皮膚那大概率不該自己開(kāi)發(fā)。改造現(xiàn)有開(kāi)源庫(kù)或者用現(xiàn)成組件改樣式成本低得多。1.2 我拆解過(guò)的三類真實(shí)需求場(chǎng)景A工業(yè)觸摸屏人機(jī)界面。某設(shè)備廠商的10寸工控屏沒(méi)有物理鍵盤操作工人需要輸入批次號(hào)、物料編碼和工號(hào)。系統(tǒng)自帶的軟鍵盤字體小、按鍵密在車間光照下幾乎看不清而且彈出來(lái)之后經(jīng)常遮住正在查看的字段。這類需求的核心不是輸入效率而是大按鍵、高對(duì)比度、穩(wěn)定可靠按鍵布局要能按客戶要求定制比如把數(shù)字和字母分區(qū)排列。場(chǎng)景B自助終端。掛號(hào)機(jī)、排隊(duì)叫號(hào)機(jī)、信息查詢機(jī)這類設(shè)備輸入范圍非常收斂通常只有數(shù)字、身份證號(hào)、手機(jī)號(hào)。業(yè)務(wù)上要求不能輸字母和特殊符號(hào)界面風(fēng)格要和整機(jī)統(tǒng)一。這類需求最重要的是輸入限制和防誤觸一個(gè)按鍵只能觸發(fā)一個(gè)明確的結(jié)果。場(chǎng)景CWeb收銀/點(diǎn)單頁(yè)面。營(yíng)業(yè)員在觸摸屏一體機(jī)上快速錄入會(huì)員手機(jī)號(hào)、折扣碼或者調(diào)用常用短語(yǔ)。這類頁(yè)面通常還需要輸完手機(jī)號(hào)自動(dòng)查詢會(huì)員這種聯(lián)動(dòng)動(dòng)作。此時(shí)自定義鍵盤的價(jià)值不只是好看而是能把業(yè)務(wù)動(dòng)作直接綁定到按鍵上縮短操作路徑。1.3 什么情況別硬上自定義鍵盤反過(guò)來(lái)也說(shuō)說(shuō)。如果需求只是手機(jī)網(wǎng)頁(yè)里想換一套自定義鍵盤我一般會(huì)勸退。原因很簡(jiǎn)單在瀏覽器里只要input聚焦系統(tǒng)鍵盤就有機(jī)會(huì)彈出來(lái)你沒(méi)有可靠手段完全阻止它——所謂的readonly方案、inputmode方案都只是在減少?gòu)棾龅母怕首霾坏?00%屏蔽。強(qiáng)行把輸入框設(shè)成只讀再靠虛擬鍵盤往里填內(nèi)容又會(huì)引入光標(biāo)模擬、選區(qū)管理、中文輸入法沖突一堆新問(wèn)題。所以我的判斷原則是鍵盤需要和系統(tǒng)輸入法長(zhǎng)期共存尤其是手機(jī)瀏覽器場(chǎng)景就別自己做鍵盤是設(shè)備上的唯一輸入入口比如工控屏、一體機(jī)、封閉Webview才值得徹底自研。2. 技術(shù)方案選型不是所有網(wǎng)頁(yè)鍵盤都長(zhǎng)一個(gè)樣2.1 四種主流落地方式對(duì)比我整理了一下自己接觸過(guò)的虛擬鍵盤實(shí)現(xiàn)路徑方案適用場(chǎng)景優(yōu)點(diǎn)缺點(diǎn)DOM CSS 渲染按鍵常規(guī)Web、觸摸屏H5、一體機(jī)Webview開(kāi)發(fā)快、樣式定制靈活、天然支持無(wú)障礙語(yǔ)義動(dòng)畫和特效能力有限性能瓶頸在DOM量級(jí)Canvas / WebGL 繪制對(duì)動(dòng)效、按鍵特效要求極高的展示型界面渲染自由度最大可以實(shí)現(xiàn)非常復(fù)雜的視覺(jué)命中測(cè)試、文字排版、焦點(diǎn)管理都要自己造維護(hù)成本高桌面端方案Electron / Python Qt等桌面應(yīng)用里的模擬鍵盤能直接和原生窗口、硬件交互可做全局熱鍵跨平臺(tái)打包體積大更新節(jié)奏受框架限制系統(tǒng)級(jí)自定義鍵盤如移動(dòng)端輸入法擴(kuò)展需要全局鍵盤替代系統(tǒng)輸入法體驗(yàn)最接近原生開(kāi)發(fā)成本高、審核門檻高、只覆蓋特定平臺(tái)2.2 為什么我的項(xiàng)目最后都回歸DOM方案我做過(guò)好幾個(gè)版本的虛擬鍵盤最早也試過(guò)Canvas方案因?yàn)橄胫凑總€(gè)按鍵都是自己畫的Canvas自由度更高。結(jié)果發(fā)現(xiàn)Canvas方案里最難處理的不是畫按鍵而是點(diǎn)按命中你需要自己維護(hù)每個(gè)按鍵的矩形坐標(biāo)處理像素比適配點(diǎn)擊后還要判斷點(diǎn)到哪個(gè)鍵。最痛苦的其實(shí)是無(wú)障礙——Canvas里的每個(gè)鍵對(duì)屏幕閱讀器來(lái)說(shuō)都是一張無(wú)聲的圖片。DOM方案完全沒(méi)有這些煩惱。每個(gè)按鍵就是一個(gè)真實(shí)的DOM節(jié)點(diǎn)天然支持:active偽類、click事件、aria-label、鍵盤事件模擬。對(duì)虛擬鍵盤這種結(jié)構(gòu)固定、交互相對(duì)簡(jiǎn)單的組件來(lái)說(shuō)DOM的性能完全夠用——我在幾百毫秒的渲染周期內(nèi)渲染幾十個(gè)按鍵沒(méi)有任何壓力。2.3 依賴與框架層面的取舍不要一上來(lái)就引入一個(gè)重型UI框架。虛擬鍵盤本質(zhì)上是一個(gè)組件如果項(xiàng)目里已經(jīng)在用某個(gè)框架那就把它做成對(duì)應(yīng)框架的組件如果是一個(gè)原生頁(yè)面原生JS加少量模板邏輯就夠了。比較推薦的做法是鍵盤核心邏輯輸入映射、焦點(diǎn)管理、布局配置保持與框架無(wú)關(guān)用純函數(shù)和普通對(duì)象實(shí)現(xiàn)UI層只做薄薄一層的綁定。這樣以后從原生遷到Vue或者從Vue遷到React底層完全不用動(dòng)只改渲染層。這個(gè)設(shè)計(jì)我吃過(guò)甜頭——有個(gè)項(xiàng)目最早是原生寫的后來(lái)要嵌入到一個(gè)React應(yīng)用里因?yàn)楹诵倪壿嫑](méi)和DOM寫在一起遷移只花了一天。3. 事件綁定與輸入映射虛擬鍵盤的核心鏈路3.1 把字符送進(jìn)輸入框的三種思路你要敲一個(gè)字符到input里說(shuō)白了就三件事定位光標(biāo)、插入文本、讓框架感知到值變化。查了下我踩過(guò)的三條路直接改input.value。最簡(jiǎn)單把舊值和字符拼起來(lái)再賦回去。但這樣會(huì)破壞瀏覽器的原生撤銷棧輸入框的光標(biāo)位置會(huì)跳到末尾而且如果輸入框是有maxlength校驗(yàn)的直接賦值可能導(dǎo)致字符被截?cái)?。不推薦作為主方案。使用document.execCommand(insertText)。老一代方案里比較靠譜的它走的是瀏覽器的編輯命令通道能保留撤銷棧。但這東西官方明確標(biāo)記過(guò)廢棄狀態(tài)在部分Webview里行為不一致新項(xiàng)目我不會(huì)再用。使用selectionStart/selectionEnd setRangeText。現(xiàn)代瀏覽器里最接近原生輸入的做法。先拿到光標(biāo)位置再用setRangeText把文本插進(jìn)去最后手動(dòng)派發(fā)一個(gè)input事件通知框架。我現(xiàn)在的推薦寫法是function insertTextAtCursor(input, text) { const start input.selectionStart; const end input.selectionEnd; input.focus(); input.setRangeText(text, start, end, end); // 給 Vue / React 等框架一個(gè)信號(hào)值變了 input.dispatchEvent(new Event(input, { bubbles: true })); }setRangeText的第四個(gè)參數(shù)傳end意思是插入后光標(biāo)定位在插入文本的后面非常順手不用自己管光標(biāo)回收。3.2 焦點(diǎn)鎖定鍵盤不能搶走輸入框的焦點(diǎn)這一點(diǎn)是很多第一次做虛擬鍵盤的人翻車的地方。點(diǎn)擊鍵盤按鍵默認(rèn)行為是會(huì)觸發(fā)一次焦點(diǎn)轉(zhuǎn)移——如果鍵盤容器可以被聚焦輸入框就失焦了下一次insertTextAtCursor就找不到目標(biāo)。解法有兩個(gè)層面第一讓鍵盤容器本身不可聚焦避免焦點(diǎn)進(jìn)來(lái)。比如給它設(shè)置tabindex-1并且不要主動(dòng)調(diào)用它的focus()。第二對(duì)pointerdown事件調(diào)用preventDefault()阻止默認(rèn)的焦點(diǎn)改變行為。注意pointerdown上阻止默認(rèn)行為會(huì)連帶阻止后續(xù)兼容性的mouse事件和click事件所以按鍵的點(diǎn)擊邏輯不能依賴click要把邏輯放到pointerup或者自己處理。keyboardElement.addEventListener(pointerdown, (e) { // 阻止焦點(diǎn)從輸入框轉(zhuǎn)移到鍵盤上 e.preventDefault(); });這個(gè)寫法的副作用是鍵盤組件本身無(wú)法通過(guò)鼠標(biāo)觸發(fā)click所以如果你同時(shí)在開(kāi)發(fā)PC端需要額外在keydown里補(bǔ)一份對(duì)回車鍵和空格鍵的支持保證只用鍵盤也能操作虛擬鍵盤。3.3 功能鍵與狀態(tài)鍵Shift、CapsLock、Backspace 的完整處理真正的虛擬鍵盤不可能只有字母和數(shù)字功能鍵的處理才是布局是否好用的關(guān)鍵。最典型的是Shift鍵。它不是一個(gè)輸入字符而是一個(gè)狀態(tài)切換器。我的做法是維護(hù)一個(gè)布局映射關(guān)系按下Shift時(shí)把當(dāng)前布局切換到上層字符同時(shí)給Shift鍵本身加一個(gè)active視覺(jué)狀態(tài)再次按下或者輸入一個(gè)字母后自動(dòng)回到小寫布局。CapsLock則是一個(gè)鎖定狀態(tài)只切換大小寫不切換按鍵位置。const LAYOUT { lower: [ [1,2,3,4,5,6,7,8,9,0], [q,w,e,r,t,y,u,i,o,p], [shift,a,s,d,f,g,h,j,k,l,backspace], [alt,z,x,c,v,b,n,m,enter], [space] ], upper: [ [!,,#,$,%,^,,*,(,)], [Q,W,E,R,T,Y,U,I,O,P], [shift,A,S,D,F,G,H,J,K,L,backspace], [alt,Z,X,C,V,B,N,M,enter], [space] ] };Backspace刪除字符這里有講究。多數(shù)人第一反應(yīng)是把value減一個(gè)字符但遇到中文、Emoji這些由多個(gè)UTF-16編碼單元組成的字符時(shí)直接按編碼單元?jiǎng)h除會(huì)把字符劈成兩半。用Array.from轉(zhuǎn)成真正的字符數(shù)組再算好邊界刪除function deletePrevChar(input) { const start input.selectionStart; const end input.selectionEnd; if (start ! end) { // 存在選區(qū)直接刪選區(qū) input.setRangeText(, start, end, end); } else if (start 0) { // 按碼點(diǎn)取最后一個(gè)字符避免拆散表情或組合字符 const codePoints Array.from(input.value.slice(0, start)); const lastChar codePoints[codePoints.length - 1]; input.setRangeText(, start - lastChar.length, start, end); } input.dispatchEvent(new Event(input, { bubbles: true })); }Enter鍵的邏輯要按場(chǎng)景區(qū)分如果鍵盤使用在表單里應(yīng)該觸發(fā)表單提交如果用在聊天窗口則應(yīng)該是換行或發(fā)送。我習(xí)慣在按鍵分發(fā)層把動(dòng)作類型定義成action不在UI層寫死。3.4 和輸入法合成事件的沖突這里要單拎出來(lái)說(shuō)因?yàn)樗娴睦_了我很久。當(dāng)用戶在真實(shí)中文輸入法狀態(tài)下點(diǎn)擊你的虛擬鍵盤時(shí)輸入法可能正處于拼音候選的合成過(guò)程中。典型癥狀是明明按的是字母鍵結(jié)果輸入法把字母組合成拼音直接蹦出繁體字或者亂碼。標(biāo)準(zhǔn)做法是監(jiān)聽(tīng)compositionstart和compositionendlet isComposing false; input.addEventListener(compositionstart, () { isComposing true; }); input.addEventListener(compositionend, () { isComposing false; }); // 在插入邏輯入口判斷 if (isComposing) { // 合成期間放棄直接插入或者把按鍵內(nèi)容保存到暫存區(qū) return; }再深入一層自定義虛擬鍵盤在設(shè)計(jì)之初就要想清楚你打算支持中文輸入嗎如果支持工作量翻倍不止——需要拼音映射、候選詞面板、多音字處理。如果不支持只是面向數(shù)字、字母、符號(hào)的錄入那就在鍵盤外層明確屏蔽中文輸入法的干擾這通常更符合工控和自助終端的實(shí)際場(chǎng)景。4. 鍵盤布局與UI細(xì)節(jié)決定好用和能用的那20%4.1 用二維數(shù)組驅(qū)動(dòng)布局渲染而不是手寫一堆按鈕我見(jiàn)過(guò)不少項(xiàng)目里鍵盤的每個(gè)按鍵都是手寫的一個(gè)button幾十個(gè)按鈕在HTML里排成一大片。一旦客戶說(shuō)把刪除鍵從第四行挪到第一行整個(gè)布局就崩了。更合理的做法是把布局抽象成數(shù)據(jù)const keyboardData [ { type: key, value: 1, label: 1 }, { type: key, value: q, label: q }, { type: function, action: backspace, label: 刪除 }, { type: function, action: shift, label: Shift } ];再寫一個(gè)純粹的渲染函數(shù)把數(shù)組變成DOM按type分發(fā)不同的樣式和行為??蛻粢牟季种恍枰臄?shù)據(jù)不需要碰代碼。這個(gè)設(shè)計(jì)對(duì)自定義虛擬鍵盤里的自定義三個(gè)字是決定性支撐——沒(méi)有數(shù)據(jù)驅(qū)動(dòng)你永遠(yuǎn)只能做一款固定的鍵盤。4.2 按鍵尺寸、間距與視覺(jué)密度尺寸這件事用數(shù)據(jù)說(shuō)話。手指觸摸的目標(biāo)最小建議是44px這是移動(dòng)端普遍接受的一個(gè)下限但在工業(yè)觸摸屏上操作者可能戴手套、車間環(huán)境有震動(dòng)我實(shí)際項(xiàng)目里都會(huì)做到至少48px甚至60px。有一個(gè)10寸屏項(xiàng)目客戶堅(jiān)持要把字體做到28px以上、按鍵間距4px實(shí)測(cè)下來(lái)誤觸率明顯下降。間距也不能太緊但也不需要太松。按鍵之間留4到8px的間隙視覺(jué)上既不會(huì)粘連又不會(huì)顯得松散。另外要考慮鍵盤總高度底部固定式鍵盤高度建議控制在屏幕的40%以內(nèi)否則會(huì)擠壓內(nèi)容區(qū)。4.3 按壓反饋虛擬鍵盤體驗(yàn)的靈魂沒(méi)有反饋的虛擬鍵盤會(huì)讓人感覺(jué)按鍵沒(méi)按下去。物理鍵盤有鍵程、有聲音觸摸屏上必須自己造出這些反饋。輕量級(jí)方案是CSS解決.key { transition: transform 0.05s ease, background-color 0.1s ease; } .key:active { transform: translateY(2px); background-color: #e8e8e8; }進(jìn)階一點(diǎn)按下去的時(shí)候用JavaScript給按鍵添加一個(gè)active類在pointerup/pointerleave時(shí)移除這樣即使手指滑出按鍵區(qū)域也不會(huì)有粘住的問(wèn)題。如果設(shè)備自帶震動(dòng)馬達(dá)還可以在pointerdown時(shí)調(diào)用navigator.vibrate(10)一個(gè)10毫秒的短震手感立刻不一樣。4.4 功能鍵的視覺(jué)狀態(tài)管理Shift按下、CapsLock開(kāi)啟按鍵本身必須給出可見(jiàn)的狀態(tài)變化。我習(xí)慣用數(shù)據(jù)傳輸狀態(tài)而不是靠臨時(shí)改樣式const keyboardState { shift: false, caps: false }; function getCurrentLayout() { const upper keyboardState.shift ! keyboardState.caps ? upper : lower; return LAYOUT[upper]; }這里有個(gè)細(xì)節(jié)Shift CapsLock組合時(shí)大小寫應(yīng)該是取反的關(guān)系。如果CapsLock是大寫鎖定再按Shift會(huì)臨時(shí)切換成小寫——和物理鍵盤行為保持一致用戶才不會(huì)有認(rèn)知錯(cuò)亂。5. 觸摸屏與移動(dòng)端從鼠標(biāo)點(diǎn)按到手指操作的距離5.1 為什么推薦用 Pointer Events 而不是 click在PC網(wǎng)頁(yè)里click事件很可靠。但在觸摸屏和移動(dòng)端click存在兩三百毫秒的延遲窗口用戶會(huì)明顯感覺(jué)到按下去沒(méi)反應(yīng)等了一下才觸發(fā)。舊時(shí)代我們靠touchstart處理但touchstart和mouse事件并存時(shí)又會(huì)觸發(fā)多次點(diǎn)擊。統(tǒng)一方案是pointerdown/pointerup。Pointer Events 把鼠標(biāo)、觸摸、筆統(tǒng)一成一種抽象pointerdown在手指觸摸時(shí)立刻觸發(fā)沒(méi)有延遲而且可以用pointerType區(qū)分是手指還是鼠標(biāo)方便做差異邏輯。實(shí)際項(xiàng)目里我把虛擬鍵盤的所有按鍵邏輯都掛在pointerup上pointerdown只負(fù)責(zé)視覺(jué)反饋和焦點(diǎn)鎖定。5.2 防止觸摸引發(fā)的頁(yè)面滾動(dòng)和縮放觸摸屏上點(diǎn)鍵盤時(shí)手指稍微一滑頁(yè)面就跟著滾動(dòng)了這個(gè)體驗(yàn)很糟糕。兩個(gè)層面的處理第一給鍵盤容器設(shè)置touch-action樣式。touch-action: manipulation表示允許平移和縮放但禁止雙擊縮放如果想徹底禁用容器內(nèi)的手勢(shì)可以用touch-action: none。第二在pointermove時(shí)判斷是否發(fā)生了明顯滑動(dòng)如果滑動(dòng)距離超過(guò)一定閾值就視為取消本次點(diǎn)擊防止用戶在按住一個(gè)鍵想滑到另一個(gè)鍵的過(guò)程中誤觸發(fā)。這是一個(gè)很細(xì)節(jié)但很實(shí)用的手感調(diào)優(yōu)點(diǎn)。5.3 系統(tǒng)鍵盤干擾移動(dòng)端最大的頭痛問(wèn)題在手機(jī)瀏覽器里做自定義虛擬鍵盤最尷尬的事情是你自己的鍵盤彈出來(lái)了系統(tǒng)鍵盤也跟著彈出來(lái)。前面說(shuō)過(guò)這塊沒(méi)有完美的方案但我實(shí)際摸索出一個(gè)折中策略在封閉Webview或一體機(jī)設(shè)備上系統(tǒng)鍵盤本來(lái)就不會(huì)出現(xiàn)直接用真實(shí)input加自定義鍵盤體驗(yàn)最好。在手機(jī)瀏覽器上如果一定要隱藏系統(tǒng)鍵盤可以把輸入框設(shè)為只讀由虛擬鍵盤直接操縱它的值。壞處是無(wú)法用selectionStart精準(zhǔn)控制光標(biāo)也無(wú)法支持輸入法合成。實(shí)測(cè)下來(lái)如果要支持光標(biāo)位置精確操作 中文輸入法 選區(qū)操作這三件事只讀方案完全扛不住如果只是數(shù)字加字母的簡(jiǎn)單輸入只讀方案勉強(qiáng)可用。所以這個(gè)難題的根本解法還是移動(dòng)端瀏覽器頁(yè)面盡量別做自定義鍵盤如果要做就接受不能完全屏蔽系統(tǒng)鍵盤的現(xiàn)實(shí)。5.4 鍵盤定位與頁(yè)面resize底部固定式鍵盤最常見(jiàn)的實(shí)現(xiàn)是position: fixed; bottom: 0。但在移動(dòng)端當(dāng)系統(tǒng)鍵盤彈出時(shí)visualViewport高度會(huì)變化鍵盤和輸入框的相對(duì)位置需要?jiǎng)討B(tài)調(diào)整。可以監(jiān)聽(tīng)visualViewport的 resize 事件實(shí)時(shí)計(jì)算鍵盤的top值把鍵盤推高到系統(tǒng)鍵盤上方如果是自己彈出的鍵盤則保持固定在底部即可。6. 焦點(diǎn)丟失、輸入重復(fù)與光標(biāo)漂移實(shí)測(cè)最常遇見(jiàn)的三個(gè)坑6.1 焦點(diǎn)丟失點(diǎn)擊一次輸入框就失焦一次在某個(gè)自助終端項(xiàng)目里用戶每點(diǎn)一個(gè)數(shù)字輸入框的光標(biāo)就消失一次。排查過(guò)程很有意思一開(kāi)始以為是我的鍵盤焦點(diǎn)問(wèn)題后來(lái)發(fā)現(xiàn)在輸入框的全局blur監(jiān)聽(tīng)里有一段來(lái)自外層框架的邏輯任何失焦都會(huì)觸發(fā)一個(gè)隱藏操作把輸入框隱藏了。要復(fù)現(xiàn)這個(gè)問(wèn)題的排查鏈路要點(diǎn)是在輸入框的blur事件里打日志確認(rèn)失焦發(fā)生的時(shí)間點(diǎn)在鍵盤pointerdown里打日志確認(rèn)事件觸發(fā)的先后順序檢查是否有全局的focus/blur代理邏輯在干擾。真正的解法還是前面說(shuō)過(guò)的鍵盤pointerdown阻止默認(rèn)行為 鍵盤容器不可聚焦。如果失焦是外層框架造成的則需要在外層框架的失焦回調(diào)里做一個(gè)焦點(diǎn)即將轉(zhuǎn)移給鍵盤的豁免判斷。6.2 輸入重復(fù)一次按鍵觸發(fā)了兩次插入這個(gè)坑主要出在手動(dòng)派發(fā)input事件 框架自己的v-model同時(shí)生效的配置里。比如Vue的v-model本身就監(jiān)聽(tīng)input事件去更新數(shù)據(jù)你又手動(dòng)派發(fā)了一次input數(shù)據(jù)更新邏輯跑了兩次屏幕上就出現(xiàn)了字符重復(fù)。解法是在派發(fā)input事件前先對(duì)值做一次比對(duì)function updateInputValue(input, newValue) { if (input.value newValue) return; // React 需要走原生 setterVue 直接賦值即可 input.value newValue; input.dispatchEvent(new Event(input, { bubbles: true })); }React 還有一個(gè)額外問(wèn)題它內(nèi)部會(huì)用一個(gè)值跟蹤器記錄輸入框當(dāng)前值直接修改input.value后派發(fā)事件React 可能認(rèn)為值沒(méi)有變化。標(biāo)準(zhǔn)技巧是const valueSetter Object.getOwnPropertyDescriptor( window.HTMLInputElement.prototype, value ).set; valueSetter.call(input, newValue); input.dispatchEvent(new Event(input, { bubbles: true }));6.3 光標(biāo)漂移輸入一個(gè)字符后光標(biāo)跳到了末尾setRangeText在多數(shù)情況下能保持光標(biāo)位置但如果你在插入之后又隨手做了一次input.value input.value text這種操作光標(biāo)必然跳到末尾。另外一個(gè)隱蔽場(chǎng)景是輸入框有maxlength限制setRangeText插入后觸發(fā)了瀏覽器的截?cái)喙鈽?biāo)位置就不在預(yù)期位置了。處理思路是每次插入之前把selectionStart/selectionEnd保存到變量里插入之后如果框架發(fā)生了重渲染再手動(dòng)恢復(fù)一次光標(biāo)位置。這個(gè)方法笨但可靠尤其在遠(yuǎn)程調(diào)試一些老Webview時(shí)特別管用。6.4 隱藏鍵盤的觸發(fā)策略虛擬鍵盤在自助終端上通常常駐但在共享屏幕上用完后要及時(shí)隱藏。我常用的觸發(fā)策略是點(diǎn)擊鍵盤之外的空白區(qū)域隱藏鍵盤輸入框blur且焦點(diǎn)沒(méi)有轉(zhuǎn)移到鍵盤本身隱藏鍵盤按Enter確認(rèn)后如果業(yè)務(wù)允許隱藏鍵盤。注意點(diǎn)擊空白區(qū)域要用pointerdown監(jiān)聽(tīng)并且要排除掉鍵盤容器本身否則每次點(diǎn)擊按鍵都會(huì)先觸發(fā)隱藏邏輯再觸發(fā)插入邏輯出現(xiàn)一種鍵盤閃一下的糟糕體驗(yàn)。7. 值得提前做好的工程化設(shè)計(jì)7.1 按鍵事件統(tǒng)一走分發(fā)器而不是散落在各個(gè)按鈕上虛擬鍵盤的按鍵種類再多歸納起來(lái)無(wú)非三類字符鍵、功能鍵、狀態(tài)鍵。我習(xí)慣把它們統(tǒng)一抽象成一個(gè)動(dòng)作分發(fā)器function dispatchKeyAction(type, payload) { switch (type) { case input: insertTextAtCursor(activeInput, payload); break; case delete: deletePrevChar(activeInput); break; case shift: keyboardState.shift !keyboardState.shift; renderLayout(); break; case enter: handleEnter(); break; default: break; } }所有按鍵在HTML層面只負(fù)責(zé)一個(gè)職責(zé)告訴分發(fā)器我是什么類型的按鍵。業(yè)務(wù)邏輯不散落在幾十個(gè)按鈕的監(jiān)聽(tīng)器里排查問(wèn)題就只需要看這一個(gè)函數(shù)。7.2 布局和按鍵行為配置化自定義虛擬鍵盤如果只是代碼層面改數(shù)組還不算真正的自定義。我后期的實(shí)現(xiàn)里布局通常是一個(gè)JSON配置業(yè)務(wù)人員可以直接改配置文件重新生成鍵盤。{ rows: [ [{label: Q, value: q, type: input}], [{label: 刪除, type: function, action: backspace}] ] }比如有的客戶要放一個(gè)快捷錄入上次訂單的按鍵只需要在配置里增加一個(gè){ type: function, action: repeatLastOrder }核心代碼只需要注冊(cè)一下這個(gè)動(dòng)作。把擴(kuò)展成本從改代碼降到改配置虛擬鍵盤才真正配得上自定義三個(gè)字。7.3 中文輸入的冷思考最后必須潑一盆冷水。如果你以為虛擬鍵盤只是把英文字母做成可以點(diǎn)擊的按鈕然后要求它支持中文輸入那工程量會(huì)瞬間爆炸拼音到漢字的映射庫(kù)、多音字處理、候選詞排序、詞庫(kù)加載隨便一個(gè)都是獨(dú)立項(xiàng)目的規(guī)模。我現(xiàn)在的判斷標(biāo)準(zhǔn)很清楚支持中文輸入的自定義鍵盤優(yōu)先考慮現(xiàn)有中文輸入法SDK或者系統(tǒng)輸入法自定義鍵盤默認(rèn)定位是受限字符集輸入工具也就是數(shù)字、拉丁字母、常用符號(hào)。這個(gè)定位能讓交付質(zhì)量和工期都保持在可控范圍。如果確實(shí)必須中文抱著一整塊工程量去做規(guī)劃和報(bào)價(jià)千萬(wàn)不要在開(kāi)發(fā)中后期臨時(shí)加需求。我的個(gè)人體會(huì)是虛擬鍵盤項(xiàng)目的成敗一半在立項(xiàng)之前的邊界劃分一半在事件鏈路的細(xì)節(jié)處理。前者決定了你是不是在做一個(gè)不可能完成的需求后者決定了做出來(lái)能不能被用戶接受。技術(shù)上高深的部分不多但每一個(gè)看起來(lái)沒(méi)什么的細(xì)節(jié)——焦點(diǎn)、光標(biāo)、事件派發(fā)、觸摸反饋——都足夠讓一個(gè)沒(méi)有經(jīng)驗(yàn)的人卡上兩三天。其實(shí)這也是我寫下這份指南的原因希望有更多人能少踩我當(dāng)年踩過(guò)的那些坑直接把精力放到真正有價(jià)值的功能設(shè)計(jì)上去。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
天天躁狠狠躁av| 国产丝袜视频| 国产乱子伦一区二区三区免看| 91亚洲图片| 人妻一区视频| 老汉网| 欧美性区| 亚洲熟伦熟妇AV无码春色| 亚洲熟女中文字幕在线| 无码精品啪啪啪一区二区三区三州| 麻豆视频国产一区二区| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 97精品视频在线| 精品毛片av一区二区| 刺激性视频黄页| 熟妇熟女一区二区三区| 国产精品麻豆成人AV艾秋| 亚洲国产亚洲天堂| 欧美性爱视频免费一区一A | 欧美96在线|欧| 高清无码国产亚洲| 欧美色图另类图片| 一二三四日本视频高清| 美女被啪到深处抽搐视频| 开心五月激情网| 国产91美女视频| 色色五月天婷婷| 亚洲综合伊人无码久久| 欧美最婬乱婬爆婬性视频| 懂色Av| 亚洲伊人久久精品狠狠在线| 欧美天天干| 黄色av一区二区在线| 中文字幕精品三级久久久| 国产伦乱91| 精品国产99999| 色婷久久| 国产主播福利| 亚州欧美一区| 免费一级视频特黄色大片| 精品国产乱码久久久久久久久久毛片| 中文伊人大香蕉视频| 91天天综合网| 日韩无码服务区| 亚洲天堂电影精品一区| 伊人五月天激情| 欧美在线亚洲| av久日| 男男H黄动漫啪啪无遮挡网站| 超碰社区97| 人妻久久久久久久久久久久久久久| 综合网 欧美| 国产精品久久久久久夜夜夜| 无码丰满熟妇一区二区浪潮AV| 香港日本韩国人妇99www.wccm20| 亚洲欧美日韩精品久| 久久婷婷成人综合色怡春院| 久久m| AV污污污污| 日本大香蕉综合网红本杳社区| 夜夜夜久久| 国产原创精品| 久久婷婷亚洲| 男人的天堂欧美| 岛国在线一区二区三区| 男人的天堂99| 91欧美丨精品丨入口| 天堂种子在线www网资源| 黑人娇小av在线播放| 久久久穴999| 午夜电影在线观看无码专区| 男插女青青影院| 福利大香蕉| 久久精品亚洲婷婷| 偷窥自拍亚洲天堂网爆| 亚洲第一狼人丝袜美女另类| 亚洲国产精品成人久久蜜臀| 安微少妇操BBB| 婷婷成人久久久精品| 一区二区三区成人高清视频| 精品国产一区探花在线观看| 亚洲天堂少妇| 久久影视二区三区行押| 欧洲乱码视频| 91亚州日韩高清| 国产亚洲美日韩Aⅴ中文字幕无码成人| 后入人妻无码| 色香91| 99999久久久久9国产精品| 国产亚州高清国产拍精| 黄片国产精品一区二区| V A在线| 大香蕉日韩欧美| 91熟女综合| 日韩三级久久久| 久久久久久AⅤ无码免费肉站| 日韩无码视频黄色| 久草精品国产99| 欧美在线大香999| 婷婷美人网| 国产欧美精品日韩区二区麻豆天美| 5月婷婷6月六月丁香| 久日综合网| 色狠狠综合噜一二三区| 亚洲男人天堂Av| 中文字幕亚洲在线一区| 激情综合网五月婷婷五月天| 人人贴人人摸| 翔田千里AⅤHD无码| 91亚洲欧洲| 欧美肥臀在线| 日日骚av| 久久精品国产97欧美精品亚洲| 青青国产在线拍揄自揄拍| 丰满少妇一区二区三区四区观看| 亚洲色吧网| 午夜丁香| 色性综合| 九色 人妻 大香蕉| 国产精品2020| 艾草av| 久久久亚洲精品电影免费看| 在现视频女上位好爽| 色婷婷电影网| 日韩精品一二三四| 97AV爱| 成人影 天天操 亚洲| 天天射影院| 亚洲欧美精品一区天堂久久| 五月天婷婷综合网| 日韩熟女精品无码专区一区二区| 超碰97男人| 香港成人一级视频在线青青草| 无码人妻精品一区二区三区99不卡| 亚洲综合九九| 男人天堂黄片| 久久精品国产72国产精品福利| 精品国产丝袜一区二区三区乱码| 在线人人人人人人精品超| 国产亲戚伦亲在线| 丁香五月偷拍| 久久大香蕉手机高清| 久久一二区四| 91天天爱| 97欧美综合网| 欧美高清无码免费视频高清版| 天天澡天天狠天天天做| 999精品国产高清一区二区| 欧美五十路熟| 日韩精品亚洲专区在线影视| 98色网| 久久99国产综合精品女同| 国产精品亚洲四五区在线观看| 青青草吊丝| 精吧天堂| 亚洲AV色图| 男人天堂网站| 黄色视频特级毛片| 亚洲色图欧美色图制服丝袜| 国产热av| 东京热双插| 亚洲国产精品无码AV久久久| 屁屁影院一区二区三区国产| 天天看天天日天天操| 欧美夜夜草视频| 国产日韩欧美亚洲精品95| 日本精品高清一二区一本到| 色性综合| 蜜桃狠狠色伊人亚洲综合 | 搡老女人老91二区| 国产性爱在线视频一区二区| 激情色播| 人妻少妇三级| 男人精品区| 亚洲日韩视频二区| 国产欧美一区激情交| 射丝袜高跟鞋99| 加勒比av官网在线| 欧美夜夜草视频| 色香色欲天天综合网天天来吧| 伊人色综合网| 9长久久精品| 日韩一卡二卡三卡| 香蕉久久AⅤ...| 狠狠干狠狠色| 91人妻久久久久久久久久久久久| 蜜臀久久99精品久久久久久无删减 | 日本大香蕉| 人人妻人人澡人人爽人人精品浪潮| 国产精品不卡一区二区三区av| 国产 三级自拍| 国产成年精品高清在线观看91| 色官网在线| 青青草在线视频人人想人人上| 无码操逼天堂| A片A5445444| 日韩啪啪啪啪啪| 99re在线视频国产| 国产精品白丝在线播放| 98色网| 伊人久久亚洲色欲综合网站| 成人av影院在线观看| 久久久久人妻| 97在线日韩中文字幕| 亚洲 欧美 日韩 国产一区二区| 色综合网1| 白 大 人妻 区 在线| 野狼福利社区| 男人的天堂,欧美亚洲另类国产日韩,日本高清一区二区 | 老熟女搡BBBB搡BBBB视频| 日本久久天堂| 99国内熟女露脸视频| 一区AV| www.99色| 欧美图片校园春色| 亚洲图片欧洲图片aⅴ| 五月天色电影| 国产精品久久久久久亚洲色欲| 日本在线一二| 天天欲望网| 精品久久久久综合无码| 狠狠色婷婷777| 曰韩少妇无码| 国产精品无套内谢| 熟妇激情| 国产97视频免费观看| 欧美少妇性乱| 日本操大逼| 欧美在线啊啊啊| 中文字幕美女91| Av色五月| 极品综合| 伊人青青草久久| AⅤ片水多多| 97色色色综合网站| 免费观看国产不卡av| 97精品视频免费| 手机午夜电影神马久久| 欧美日韩大陆黑人少妇99| 熟女激情综合网| 久久超碰97中文字幕| 国产精品高清2021在线| 大香蕉色网| 成人日韩3| 91爰爱欧美| 在线观看免费视频国产| 青草园大香蕉| 国产尹人在线视频免费| 久9精品| 97舔舔| 操逼网站网站| 密臀AV在线| 高清不卡 中文 人妻| 激情综合网五月婷婷五月天| 超碰97人人乐| 国产高清1234区| 99久久无码| 97精品视频免费| 欧美性爱1080p| 亚州欧美一区| 婷婷性爱| AV一起草在线| 久久精品中文字幕女同| 国产成人网址| 人人弄人人摸| 久久久一二三四区| 天天操天天射青青草| 三男一女不戴套的A片| 成人热久久精品| 国产精品探花视频| 97超碰香蕉| 国产日韩精品一区二区三区| 日韩精品免费高清视频在线| 91在线观看,天天综合| 精品无码一区二区| 日韩卡一卡二卡三在线| 欧美在线亚洲| 96AV久久久| 久操网址| 天美传媒AV在线播放| 亚洲欧洲无码97久久精品| 岛国视频免费在线观看| 91色综合| 亚洲91综合| 婷婷中文字幕| 一区二区三区黄片免费观看| 亚洲97超碰| 啊好爽快点-国产一区二区三区撒尿在线-成人AV| 国产91乱伦| 中文字幕99999| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 无码一区免费在线不卡| 欧美在线干| 亚洲国产精品久久久久婷婷青年| 激情综合五月| 人人摸.人人色| 超碰97国产欧美| 啊啊啊不要啊啊受不了了视频在线 | 丁香五月性爱| 亚洲AV无码翔田千里网站| 99操逼| 日韩人妻无码精品系列| 天天淫人人妻日日色| 福利在线黄片| 成人三一级一片aaa| 后入式免费视频| 蜜桃视频啊啊啊啊| 亚洲男人的天堂AV| 强奸少妇AV导航网| 婷婷伊人綜合中文字幕小说| 国产人伦a片信息免费片| 91精品国产91久久青草| 麻豆天美一区二区| 91黄射| 嗯嗯啊好大| 涩爱AV在线| 超碰在线99| 日韩卡一卡二卡三在线| WWW啪啪的com| 91精品无码久久久久久久| 我要色综合网站| 一区二区三区 丝袜高跟| 欧洲无码一区二区| 丰满人妻-区二区三区免费| 国产中文字幕曰本毛片| 久久成人国产| 人妻中文字幕精品无码| A片大香蕉在线| 国产精品九九九| 欧美图片校园春色| 蜜臀久久99'精品久久久| 91成人在线| 青青操97| 亚洲射综合网| 动漫片子网站3黄| 日韩精品区二区三区不卡| 小情侣高清国产在线视频| 噜噜噜在线视频| 日本日逼高清| av最新免费中文字幕| 日韩av电影成人在线| 偷拍综合网| 国产一级内射高清视频 | 日韩 欧美 另类 人妻| 日韩中文字幕国产| 天天做日日做| 思思热在线cao| 人人看欧美性爱| 神马久久久久久伦理片| 免费一级a毛片久久久久久鸭绿欲| 中文字幕丰满人妻日本| 欧美福利视频啊啊啊啊| 噜噜噜在线视频| 国产一级特黄大片处女| 色爱三区| 婷婷丁香五月综合| 神马精品视频| 91jk色拍| 中文字幕人乱码中文字的预防方法 | 欧美亚洲玖玖玖| 国产av高清版| 一区二区三区色综合| 新视频sss国产| 丝袜色综合| 大香蕉2017| 大香蕉淫人| 中文久久久| 性无码专区2020| 欧美日韩大黄片| 国产宅男宅女在线观看| 白嫩国模丰满一二三区| 成人婷婷丁香| 热久日综合| 美女丝袜激情小说| 97超碰日韩| 乱伦日本中文自拍| 啪一啪免费视频| 国产AV久久久蜜爱影集| 嗯嗯嗯啊啊啊在线免费观看| 免费超碰97久久| 亚洲天堂电影网99999| 亚洲综合首页| 四虎影视永久在线免费| 五月丁香色婷婷| 美日韩一卡二卡三卡免费人妻精品| 日韩99神马视频片| 中文有码9| 五月天亚洲色图| 成在线人在线观看视频| 九色婷婷| 亚洲av总站| 夜夜嗨老熟女AV一区二区三区| 欧美综合色,www| 在线人成亚洲视频免费观看| 日本高清一区二区在线| 蜜臀精品1区2区| 熟女久久久| 91狠狠综| 人人天天干干| 亚洲美女30b| 少妇人妻在线| 日婷婷| 人人扣人人操| 极品AV网站在线观看| 亚洲人妻久久| 看黄片视频免费| 嗯嗯嗯嗯啊啊啊好紧好大| 欧美中字不卡| 狠狠久久手机视频精品| 久色网| 天天综合网~91综合网| 国产又黄又爽| 超碰九色| 色九九综合AV| 麻豆国产97在线| 亚洲中文字幕av| 精品然女一区二区| 91啪啪| 日本日皮视频逼| 躁躁日曰躁2020| 午夜在线播放| 五月天大香蕉| 91精品国产长腿丝袜美女| av一区二区三区不卡| 五月色网| 久久久草草精品| 在线亚洲 欧美 日本专区| 蜜臀久久99精品久久久久久| 无码精品人妻一区二区三区妖精| 综合久欧洲| 大色综合| 麻豆2区1区天美| 男人天堂毛片| 日韩精品在线观看网站| 99热日| 色就色综合| 春色校园综合网| 伊香蕉综合久久久久久久噜噜噜| 91精品伊人久久久大香线蕉91| 精品小视频在线| 永久电影三级在线观看| 艳美熟妇先锋一二三区| 97操| 91精品电影18| 超碰97欧美| 蜜臀少妇一区二区| 亚洲小说视频| 大奶啊啊好爽 | 乱精品一区字幕二区| 天天肏夜夜肏| 大香蕉综合| 日日干日日摸| 亚洲无码99| 精品人妻一区二区三区四区| 欧美在线视频99| 亚洲Av诱惑| 可以免费观看的AV| 久久精品店| 日韩欧美女优电影| 久久人妻| 午夜天堂网| 1769国内精品视频| 小骚逼被操的爽不爽| 婷婷去俺也去六月色| 91/欧美| 国产操操日韩三级黄| 亚洲欧美日韩电影网站一区| 亚春色色| 激情婷婷| 国产在线综合福利网站| 欧美97日韩| 久久精品国产99精品亚洲蜜...| 大香蕉宅男伊人| 无码天天操| 天天操天天日天天干| 黄色视频特级毛片| 国产精品剧情| 久久久久ab| 国产一级操B视频| 久草成人影片| 野狼激情网| 亚洲AV麻豆Aⅴ无码电影一| 污污污8888| 欧美黑人精品一区二区| 欧美日韩久久精品爱爱| 亭亭丁香激情| 亚洲二区精品在线观看| 无码人妻1727| 高跟伊人julia ann| 性爱乱伦网址| 91人妻在线视频| 五十路熟女工口| 啪一啪免费视频| 日本媚薬中文字幕在线| 日韩精品熟妇| 爱做久久久久久| 97超碰日韩| 久久啊啊啊视频| 婷婷五月天AV| 国产日逼视频| 精品美女少妇一区二区| 欧美国产视频| 久99热| 亚洲欧洲无码bt精品合集| 91国产丝袜美女| 视频二区美腿丝袜制服人妻欧美| 国产日逼视频| 天天日夜干| 色www精品视频在线观看| 在线日韩视频| 欧美一区二区福利在线| 夜夜欢天天干| 97国产精品久久久久| 欧美78p| 自拍偷拍 高清无码| 男人天堂2030| 少妇丝袜在线观看AV| 另类图片五月| 校园春色亚洲色图| 亚洲精品一卡二卡三卡福利视频网站 | 欧美成人精品一区| 蜜臀th| 99r九九| 日本一级黄色电影| 一级aaaaa欧美中文字幕录像片| 另类欧美色| 欧美一二级| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 亚洲精品99| 亚洲一区中文精品| 97se亚洲综合自| 午夜精品久久久99热蜜桃的功能特点| 青青草亚洲一区| 97电影院超碰| 怡红院一区二区熟女人妻| 翔田千里一区二区三区奶水| 亚洲国产美女久久久久| 97se亚洲综合自| 啊啊啊啊在线播放| 日本孕妇孕交| 91影视亚洲| 你草精品在线视频| 嗯~啊~快点 死我视频| 久操大香蕉手机视频在线看 | 日本精品人妻少妇一区二区| 日韩精品一二三四| 婷婷五月花| 婷婷五月天AV| 婷婷精品| 亚洲成人免费在线| 亚洲高清在线| 大香蕉av在线| 激情AV| 国产一区二区三区导航| 视频在线97| 蜜桃狠狠色伊人亚洲综合 | 久久久555| 欧美色97| 亚洲高清91| 黄页| 曰韩中文人妻视频| 久久大香蕉97| 国产传媒一区二区三区| 91精品又粗又猛又爽| 亚洲情色一区三区| 宗合情欲网| 亚洲城人男人的天堂| 男人的天堂亚洲| 丁香六月婷婷久久综合| 91无码中出人妻视频| 小少妇| 另类小说五月天| 婷婷五月天成人| 亚洲黑丝在线| 神马久久久久眼| 亚洲、日韩、综合、另类| 67194无码不卡| 91网18| 亚洲色悠悠久久88| 欧洲大香蕉| 久肏视频字幕| 天天92av| av在线播放国产一区| 波多野结衣一级视频| 欧洲成人性爱视频| 静品嫩模一区二区| 懂色AV一区二区三区| 男人天堂.AB| 黑丝日韩av丝袜av| 欧美性视频二区三区| 嗯嗯嗯啊啊在线观看| 78精品| 国产在线观看一区二区三区| 成人一道本免费视频| 97人妻免费中文字幕| 亚洲精品日韩国产欧美| 天天综合精品| 国产精品网站免费| 91欧洲入口| 99re9| 91爱做| 哑洲在线| 国产乱伦视频污| 无码最新| 夜夜一区二区| 国产25页| 国产精品播放| 在线观看高清AV| 精品国产精品一区二区| 97操97色| 色综合 加勒比| 97精| 日本国产欧美高清在线| 亚洲日本韩国极品一区二区| 免费啊啊啊| 好吊色青靑草| 午夜福利免费福利视频| 欧美熟妇视频| 久久久久久九九九九九九| 亚洲少妇在线观看| 精品v日韩欧美国产| 亚洲熟女国产综合另类| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 欧美日韩国产成人高清| 午夜电影在线观看无码专区| 色嘟嘟人妻天堂网| 欧美黑人168页欧美黑人167| 青娱乐淫乱1314| 日欧操屄视频| 天天看高清麻豆| 欧美色图20p| 天天精品| 久久久男人的天堂| 操国产逼| 丰满人妻-区二区三区免费| 亚洲综合夜色| 一个色导综合| 91色艳| 清纯唯美第一页| 伊人五月天激情| 亚洲AV资源| 诱惑网综合| 牛黄色久午久| 婬女免费一二三区A片| 青青青青草av在线观看| 超碰78| 99精品在线观看| 国产精品国产| 密乳无码| 欧美情色贴图| 久久精品国产亚洲妲己影视| 久久久久久久一级黄色打同平台| 99精品无码| 殴美在线AⅤ| 精品亚洲俞拍视频一区| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 九九九精品一区二区无码| 天堂v无码免费视频| 天堂岛av| 欧色网址| 丁香六月综合激情| 欧美色91| 婷婷五月综合在线| 蜜臀Av一区二区三区| 亚洲Av无码成人精品国产| 久久99精品九九久久久婷婷| 天天爽夜夜爽夜夜爽精| 青青草视频在线观看一区二区| 久久久久夜夜夜夜| 嗯嗯嗯啊啊啊在线免费观看| 色臀av| 91在线|亚| 农村女一级毛卡片| 国产怡红院| 成人性爱免费播放| 久久久穴999| 啪啪啪东京| 麻豆一区在线| 91人妻中文| 久久精品高清无码一区| 欧美成人一区二区三区在线播放 | 超碰97极品9| 丁香六月婷| 伊人91| 日本不卡三级网在线播放| 亚洲无码 国产无码| 久久曰曰| 成人a大片在线观看| 免费超碰97久久| 小情侣高清国产在线视频| 91欧洲入口| h在线看免费版在线看| 亚洲91在线| 日日干夜夜操视频h| 交换娇妻呻吟声不停中文字幕| 免费作爱一级视频| 亚洲综合在线91| 夜夜肏2021| 日韩熟女操逼| 亚洲凸凹超碰成人| 色色色色网站| 亚洲天堂欧美| 玖玖爱一区在线| 性做久久久久久久| 97色综合中文网| 夜夜操老骚逼视频网站| 欧美丰满少妇xx高潮| 少妇特黄一区二区三区| 五月丁香综合| 丁香婷婷五月| 91男同| 欧美操逼一二三区| 国内毛片国产欧美拍| 色偷综合| 亚洲av在线免费观看| 久久性爱精品一区| 嗯嗯嗯啊啊在线观看| 久久久影院| 温婉少妇玩3p| 亚洲丝袜综合| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 亚洲一区二区中文字幕| 精品人妻一区二区三区-国产精品| 亚洲天堂中文字| 精品人妻一区二区三区四区| 啊啊啊啊在线观看网址| 婷婷五月天久久久| 久久国产逼| #NAME?| 色哟哟-国产专区| 操逼网免费无码视频| 国产熟女精品一区二区| 日本免费一区二区不卡| 精品国产乱码久久久久久影片| 国模不卡| 国产v亚洲v日韩v欧美v片另类| 色欧洲97| 嗯嗯啊啊用力视频免费| 乱老女人一区二区视频| 欧美自拍偷拍综合图片| 东京太热男人的天堂久久久| 亚洲情色在线| 亚洲激情网一二三四区| 人妻系列无码专区中文有码| 国产女同在线观看视频| 精品少妇一区二区| 人妻少妇精品久久久| 青青草原人妻| 噜噜噜无码AV一级一级久久影院| 久久这里只精品免费福利| 国产激情在线| 老司机午夜精品福利视频一区二区| 怡红院视频在线| 欧美婷婷五月天| 丁香六月激情| 91综合色噜噜| 美女好片色日本| 4虎在线视频| 97免费视频网| 在线观看十八禁| 久久99亚洲精品久久99果| 在线看的av| a片久久久久久久久久久久| 97碰碰色| 凹凸 69堂 在线播放| 强奸熟女一区二区三区| 色噜噜人妻丝袜AV资源| 成 人 影视 一区 二区 三区 四区 | 91老女人| 四虎影视精品| 91操熟女视频 | 亚洲熟妇丝袜在线观看| 加勒比无码一区二区三区| 午夜男人一级A片7777| 无码高清专| 国产性久久久| 强奸国产在线| 尤物网址| 亚洲国产一区二区入口| 久久中文字幕一区不卡| 欧美真人抽搐一进一出gif| 亚洲九九九| 91bbb| 中文字幕一区二区三区50路| 欧洲综合色| 欧美亚洲首页| 激情在线青青操| 日韩精品一区二区人人人| 久久久女人| 天天操妹子| 国产精品久久泡妞网站| 日韩精品午夜操呦呦不卡影院| 天天影视综合色| 欧美色图99| 久操免费观看| 国产精品久久泡妞网站| 好吊色青靑草| 亚洲国产综合图区中文字幕| 欧美激情综合网| 欧美97| 一级性爱视频免费观看 | 91麻豆天美国产欧美日| 91原创在线观看| 日本午夜福利视频| 97超碰巨乳| 激情小说亚洲视频| 熟妇高潮二区三区| 久草看看看| 视频不卡中文字幕| 自拍偷拍 日韩欧美| 18啪啪手机免费性爱| 中文字幕奈奈美被公侵犯| 久久久无码av精| 国产亚洲综合欧美一区| 欧美日韩国产在线| 欧美性后入| 精品一国2| 日1区2区3区2020| 九九亚洲| 欧美性爱第一区| 久久久九九网站| 天天日老熟妇| 一区,二区,三区视频| 蜜臀aV午夜一区二区三区| 欲色综合| 中文字幕黄片在线| 午夜欧美女人操逼| 96精品在线| 亚洲欧美日产国产91毛片| 综合色久欲| 97色亚洲| 国产精品激情久久久久久久| 大香蕉久操| 久久的网站啊啊啊啊啊| 色天堂在线观看| 欧美熟妇精品黑人巨大91| 1769国内精品视频| 在线99热| 综合天天网| 超碰色图| 色狠狠 - 百度| 久久人妻丝袜一区二区三| 91l欧美在线| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 国产成人天堂| 另类欧美色| 爽极品影院| 尹人大香蕉视频在线| 99re99视频在线免费观看| 超碰超碰超碰超碰的大鸡吧操黑丝袜| 蜜臀一区二区三区在线| 五月天黄色激情视频| 欧亚乱色熟一区二区三四区| 91碰碰| 精品人妻一区二区三区四区石在线| 国产一级作爱毛片| 精品网站9999| 91高清欧美| av网站在线观看了| 亚州情色j区| 福利大香蕉| 亚洲男人综合| 激情五月婷| 美女骚尻视频| 四虎午夜影院| 九月丁香| 视频二区熟女人妻| 92性色国产午夜福利在线661| 色五月综合网| 蜜臀无码一区二区| 摸奶性爱视频网站在线免费播放| www.色五月| 久久人人爽av亚洲精品天堂桃色| 亚洲日韩人妻中文字幕一区| 久久大香蕉| 久久色AV线| 最新日日夜夜天天干干| 国产欧美一区二区| 欧美性爱一区二区三区| 午夜福利精品| 欧美色一二三| 在线免费观看高清无码视频| 激情五月丁香五月| 欧美日韩系列| 国产男人又猛又粗又爽| 久久大线蕉一区| 日本中文熟女视频| 香蕉在线一区二区三区| 好湿好紧视频| 国产精品免费视频人成| 一本大道综合伊人精品热热| 午夜福利国产欧美日韩夜夜| 91爱综合| 99热这里只有精品18| 天美麻花大全视频| 97伦乱| 性开放中文AV高清无码免费看| 91五月天| 久久国产免费激情视频| 精品176精品2| 国产精品成人无码a v毛片| 久热精品色情| 精品久久久久久中文字幕三区| 人妻天天爽夜夜爽精品2| 国产精品九九九| 色哟哟国产精品免费网址| 超碰95| 天天操女人| 丰满人妻被猛烈进入中| 97国伦国色| 高清在线不卡一区二区 视频| 欧美天堂日韩三级国产传媒| 91精品无码久久久久久久| 亚洲综合另类欧美久久久| 操国产逼| 少妇人妻精品| 久久东京伊人一本到鬼色| a人片中文字幕一区二区| 一起草日韩| 嫩草 我啊~嗯~在线| 综合自拍| 欧美色九九| 蜜桃色色网站视频三区| 天美精品原创av片国产| 区一在线观看| 人妻一二三区| 亚洲人人夜夜澡人人爽| 国内自拍 日韩激情 99| 欧美日韩人妻精品系列一区二区三区| 97人人射| 免费a v| 亚洲一区二区 麻豆传媒| 操逼逼中文字幕| 人妖欧美一区二区| 亚洲男人天堂Av| 久96热在线观看视频| 98精品国产乱码久久久久久| 51一区二区三区| 国产在线激情| 日本少妇va7777| 操逼啊啊啊91| 男人的天堂视频精品乱在线| av婷婷色网| 亚洲欧美综合区自拍另类| 婷婷探花久久精品一区| 丰满欧美少妇| 色在线亚洲视频www| 青青草在线视频美女| 猛交交| 交换娇妻呻吟声不停中文字幕| 亚洲久久东京热一二三四五区视频| 丁香啪啪| 无码人妻一区二区三区色欲aⅴ| 天天摸天天舔天天操| 99热欧美| .精品人妻一区二区三| 天天干1区2区在线| 色妹子A V| 强奸国产在线| 91美女小视频| 一本久久精品中文字| 色婷婷av在线观看| 中文字幕AV乱伦| 欧美综合中文| 69视频福利导航| www.99在线| 国产亚洲精品久久久久小| 国产suv精品一区| 超碰在线974| 日本 欧美 国产一区| 精品视频在线观看精品| 9ⅰ久久久天天| 亚洲国产成人精品久久久国产成人一区二区| 亚洲综合图文| 欧美日综合| 日日插夜夜| 资源新线在线天堂| 精品妇操一区二区三区| 色综合中文字幕不卡| 黄色一级视| 欧美性生活男人的天堂| 天天天干977| 自拍亚洲综合| 日本中文字幕高跟| 久久免费精彩视频| 日韩国产乱子伦App| 大学生美女口爆| 日韩射图| 制服中出中文人人精品| 69人妻人人揉人人躁人人精品| 久久高清欧美国产| 日韩免费在线观看不卡| 欧美色图99| 狠狠热这里都是精品| 色色无码| 国产男女无套视频免费观看| 操逼视频色| 先锋女优在线观看视频| 欧美最大综合网| 岛国人妻少妇av在线观看| 五月丁香激情综合| 风流老熟女一区二区三区l| 无码久久国产| 2017天天插| 久久久三区二区一区| 天天色怡春院| 亚欧美天堂在线| 五月天婷婷欧美三区| 91人妻Pr| 久久黄色性爱视频| 色屁屁影院www国产| 激情综合网亚洲| 亚洲双插| 免费99精品国产自在在线| 亚洲吊色| 亚洲综合在线高清| 后入 亚洲 美女 射| 人妻少妇一区二区| 欧美一区二区三区四区综合| 最新日本中文字幕| 久久午夜色播影院免费高清| 亚洲图片91| 超碰欧美97资源| 久久精品日韩专区免费观看| 国产性爱欧美性爱在线| 精品国产污一区二区三区| 台欧久久精品视频| 日韩人体偷拍| 久久伊人大香蕉| 婷婷色综合| 可以免费观看的av| 韩国一级婬片A片AAAAA| 韩国一级做A片免费的| 日韩av影片在线观看| 亚洲第一精品在线视频| 377p欧洲日本亚洲大胆| 精品少妇人妻av久久免费| 日本成人A片免费看| 亚洲密乳AV| 三级AV入口| 亚洲AV无码AV吞精久久久久| 久久精品国产亚洲AV高清演员表| 国产亚洲精品A在线观看下载| 国产超碰AV在线精品| 偷拍偷窥与盗摄视频专区| а√天堂资源官网在线资源| 岛国A V在线免费看| 久久久性| a一区二区三区乱码在线| 三级激情网站| 91爆操视频| 亚洲一区二区三区AV无码| 亚洲AV无码久久久国产精品| 亚洲精品久久久久久久蜜桃臀| 色综合av男人天堂| 国产成人无码网站在线视频| 色婷婷综合网站| 激情五月综合网| 后入 亚洲 美女 射| 久草色悠悠在线视频| 日韩少妇在线视频| 91欧美综合在线| 激情另类激情| 久久九色| 欧美片第一页| 亚洲国产一区二区入口| 91在线精品| 亚洲免费看片| 午夜情侣自拍网站| 亚州综合AⅤ| 婷婷九月丁香| 91观看 国产白丝| 国产一国产一级毛片古装| 人人做天天爱| 一级aaaaa欧美中文字幕录像片| 日韩不卡a级视频专区| 成人情色一区二区| 欧美97在线观看| 亚洲欧美日韩电影网站一区 | 中文字幕免费在线观看 | 性感美女91影视| 国产v亚洲v日韩v欧美v片另类| 精品无码久久久久久国产浪潮| 久久91精品国产9丨久久分亭 | 玖色AV| 一区二区三区成人| 快播久久人人aV| 国产精品一区二区手机看片| 多毛小伙内射老太婆| 四虎影院成年人片| 99久久久久| 日本三级人妻a人妻一在线| 大香蕉伊然在亚洲91| 欧美日韩在线小说 | 精品九九九九九九九| 色婷婷日韩精品一区二区三区| 日本亚洲嫩草影院啪啪| 国产精品久久久久久久久久梁医生| 亚洲福利中文字幕在线| 91精品人妻一区二区三区蜜桃臀| 97频视在线| 白丝av| 国产视频不卡在线观看| 熟女一区二区| 91老熟女91老女人| 亚洲中文字幕精品一区| 欧美强奸一区二区诱惑| 高清国产av无码| 欧美日韩少妇色情| 超碰99re| 人人操人人操草草| 亚洲天堂性爱| 熟妇一区,二区,三区。| 男女做爰猛烈动高潮A片免费应用| 亚洲精品三| 天天看人人操屄犊摸阴| 色欲久久99国产精品久久久久久| 在线国产福利网址导航| 久久啊哟| 人人操人人精品影片| 少妇一区二区三区精选| 久久男人的天堂国产| 久久久久久久六六| WWW.操逼.COM| 99热这里只有精品8| 后入式视频国产自| 97啪啪| 99热66| 超碰在线1234区| 欧美性爱91| 伊人天堂在线| 婷婷10月天青娱乐| 性在久久久久久| 天天综合香 ld视频| 中文不卡视频| 26uuu国产免费观看| 97在线青| 国产一区二区在线播放量| 99性爱| 亚洲 欧美 日韩另类 麻豆| 亚洲精美粉嫩嫩泬在线观看| 五月天伊人| 综合色好色| www色色com| 欧洲站一级二级三级h| 色伊人91| 国产SV一线| 老熟女乱伦片| 天天欧美欧美亚洲网| 精品人妻久久久| 夜夜影视四色| 91在线/欧洲| 五月婷婷六月丁香网址| 磁力99AV| 伊人天天久久动态图| 野狼激情网| 亚洲一二三四区| 人妻天堂综合网| 综合av影片| 亚一综合久久久久久久久久|