網(wǎng)站首頁 編程語言 正文
用于IVR視頻回播的時間選擇插件,刻度尺的實現(xiàn)參考了vue語法css實現(xiàn)刻度尺,為項目微信小程序制作。基于uni-app
開發(fā)。目前沒找到類似的插件,所以才動手實現(xiàn)了一個,是不是做視頻的同行太少了,還是你們太低調(diào)了。
其實這個可以做成前端通用組件的,因為本人項目只在微信小程序使用此插件,就先做成小程序版本了,其它平臺沒試過,但是估計都能用。
和 live-player 配合使用,播放視頻挺流暢的。
功能
- 24小時刻度尺,30分鐘分隔
- 有錄像的時間段在刻度尺上標識(支持多個時間段)
- 回傳刻度無錄像時間段時間值、刻度有錄像時間段時間值(用于接口獲取播放視頻)
- 目前刻度尺返回值精確到秒
- 自動回滾最后有錄像時間段
效果圖
有錄像的時間段在刻度尺上標識(支持多個時間段)實現(xiàn)思路
(純粹記錄下,怕自己忘記了,肯定會忘記的)
傳參是以時間段的方式,每段錄像的開始時間、結(jié)束時間為一組。以開始時間、結(jié)束時間在刻度尺上的位置,渲染一段帶顏色的view
,就能實現(xiàn)多個時間段在刻度尺上的標識。
代碼實現(xiàn)思路
處理渲染用的開始時間、結(jié)束時間數(shù)組,形成新的時間段,每個時間段由以下3個元素組成:
1、開始時間位置距(0點)距離,這里代號a
以0點為原點,找到開始時間在刻度尺上的位置,算法在utils.js
文件的dateToGrid
方法里。難點主要是24小時刻度尺上px
長度和真實時間之間的轉(zhuǎn)換。
t1
算出開始時間的位置在刻度尺上占多少px
格子,然后乘每個格子的寬度,就得到開始時間位置距原點距離poi
let poi = t1 * this.single
2、時間段在刻度尺上的長度,這里代號b
t2
算出結(jié)束時間的位置在刻度尺上占多少px
格子,t2
減t1
就是時間段在刻度尺上的長度len
了。
let len = (t2-t1).toFixed(2) * this.single
3、結(jié)束時間距(0點)的距離,這里代號c
這個有2種算法:
- 1、開始時間位置
poi
加時間段長度len
let left = poi + len
- 2、計算結(jié)束時間位置距開始時間(0點)距離
let left = t2 * this.single
頁面渲染
<view class="scale-active">
<view class='scale-active-time' v-for="(it, idt) in newActiveTime" :key="idt" :style="{marginLeft: idt>0?newActiveTime[idt][0]-newActiveTime[idt-1][2] + 'px':newActiveTime[idt][0] + 'px'}">
<view class="scale-active-item" :style="{width: it[1] + 'px'}" />
</view>
</view>
scale-active-time
主要是定位時間段開始渲染的位置。
- newActiveTime[idt][0] + ‘px’
第一個時間段開始渲染的位置就是a
- newActiveTime[idt][0]-newActiveTime[idt-1][2] + ‘px’
>0
的時間段,用下一個時間段的開始時間位置a
減去上一個時間段結(jié)束時間位置c
,就可以得到下一個時間段開始渲染的位置
scale-active-item
每個時間段view
的寬度width
以上,就是時間刻度尺上標識帶錄像時間段的思路了。
使用
頁面引入
import videoTimeSlider from '@/uni_modules/video-time-slider/components/video-time-slider/video-time-slider.vue'
頁面調(diào)用
<video-time-slider :curDate="2021-11-29"
:activeTime="[['01:12', '03:43'],['05:22', '07:33'],['12:02', '17:39']]"
@value="curValue"
@active-value="activeValue" />
export default {
components: {
videoTimeSlider
},
data() {
return {
curVal: '00:00'
};
},
methods: {
curValue(msg) {
this.curVal = msg
},
activeValue(msg) {
console.log(666, msg)
}
}
};
具體看例子
參數(shù)說明
參數(shù)名 | 默認值 | 說明 |
---|---|---|
curDate | 2021-11-24 | 日期 |
activeTime | [] | 時間段,標識可播放錄像 |
styles | {…} | 自定義卡尺樣式 |
style選項
參數(shù)名 | 默認值 | 說明 |
---|---|---|
line | #dbdbdb | 刻度顏色 |
bginner | #fbfbfb | 前景色顏色 |
bgoutside | #dbdbdb | 背景色顏色 |
lineSelect | #ea3639 | 選中線顏色 |
fontColo | #404040 | 刻度數(shù)字顏色 |
fontSiz | 12 | 字體大小 |
方法說明
事件名稱 | 說明 | 返回參數(shù) |
---|---|---|
@value | 刻度無錄像時間段時間值 | 時間值字符串 |
@active-value | 刻度有錄像時間段時間值 | 時間值字符串 |
版本要求
- 微信 App iOS 最低版本要求:6.5.21 。
- 微信 App Android 最低版本要求:6.5.19。
- 小程序基礎(chǔ)庫最低版本要求:1.7.0。
注意
如果微信開發(fā)者工具報以下錯誤
TypeError: Cannot read property 'forceUpdate' of undefined
manifest.json
文件配置下微信小程序的AppID就行了,不用在意
總結(jié)
已上插件市場 video-time-slider
市場上的代碼可能會忘記更新,具體看代碼了,github上的代碼是最新的 video-time-slider
原文鏈接:https://blog.csdn.net/liyoro/article/details/122415013
相關(guān)推薦
- 2022-06-23 C#中的小數(shù)和百分數(shù)計算與byte數(shù)組操作_C#教程
- 2023-05-10 python中使用numpy包的向量矩陣相乘np.dot和np.matmul實現(xiàn)_python
- 2022-12-14 Python桌面文件清理腳本分享_python
- 2023-11-26 String字符串類
- 2022-04-18 騰訊im中調(diào)用 setMessageRead 會話列表中的未讀消息還在存在
- 2022-11-22 Golang分布式鎖詳細介紹_Golang
- 2022-08-10 go?字符串修改的操作代碼_Golang
- 2022-07-12 Samba安裝與配置流程
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支