化什么體驗(yàn))
文章目錄前言這份案例的核心結(jié)構(gòu)完整代碼為什么倍速功能本質(zhì)上是在服務(wù)“觀看節(jié)奏”speeds 數(shù)組為什么特別值得學(xué)setSpeed() 為什么比直接在按鈕里寫賦值更穩(wěn)按鈕高亮為什么能直接體現(xiàn)當(dāng)前狀態(tài)為什么說(shuō)明區(qū)把每個(gè)速度都單獨(dú)寫出來(lái)關(guān)鍵代碼單獨(dú)講解State speed: number 1.0ForEach(this.speeds, ...)VideoController.setPlaybackSpeed(speed)小白最容易踩的坑1. 把倍速做成一堆寫死按鈕2. 選中態(tài)不明顯3. 倍速切換只改頁(yè)面文字不改真實(shí)播放器這份代碼能怎么改成真實(shí)業(yè)務(wù)動(dòng)手改一改寫在最后前言倍速播放這件事很多人一開始會(huì)把它當(dāng)成一個(gè)“附加功能”。有當(dāng)然更好沒(méi)有好像也不是不能用。但你只要做過(guò)課程視頻、會(huì)議回放、長(zhǎng)講解內(nèi)容就會(huì)很快發(fā)現(xiàn)倍速其實(shí)不是錦上添花而是影響觀看效率的基礎(chǔ)能力。不同用戶看同一段視頻節(jié)奏需求完全可能不一樣。這份案例很適合用來(lái)理解倍速選擇器最基礎(chǔ)的設(shè)計(jì)方式先把速度選項(xiàng)整理清楚再讓狀態(tài)和按鈕樣式聯(lián)動(dòng)起來(lái)。這份案例的核心結(jié)構(gòu)頁(yè)面有兩個(gè)關(guān)鍵點(diǎn)Statespeed:number1.0privatespeeds:number[][0.5,0.75,1.0,1.25,1.5,2.0]一個(gè)表示當(dāng)前播放速度一個(gè)表示所有可選的速度檔位。你可以把這篇看成“倍速控制面板”的最小實(shí)現(xiàn)骨架。完整代碼/** * VideoSpeedSelector - Video 倍速播放 * 演示 Video 的播放速度控制 */import{PRESET_COLORS,generateListItems,PAGE_BG_COLOR,PANEL_BG_COLOR,ACCENT_COLOR,MUTED_TEXT_COLOR}from./typesEntryComponentstruct VideoSpeedSelector{StateisShow:booleantrueStatespeed:number1.0privatespeeds:number[][0.5,0.75,1.0,1.25,1.5,2.0]setSpeed(s:number):void{this.speeds}build(){Column(){if(this.isShow){Scroll(){Column({space:16}){Text(Video 倍速播放).fontSize(16).fontColor(ACCENT_COLOR).fontWeight(FontWeight.Bold)Column(){Column(){Text(視頻播放區(qū)域).fontSize(14).fontColor(#FFFFFF)Text(${this.speed}x 倍速).fontSize(24).fontColor(#4D96FF).fontWeight(FontWeight.Bold).margin({top:8})}.width(100%).height(160).backgroundColor(#333333).borderRadius(10).justifyContent(FlexAlign.Center)}.backgroundColor(PANEL_BG_COLOR).padding(12).borderRadius(12)Column(){Text(播放速度).fontSize(14).fontColor(ACCENT_COLOR).fontWeight(FontWeight.Bold).margin({bottom:8})Row({space:6}){ForEach(this.speeds,(s:number){Button(${s}x).onClick((){this.setSpeed(s)}).fontSize(13).fontWeight(sthis.speed?FontWeight.Bold:FontWeight.Normal).backgroundColor(sthis.speed?ACCENT_COLOR:#E8E8E8).fontColor(sthis.speed?#FFFFFF:#666666).borderRadius(6)})}.width(100%).justifyContent(FlexAlign.SpaceEvenly)}.backgroundColor(#F0F0FF).padding(12).borderRadius(12)Column({space:6}){Text(倍速場(chǎng)景說(shuō)明).fontSize(14).fontColor(ACCENT_COLOR).fontWeight(FontWeight.Bold)Text(0.5x - 慢速學(xué)習(xí)/回放).fontSize(12).fontColor(#333333)Text(0.75x - 稍慢播放).fontSize(12).fontColor(#333333)Text(1.0x - 正常速度).fontSize(12).fontColor(#333333)Text(1.25x - 稍快瀏覽).fontSize(12).fontColor(#333333)Text(1.5x - 快速瀏覽).fontSize(12).fontColor(#333333)Text(2.0x - 極速觀看).fontSize(12).fontColor(#333333)Text(API: VideoController.setPlaybackSpeed(speed)).fontSize(11).fontColor(MUTED_TEXT_COLOR).margin({top:4})}.width(100%).backgroundColor(#E8F4FD).padding(14).borderRadius(12)}.width(100%)}}Text(Video 倍速播放 - 用不同速度適配不同觀看節(jié)奏).fontSize(12).fontColor(MUTED_TEXT_COLOR).margin({top:12})}.width(100%).height(100%).backgroundColor(PAGE_BG_COLOR).padding(16)}}為什么倍速功能本質(zhì)上是在服務(wù)“觀看節(jié)奏”很多人會(huì)把倍速理解成單純的效率功能其實(shí)不止這樣。不同速度背后對(duì)應(yīng)的是不同的觀看意圖0.5x是為了看清細(xì)節(jié)1.0x是標(biāo)準(zhǔn)節(jié)奏1.5x或2.0x是為了快速瀏覽重點(diǎn)所以倍速不是一個(gè)技術(shù)參數(shù)面板而是用戶掌控內(nèi)容節(jié)奏的入口。speeds數(shù)組為什么特別值得學(xué)先看這段privatespeeds:number[][0.5,0.75,1.0,1.25,1.5,2.0]它把所有檔位統(tǒng)一放進(jìn)一個(gè)數(shù)組里再通過(guò)ForEach渲染按鈕。這種寫法很干凈原因有兩個(gè)倍速選項(xiàng)集中管理后續(xù)增刪方便。視圖不需要重復(fù)寫很多相似按鈕。以后你做分辨率選擇、清晰度選擇、字幕語(yǔ)言切換也可以沿用同樣思路。setSpeed()為什么比直接在按鈕里寫賦值更穩(wěn)案例專門寫了一個(gè)方法setSpeed(s:number):void{this.speeds}這看起來(lái)像多繞了一步但它是個(gè)好習(xí)慣。因?yàn)楹竺婺愫芸赡軙?huì)繼續(xù)在這里追加邏輯比如同步調(diào)用播放器控制器記錄用戶最近一次倍速選擇上報(bào)用戶行為埋點(diǎn)處理不支持的速度范圍把更新入口集中起來(lái)后續(xù)維護(hù)會(huì)輕松很多。按鈕高亮為什么能直接體現(xiàn)當(dāng)前狀態(tài)這部分代碼很有代表性.backgroundColor(sthis.speed?ACCENT_COLOR:#E8E8E8).fontColor(sthis.speed?#FFFFFF:#666666).fontWeight(sthis.speed?FontWeight.Bold:FontWeight.Normal)它用顏色、文字粗細(xì)和前景色一起表達(dá)“當(dāng)前選中的速度”。這類狀態(tài)反饋非常重要因?yàn)楸端偾袚Q不像播放按鈕那樣只有兩個(gè)狀態(tài)它是一組選項(xiàng)必須讓用戶一眼看出當(dāng)前選的是哪一檔。為什么說(shuō)明區(qū)把每個(gè)速度都單獨(dú)寫出來(lái)這一塊0.5x-慢速學(xué)習(xí)/回放1.0x-正常速度1.5x-快速瀏覽2.0x-極速觀看表面看是知識(shí)說(shuō)明實(shí)際上是在強(qiáng)調(diào)不同倍速不是隨便配的。倍速檔位應(yīng)該和場(chǎng)景掛鉤而不是只為了“我能調(diào)數(shù)字”。關(guān)鍵代碼單獨(dú)講解State speed: number 1.0當(dāng)前播放器的速度主狀態(tài)默認(rèn)值設(shè)成1.0很合理因?yàn)樗順?biāo)準(zhǔn)播放體驗(yàn)。ForEach(this.speeds, ...)讓倍速選項(xiàng)數(shù)據(jù)驅(qū)動(dòng)渲染是這篇最值得借走的結(jié)構(gòu)。VideoController.setPlaybackSpeed(speed)這是后面接入真實(shí)播放器時(shí)最關(guān)鍵的 API 方向。界面層把速度選出來(lái)播放器控制器去真正生效。小白最容易踩的坑1. 把倍速做成一堆寫死按鈕后期調(diào)整檔位時(shí)會(huì)很麻煩。2. 選中態(tài)不明顯用戶點(diǎn)了以后看不出當(dāng)前到底是1.25x還是1.5x。3. 倍速切換只改頁(yè)面文字不改真實(shí)播放器這樣會(huì)出現(xiàn)顯示和實(shí)際播放行為不一致的問(wèn)題。這份代碼能怎么改成真實(shí)業(yè)務(wù)場(chǎng)景改法在線課程頁(yè)默認(rèn)保留1.0x、1.25x、1.5x會(huì)議回放頁(yè)增強(qiáng)1.75x、2.0x的快速瀏覽能力逐幀講解視頻保留0.5x做慢速學(xué)習(xí)品牌播放器改成彈窗式或底部抽屜式倍速面板動(dòng)手改一改給當(dāng)前倍速加一句提示文案比如“適合快速瀏覽”。把倍速選擇從橫向按鈕改成列表彈層。保存用戶上一次選擇的速度下次進(jìn)入頁(yè)面時(shí)恢復(fù)。接入真實(shí)VideoController讓倍速真正作用到視頻播放。寫在最后倍速播放看上去只是一個(gè)小開關(guān)集合實(shí)際上它反映的是播放器有沒(méi)有把節(jié)奏控制權(quán)真正交給用戶。一個(gè)能調(diào)節(jié)觀看速度的視頻頁(yè)體驗(yàn)上往往會(huì)成熟很多。如果你現(xiàn)在還在搭基礎(chǔ)播放器這篇建議別只看按鈕樣式。真正值得帶走的是“檔位數(shù)據(jù)化、狀態(tài)集中管理、選中態(tài)明確反饋”這三個(gè)思路。