小程序視頻播放,與父視圖一致等樣式設置

初始設置的代碼:

WXML的代碼

<view class="card-wrapper"> <!-- 視頻播放容器(默認隱藏) --> <view class="video-container" wx:if="{{isPlaying}}"> <video id="cardVideo" class="card-video" src="{{item.videoUrl}}" autoplay controls bindplay="onVideoPlay" bindpause="onVideoPause" bindended="onVideoEnd" ></video> <view class="video-close-btn" bindtap="togglePlay"> <image src="https://images.biliq.com/images/miniprogram/paopao2.0/paopaoCard/close.png" mode="aspectFit" /> </view> </view> <!-- 封面圖容器(播放時隱藏) --> <view class="banner-mask" wx:if="{{!isPlaying}}"> <image class="banner-img" src="{{item.cover}}" mode="aspectFill" /> <!-- 播放按鈕 --> <view class="play-mask" bindtap="togglePlay"> <image class="play-icon" src="https://images.biliq.com/images/miniprogram/paopao2.0/paopaoCard/play.png" mode="aspectFit" /> </view> <!-- 點贊、轉發、導航 --> <view class="action-bar-wrapper"> <actionBar class="action-bar" item="{{item}}" bind:action="onAction" /> </view> </view> <!-- 名稱區域 --> <view class="desc-mask" wx:if="{{!isPlaying}}"> <!-- 名稱 --> <text class="banner-title">{{item.title}}</text> <!-- 掛載件 --> <actionMount wx:if="{{item.ismount}}" class="has-mount" item="{{item}}" bind:action="onAction" /> <!-- 無掛載 --> <view wx:elif="{{!item.ismount}}" class="no-mount" item="{{item}}" bind:action="onAction" /> <!-- 詳情 --> <view wx:if="{{!item.ismount}}" class="more-mask" bindtap="handleDatail"> <image class="more-img" src="https://images.biliq.com/images/miniprogram/paopao2.0/paopaoCard/more.png" /> </view> </view> <!-- 標簽區域 --> <view class="tag-list" wx:if="{{!isPlaying}}"> <block wx:for="{{item.tags}}" wx:key="index" wx:if="{{index < 3}}"> <view class="tag-mask {{item.spotag ? 'has-spot' : ''}}"> <image class="spot-tag" wx:if="{{item.spotag}}" src="https://images.biliq.com/images/miniprogram/paopao2.0/paopaoCard/spotag.png" mode="aspectFit" /> <text class="tag">{{item.text}}</text> </view> </block> </view> </view>

JS的代碼

Component({ properties: { item: Object }, data: { isPlaying: false, videoContext: null }, methods: { // 切換播放狀態 togglePlay() { if (this.data.isPlaying) { // 如果正在播放,則暫停并隱藏視頻 this.data.videoContext.pause(); this.setData({ isPlaying: false }); } else { // 如果未播放,則顯示視頻并播放 this.setData({ isPlaying: true }, () => { this.data.videoContext = wx.createVideoContext('cardVideo', this); this.data.videoContext.play(); }); } }, // 視頻開始播放 onVideoPlay() { console.log('視頻開始播放'); }, // 視頻暫停 onVideoPause() { console.log('視頻已暫停'); }, // 視頻播放結束 onVideoEnd() { this.setData({ isPlaying: false }); }, // 其他原有方法... onAction(e) { // 原有邏輯 }, handleDatail() { // 原有邏輯 } }, // 組件卸載時銷毀視頻實例 detached() { if (this.data.videoContext) { this.data.videoContext.pause(); } } });

WXSS的代碼

.card-wrapper { position: relative; width: 100%; border-radius: 12rpx; overflow: hidden; } /* 視頻容器樣式 */ .video-container { position: relative; width: 100%; height: 0; padding-bottom: 56.25%; /* 16:9 比例 */ } .card-video { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .video-close-btn { position: absolute; top: 20rpx; right: 20rpx; width: 60rpx; height: 60rpx; z-index: 10; } .video-close-btn image { width: 100%; height: 100%; } /* 原有樣式保持不變 */ .banner-mask { position: relative; width: 100%; height: 0; padding-bottom: 56.25%; /* 16:9 比例 */ } .banner-img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .play-mask { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; background-color: rgba(0, 0, 0, 0.3); } .play-icon { width: 100rpx; height: 100rpx; } /* 其他原有樣式... */

上述代碼展示效果如下

上述代碼可以實現視頻播放,但是樣式不是很好看,我們可以增加一些設置,比如視頻和父視圖的卡片一樣,視頻居中展示播放等等,下面是優化后的代碼。

WXML的代碼

<view class="card-wrapper">

<!-- 視頻播放容器(默認隱藏) -->

<view class="video-container" wx:if="{{isPlaying}}">

<!-- 修改為絕對定位的視頻包裝器 -->

<view class="video-wrapper">

<video

id="cardVideo"

class="card-video"

src="{{item.videoUrl}}"

autoplay

controls

bindplay="onVideoPlay"

bindpause="onVideoPause"

bindended="onVideoEnd"

></video>

</view>

<!-- 關閉按鈕 -->

<view class="video-close-btn" bindtap="togglePlay">

<image src="https://images.biliq.com/images/miniprogram/paopao2.0/paopaoCard/close.png" mode="aspectFit" />

</view>

</view>

<!-- 封面圖容器(播放時隱藏) -->

<view class="banner-mask" wx:if="{{!isPlaying}}">

<!-- 封面 -->

<image class="banner-img" src="{{item.cover}}" mode="aspectFill" />

<!-- 播放 -->

<view class="play-mask" bindtap="togglePlay">

<image class="play-icon" src="{{isPlaying ? '' : 'https://images.biliq.com/images/miniprogram/paopao2.0/paopaoCard/play.png'}}" mode="aspectFit}}" />

</view>

<!-- 點贊、轉發 -->

<view class="action-bar-wrapper">

<actionBar class="action-bar" item="{{item}}" bind:action="onAction" />

</view>

</view>

<!-- 名稱區域 -->

<view class="desc-mask" wx:if="{{!isPlaying}}">

<text class="banner-title">{{item.name}}</text>

<view class="more-mask" bind:tap="onDatail">

<image class="more-img" src="https://images.biliq.com/images/miniprogram/paopao2.0/paopaoCard/more.png" />

</view>

<!-- 標簽區域 -->

<view class="tag-list">

<block wx:for="{{item.tags}}" wx:key="index" wx:if="{{index < 3}}">

<view class="tag-mask">

<text class="tag">{{item.text}}</text>

</view>

</block>

</view>

</view>

</view>

WXSS的代碼

.card-wrapper{

position: absolute;

top: 0;

left: 0;

width: 100%;

height: 100%;

color: #fff;

padding: 0;

}

/* 視頻容器樣式 - 關鍵修改 */

.video-container {

position: relative;

width: 100%;

height: 100%;

background: #000;

display: flex;

flex-direction: column; /* 改為列方向布局 */

}

/* 視頻包裝器 - 移除絕對定位 */

.video-wrapper {

flex: 1; /* 占據剩余空間 */

position: relative;

width: 100%;

padding-bottom: 56.25%; /* 保持16:9比例 */

}

/* 視頻樣式調整 */

.card-video {

position: absolute;

top: 0;

left: 0;

width: 100%;

height: 100%;

background: #000;

}

/* 強制原生控件在底部 */

.card-video::webkit-media-controls {

position: absolute;

bottom: 0;

width: 100%;

}

.video-close-btn {

position: absolute;

top: 35rpx;

right: 20rpx;

width: 60rpx;

height: 60rpx;

z-index: 10;

display: flex;

justify-content: center;

align-items: center;

}

.video-close-btn image {

width: 100%;

height: 100%;

}


/* 封面圖 */

.banner-mask {

position: absolute;

top: 0;

left: 0;

width: 100%;

height: 100%;

margin: 0;

overflow: hidden;

}

.banner-img {

width: 100%;

height: 100%;

border-radius: 20rpx;

}

.play-mask{

position: absolute;

top: 50%;

left: 50%;

transform: translate(-50%, -50%);

width: 88rpx;

height: 88rpx;

padding: 0;

background: none;

display: flex;

justify-content: center;

align-items: center;

}

.play-icon{

width: 100%;

height: 100%;

}

/* 描述區域 */

.desc-mask{

position: absolute;

display: inline-flex;/* 改為inline-flex使寬度自適應內容 */

align-items: center;

left: 30rpx;

height: 104rpx;

bottom: 40rpx;

border-radius: 20rpx;

background-color: rgba(29, 52, 59, 0.4);

backdrop-filter: blur(10rpx);

padding: 0 24rpx;

gap: 5rpx; /* title 與 more-mask 間距 5rpx */

}

.banner-title{

height: 48rpx;

font-weight: 600;

font-size: 34rpx;

color: #FFFFFF;

white-space: nowrap; /* 防止換行 */

}

.more-mask{

flex-shrink: 0;

width: 45rpx;

height: 45rpx;

display: flex;

align-items: center;

justify-content: center;

}

.more-img{

width: 26rpx;

height: 26rpx;

}

/* 標簽 */

.tag-list{

position: absolute;

left: 5rpx;

bottom: 114rpx;

display: flex;

flex-wrap: wrap;

gap: 10rpx;

align-items: center;

padding: 6rpx 12rpx;

z-index: 1; /* 確保在desc-mask上層 */

}

.tag-mask{

display: inline-flex; /* 行內彈性布局 */

align-items: center;

background: rgba(0, 0, 0, 0.4);

border-radius: 22rpx;

height: 44rpx;

padding: 5rpx 15rpx;/* 動態寬度由內容撐開 */

}

.tag{

font-weight: 500;

font-size: 20rpx;

color: #E0ED42;

line-height: 28rpx;

text-align: justify;

/* 確保文字不換行 */

white-space: nowrap;

margin-right: 5rpx;

}

/* 收藏、轉發 */

.action-bar-wrapper {

position: absolute;

right: 30rpx;

bottom: 30rpx;

width: 60rpx;

height: 380rpx;

z-index: 999;

}

.action-bar {

width: 100%;

height: 100%;

display: flex;

flex-direction: column;

align-items: center;

justify-content: space-between;

gap: 20rpx;

}


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/91266.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/91266.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/91266.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Kafka——關于主題管理

引言在Kafka的世界中&#xff0c;主題&#xff08;Topic&#xff09;是消息的基本組織單位&#xff0c;類似于文件系統中的"文件夾"——所有消息都按照主題分類存儲&#xff0c;生產者向主題寫入消息&#xff0c;消費者從主題讀取消息。主題的管理是Kafka運維的基礎&…

【VLLM】VLLM使用

一 、安裝 二、啟動入口 VLLM 提供了多種入口方式啟動模型&#xff0c;以適應不同的使用場景&#xff08;如命令行交互、API 服務、自定義集成等&#xff09;。除了最常用的 openai.api_server&#xff08;OpenAI 兼容 API 服務&#xff09;&#xff0c;還有以下主要入口&#…

為Github Copilot創建自定義指令/說明/注意事項

GitHub Copilot 是一個強大的 AI 編程助手&#xff0c;通過合理配置自定義指令&#xff0c;可以讓它更好地理解和遵循項目特定的編碼規范&#xff0c;省的每次提問時輸入重復提示語。 目錄 方法一&#xff1a;項目級別指令文件&#xff08;推薦&#xff09;方法二&#xff1a…

信創厚知聯盟會長兼創始人蒞臨綠算技術

2025年7月29日&#xff0c;信創厚知聯盟會長兼創始人王杲一行考察廣東省綠算技術有限公司&#xff0c;重點調研其在智算中心存儲與AI算力協同領域的創新成果。此次交流標志著雙方在信創產業生態合作上邁出重要一步&#xff0c;為國產高端高性能全閃存存儲與智算基礎設施的融合發…

RAG面試內容整理-Prompt Engineering 在 RAG 中的作用

Prompt Engineering(提示工程)指為生成模型精心設計輸入提示,以引導模型產生所需的輸出。在RAG系統中,prompt設計對充分利用檢索到的知識至關重要。因為生成器(通常是LLM)接收到的不僅有用戶問題,還有檢索的文檔內容,我們需要通過提示明確告訴模型如何使用這些信息。例…

【計算機網絡】5傳輸層

傳輸層是面向通信的最高層&#xff0c;也是用戶功能的最底層。 傳輸層僅存在于主機中&#xff0c;路由器等中間設備只用到下三層&#xff08;無傳輸層&#xff09;。傳輸層對上層應用隱藏了底層網絡的復雜細節&#xff08;比如數據怎么路由、網絡怎么連接等&#xff09;。對應用…

SecureCRT連接密鑰交換失敗

SecureCRT連接密鑰交換失敗問題描述&#xff1a;問題分析&#xff1a;解決方案&#xff1a;問題描述&#xff1a; SecureCRT6.7連接銀河麒麟操作系統v10版本&#xff0c;報錯如下&#xff1a; key exchange failed 密鑰交換失敗 no compatible key exchange method. The serv…

2021-05-10 求出這十個數據的平均值,并輸入高于平均值的所有元素值及下標求出這十個數據的平均值,并輸入高于平均值的所有元素值及下標

緣由C語言向一維數組a[10]中輸入10個數據&#xff1a;12&#xff0c;15&#xff0c;18&#xff0c;21&#xff0c;24&#xff0c;32&#xff0c;34&#xff0c;36&#xff0c;38&#xff0c;4-其他-CSDN問答 double a[10000]{}, j 0; int n 0;while (n < 10000){std::cin …

WordPress與主流CMS拿Webshell實戰

一、wordpress安裝環境首先我們在vulhub中啟動我們wordpress的doaker容器然后去訪問我們的80端口然后選擇簡體中文進行安裝然后就可以登錄到我們的后臺界面了后臺修改模板拿webshell進入后臺&#xff0c;我們修改一下404頁面的代碼&#xff0c;添加我們的一句話木馬然后保存&am…

指針的運算與數組

一、指針的運算1.1加法對指針可以進行加法運算&#xff0c;即p n或者p - n。其結果依舊是一個是一個指針&#xff0c;新的指針是在原來的地址值基礎上加上/減去n *(sizeof(指針指向的數據類型)&#xff09;個字節。 指針也可以進行自增&#xff0c;即*&#xff08;p &#xf…

【PostgreSQL內核學習:WindowAgg 幀優化與節點去重】

PostgreSQL內核學習&#xff1a;WindowAgg 幀優化與節點去重背景關鍵詞解釋本優化主要修改內容描述提交信息提交描述源碼解讀optimize_window_clauses 函數核心邏輯拆解函數時序圖新增結構體類型 SupportRequestOptimizeWindowClause優化后的效果幀優化 sql 用例查詢計劃輸出節…

行業要聞|正式落地!新思科技宣布完成對Ansys的收購

2025年7月17日——新思科技&#xff08;Synopsys, Inc.&#xff0c;納斯達克股票代碼&#xff1a;SNPS&#xff09;宣布完成對Ansys的收購。該交易旨在整合芯片設計、IP核以及仿真與分析領域的領先企業&#xff0c;助力開發者快速創新AI驅動的產品。在擴大至310億美元的總潛在市…

Elasticsearch 基礎速成 5 步跑通索引、文檔、映射與查詢

1 準備工作運行環境 curl -fsSL https://elastic.co/start-local | sh # 一條命令拉起本地單節點集群 # 瀏覽器打開 http://localhost:5601 進入 Kibana → DevTools → Console已有云端或 Serverless 集群可以直接跳到第 2 步。操作界面 以下所有請求均可在 Kibana → DevT…

語音表示學習論文總結

語音表示學習&#xff08;Speech Representation Learning&#xff09;是語音信號處理與機器學習交叉領域的核心技術&#xff0c;其目標是通過數據驅動的方式&#xff0c;從原始語音信號中自動提取具有判別性、魯棒性和泛化能力的特征表示&#xff0c;以替代傳統手工設計的聲學…

國產芯+單北斗防爆終端:W5-D防爆智能手機,助力工業安全通信升級

在石油石化、煤礦開采、電力檢修等高危行業&#xff0c;防爆設備的定位精度、通信可靠性及供應鏈安全性直接決定作業安全與生產效率。傳統防爆手機依賴GPS定位與進口芯片&#xff0c;存在信號盲區、數據泄露風險及斷供隱患。針對此&#xff0c;我們推出W5-D防爆智能終端&#x…

Kafka簡述及學習課程

Kafka是由Apache軟件基金會開發的一個開源流處理平臺&#xff0c;由Scala和Java編寫。Kafka是一種高吞吐量的分布式發布訂閱消息系統&#xff0c;它可以處理消費者在網站中的所有動作流數據。 這種動作&#xff08;網頁瀏覽&#xff0c;搜索和其他用戶的行動&#xff09;是在現…

BLE PHY 幀結構

BLE&#xff08;低功耗藍牙&#xff09;的 PHY&#xff08;物理層&#xff09;幀結構根據傳輸模式&#xff08;廣播、數據&#xff09;和 PHY 類型&#xff08;1M、2M、Coded PHY&#xff09;有所差異&#xff0c;但基本框架一致。以下是 BLE PHY 幀的通用結構及各部分含義&…

海外貨運 app 系統架構分析

一、引言海外貨運業務涉及眾多復雜環節&#xff0c;從貨物攬收、倉儲管理、運輸調度到最后交付&#xff0c;需要一個高效、穩定且功能全面的 APP 系統來協調各方資源&#xff0c;提升物流效率&#xff0c;保障貨物安全準確送達。本文將對海外貨運 APP 系統架構進行詳細剖析&…

【硬件-筆試面試題】硬件/電子工程師,筆試面試題-52,(知識點:簡單一階低通濾波器的設計,RC濾波電路,截止頻率)

目錄 1、題目 2、解答 3、相關知識點 一、一階低通濾波器的核心原理 1. 電路結構 2. 關鍵特性參數 二、一階低通濾波器的設計步驟&#xff08;以 RC 電路為例&#xff09; 1. 確定截止頻率\(f_c\) 2. 選擇電阻 R 的阻值 3. 計算電容 C 的容值 4. 驗證與調整 三、典…

防火墻安全實驗

一、實驗拓補圖二、實驗需求1、VLAN 2屬于辦公區;VLAN 3屬于生產區2、辦公區PC在工作日時間(周一至周五&#xff0c;早8到晚6)可以正常訪OA Server&#xff0c;其他時間不允許3、辦公區PC可以在任意時刻訪問Web server4、生產區PC可以在任意時刻訪問OA Server&#xff0c;但是不…