
一、實(shí)驗(yàn)?zāi)康恼莆招〕绦騰ideo視頻組件常用屬性實(shí)現(xiàn)視頻播放。理解彈幕機(jī)制學(xué)會(huì)配置預(yù)設(shè)彈幕列表danmuList。掌握wx.createSelectorQuery()獲取VideoContext視頻上下文調(diào)用sendDanmu()發(fā)送實(shí)時(shí)彈幕。實(shí)現(xiàn)隨機(jī)十六進(jìn)制顏色函數(shù)讓發(fā)送的彈幕顏色隨機(jī)變化。了解小程序基礎(chǔ)庫(kù)版本差異danmu?btn彈幕開(kāi)關(guān)按鈕僅低版本基礎(chǔ)庫(kù)生效高版本該屬性失效。掌握 input 輸入框bind:blur失去焦點(diǎn)事件獲取用戶輸入內(nèi)容。二、實(shí)驗(yàn)環(huán)境開(kāi)發(fā)工具微信開(kāi)發(fā)者工具項(xiàng)目模式不使用云服務(wù)、不使用模板渲染引擎renderer:webviewwebview 渲染模式三、實(shí)驗(yàn)需求分析基礎(chǔ)功能頁(yè)面展示 video 視頻播放器視頻播放到指定時(shí)間自動(dòng)播放預(yù)設(shè)彈幕。提供輸入框用戶輸入文字點(diǎn)擊按鈕發(fā)送彈幕彈幕顏色隨機(jī)生成。頁(yè)面包含橙色外邊框紅色頁(yè)面標(biāo)題原生導(dǎo)航欄標(biāo)題為 video 組件。作業(yè)擴(kuò)充要求切換低版本調(diào)試基礎(chǔ)庫(kù)播放器顯示彈幕開(kāi)關(guān)按鈕。切換高版本調(diào)試基礎(chǔ)庫(kù)彈幕開(kāi)關(guān)按鈕消失彈幕發(fā)送功能仍然正常可用。四、核心知識(shí)點(diǎn)梳理1.video 組件核心屬性表格屬性說(shuō)明id組件標(biāo)識(shí)用于獲取視頻上下文src視頻資源地址必須為 https 網(wǎng)絡(luò)地址或者云文件 ID不能使用本地項(xiàng)目?jī)?nèi) mp4 文件controlstrue顯示播放控件播放、進(jìn)度條、全屏danmu?list預(yù)設(shè)彈幕數(shù)組每個(gè)彈幕對(duì)象包含text彈幕文字、color彈幕顏色、time彈幕出現(xiàn)時(shí)間單位秒enable?danmutrue開(kāi)啟彈幕總開(kāi)關(guān)必須開(kāi)啟彈幕才會(huì)顯示danmu?btntrue彈幕開(kāi)關(guān)按鈕僅低基礎(chǔ)庫(kù)版本生效高版本廢棄該屬性2.VideoContext 視頻上下文通過(guò)wx.createSelectorQuery()查詢獲取 video 組件上下文對(duì)象調(diào)用sendDanmu({text,color})接口實(shí)現(xiàn)向視頻發(fā)送實(shí)時(shí)彈幕。3. 隨機(jī)十六進(jìn)制顏色利用Math.random()生成 0?255 的數(shù)字使用toString(16)轉(zhuǎn)為十六進(jìn)制如果是單字符前面補(bǔ)0拼接成#RRGGBB標(biāo)準(zhǔn)顏色格式。4.input bind:blur 事件輸入框失去焦點(diǎn)才捕獲輸入內(nèi)容保存文本用于后續(xù)發(fā)送彈幕。5. 視頻資源注意事項(xiàng)?禁止直接把 mp4 視頻放在小程序項(xiàng)目文件夾模擬器可以播放真機(jī)直接黑屏。 ?方案 1云開(kāi)發(fā)存儲(chǔ)上傳視頻復(fù)制云文件 ID?方案 2外網(wǎng) HTTPS 視頻鏈接。五、完整代碼實(shí)現(xiàn)1.app.json全局配置原生導(dǎo)航欄{ pages: [ pages/index/index ], window: { navigationBarTitleText: video組件, navigationBarTextStyle: black, navigationBarBackgroundColor: #ffffff }, style: v2, renderer: webview, componentFramework: glass?easel, sitemapLocation: sitemap.json, lazyCodeLoading: requiredComponents }2.pages/index/index.wxmlscroll-view classscrollarea scroll-y typelist view classbox view classtitle華為開(kāi)發(fā)者大會(huì)?2026/view view classvideo-layout video idmy?video src{{videoPath}} controlstrue danmu?list{{danmuList}} enable?danmutrue/video /view view classtxt?style彈幕內(nèi)容/view input typetext placeholder在此處輸入彈幕內(nèi)容 bind:blurinputBlur/ button typeprimary bind:tapsendDanmu發(fā)送彈幕/button /view /scroll-view3.pages/index/index.js// 獲取隨機(jī)十六進(jìn)制顏色 function getRandomColor() { let rgb []; for(let index 0; index 3; index){ let color Math.floor(Math.random() * 256).toString(16); color color.length 1 ? 0 color : color; rgb.push(color); } return # rgb.join(); } Page({ data:{ // 此處替換為你的https視頻地址 / 云文件ID videoPath:https://www.w3schools.com/html/mov_bbb.mp4, // 預(yù)設(shè)彈幕text文字、color顏色、time出現(xiàn)時(shí)間(秒) danmuList:[ { text:鴻蒙世界奔騰不息, color:#ff0000, time:1 }, { text:HarmonyOS 7, color:#ff00ff, time:5 }, { text:華為開(kāi)發(fā)者大會(huì)2026, color:#00ff00, time:10 }, { text:攜手助力筑牢金融安全, color:#00ffff, time:20 } ] }, onLoad(){ // 獲取VideoContext視頻上下文用于發(fā)送彈幕 const query wx.createSelectorQuery(); query.select(#my?video).context(); query.exec((res){ if(res[0]){ this.videoCtx res[0].context; } }) }, inputBlur(e){ // 輸入框失去焦點(diǎn)保存輸入內(nèi)容 this.inputValue e.detail.value; }, sendDanmu(){ // 發(fā)送自定義彈幕隨機(jī)顏色 this.videoCtx.sendDanmu({ text: this.inputValue, color: getRandomColor() }) } })4.pages/index/index.wxsspage { height: 100vh; display: flex; flex-direction: column; padding-top: env(safe-area-inset-top); box-sizing: border-box; } .scrollarea { flex: 1; overflow-y: hidden; } .video-layout { display: flex; justify-content: center; } video { width: 95%; } .txt-style { font-size: large; margin-top: 20rpx; } input { height: 80rpx; border-bottom: 2rpx solid blue; margin-top: 10rpx; margin-bottom: 20rpx; }5.app.wxss全局公共樣式.box { margin: 20rpx; padding: 20rpx; border: 4rpx solid #FF9500; } .title { font-size: 40rpx; font-weight: bolder; text-align: center; margin-bottom: 30rpx; color: red; }6.pages/index/index.json{}六、運(yùn)行效果頁(yè)面頂部原生導(dǎo)航欄標(biāo)題顯示video組件頁(yè)面完整展示橙色邊框、紅色標(biāo)題。視頻播放器加載測(cè)試視頻視頻播放到對(duì)應(yīng)秒數(shù)自動(dòng)彈出預(yù)設(shè)彈幕。在輸入框輸入文字點(diǎn)擊發(fā)送彈幕按鈕視頻上彈出隨機(jī)顏色的彈幕。切換調(diào)試基礎(chǔ)庫(kù)版本低版本2.32.3播放器顯示彈幕開(kāi)關(guān)按鈕。高版本3.17.4彈幕開(kāi)關(guān)按鈕消失發(fā)送彈幕功能不受影響。七、實(shí)驗(yàn)踩坑與問(wèn)題解決頁(yè)面邊框、標(biāo)題看不見(jiàn)被頂部遮擋原因開(kāi)啟navigationStyle:custom自定義導(dǎo)航頁(yè)面沒(méi)有留出狀態(tài)欄安全高度。 解決關(guān)閉自定義導(dǎo)航欄使用系統(tǒng)原生導(dǎo)航css 添加padding?top: env(safe?area?inset?top)適配手機(jī)安全區(qū)。彈幕按鈕 danmu?btn 不顯示不是代碼錯(cuò)誤小程序新版本基礎(chǔ)庫(kù)廢棄該屬性切換到低版本調(diào)試基礎(chǔ)庫(kù)即可看到彈幕開(kāi)關(guān)。彈幕發(fā)送功能高低版本都可用。調(diào)用 sendDanmu 報(bào)錯(cuò)彈幕發(fā)不出去原因沒(méi)有成功獲取VideoContext視頻上下文video 標(biāo)簽缺少 id。 解決video 組件設(shè)置id在onLoad生命周期通過(guò)createSelectorQuery獲取上下文對(duì)象。真機(jī)視頻黑屏無(wú)法播放原因使用本地項(xiàng)目 mp4 文件或者 http 非加密鏈接。 解決視頻上傳云開(kāi)發(fā)存儲(chǔ)拿到云文件 ID或者使用 https 公開(kāi)視頻地址。預(yù)設(shè)彈幕完全不顯示檢查是否開(kāi)啟enable?danmutrue確認(rèn)danmuList數(shù)組內(nèi) time 時(shí)間單位是秒。八、實(shí)驗(yàn)總結(jié)本次實(shí)驗(yàn)學(xué)習(xí)小程序video媒體視頻組件掌握預(yù)設(shè)彈幕與實(shí)時(shí)發(fā)送彈幕的開(kāi)發(fā)流程。 學(xué)會(huì)使用wx.createSelectorQuery獲取組件上下文調(diào)用組件實(shí)例方法。實(shí)現(xiàn)隨機(jī)十六進(jìn)制顏色生成函數(shù)完成彈幕隨機(jī)變色效果。 同時(shí)認(rèn)識(shí)小程序基礎(chǔ)庫(kù)版本差異性部分組件屬性會(huì)隨版本迭代廢棄。 掌握視頻資源的限制規(guī)則理解真機(jī)與模擬器行為差異開(kāi)發(fā)視頻小程序時(shí)必須使用網(wǎng)絡(luò)視頻資源不能直接引用本地 mp4 文件。