Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
L
learn-online
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
learn-online
Commits
73b56315
提交
73b56315
authored
7月 16, 2021
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat:视频播放增加跳过片头和自动连播功能
上级
60b493dc
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
124 行增加
和
4 行删除
+124
-4
dots-vertical.png
learnOnline/assets/images/dots-vertical.png
+0
-0
video.js
learnOnline/components/player/behaviors/video.js
+39
-4
video.wxml
learnOnline/components/player/video.wxml
+12
-0
video.wxss
learnOnline/components/player/video.wxss
+41
-0
player.js
learnOnline/pages/course/player.js
+31
-0
player.wxml
learnOnline/pages/course/player.wxml
+1
-0
没有找到文件。
learnOnline/assets/images/dots-vertical.png
0 → 100644
浏览文件 @
73b56315
449 Bytes
learnOnline/components/player/behaviors/video.js
浏览文件 @
73b56315
...
...
@@ -9,7 +9,7 @@ module.exports = Behavior({
properties
:
{
src
:
{
type
:
String
},
controls
:
{
type
:
Boolean
,
value
:
true
},
// 控制栏
autoplay
:
{
type
:
Boolean
,
value
:
fals
e
},
// 自动播放
autoplay
:
{
type
:
Boolean
,
value
:
tru
e
},
// 自动播放
loop
:
{
type
:
Boolean
,
value
:
false
},
// 循环播放
muted
:
{
type
:
Boolean
,
value
:
false
},
// 静音
startTime
:
{
type
:
Number
,
value
:
0
},
// 初始播放时间
...
...
@@ -29,7 +29,11 @@ module.exports = Behavior({
showControls
:
true
,
showCenterPlay
:
true
,
playbackRateList
:
[
0.5
,
0.8
,
1.0
,
1.25
,
1.5
,
2.0
],
playbackRateVisible
:
false
playbackRateVisible
:
false
,
setVisible
:
false
,
skipTime
:
5
,
// 片头时间
isSkip
:
true
,
// 跳过片头
isAutoNext
:
true
// 自动连播
},
observers
:
{
src
()
{
...
...
@@ -65,6 +69,10 @@ module.exports = Behavior({
* */
lifetimes
:
{
attached
()
{
const
isSkip
=
wx
.
getStorageSync
(
'isSkip'
)
?
true
:
false
const
isAutoNext
=
wx
.
getStorageSync
(
'isAutoNext'
)
?
true
:
false
this
.
setData
({
isSkip
,
isAutoNext
})
this
.
createPlayer
()
// wx.onNetworkStatusChange(res => {
// if (res.networkType !== 'wifi' && this.data.status === 'playing') {
...
...
@@ -155,7 +163,7 @@ module.exports = Behavior({
// 监听播放结束
onEnded
(
e
)
{
this
.
updateStatus
(
'ended'
)
this
.
triggerEvent
(
'ended'
)
this
.
triggerEvent
(
'ended'
,
this
.
data
.
isAutoNext
)
this
.
data
.
showCenterPlayBtn
&&
this
.
setData
({
showCenterPlay
:
true
})
// 全屏中退出全屏
this
.
data
.
isFullscreen
&&
this
.
exitFullScreen
()
...
...
@@ -187,7 +195,14 @@ module.exports = Behavior({
onLoadedMetaData
(
e
)
{
const
{
duration
}
=
e
.
detail
this
.
setData
({
duration
})
console
.
log
(
'video'
,
'onloadedmetadata'
)
console
.
log
(
'video'
,
'onloadedmetadata'
,
duration
)
if
(
this
.
data
.
startTime
&&
this
.
data
.
startTime
<
Math
.
floor
(
duration
))
{
console
.
log
(
'seek'
,
this
.
data
.
startTime
)
this
.
seek
(
this
.
data
.
startTime
)
}
else
if
(
this
.
data
.
isSkip
)
{
console
.
log
(
'skip'
,
this
.
data
.
skipTime
)
this
.
seek
(
this
.
data
.
skipTime
)
}
},
onFullScreenChange
()
{
this
.
triggerEvent
(
'fullscreenchange'
)
...
...
@@ -234,6 +249,26 @@ module.exports = Behavior({
const
{
rate
}
=
e
.
currentTarget
.
dataset
this
.
setData
({
playbackRate
:
rate
,
playbackRateVisible
:
false
})
this
.
playbackRate
(
rate
)
},
// 显示设置
showSet
()
{
this
.
setData
({
showControls
:
false
,
setVisible
:
true
})
},
toggleSet
()
{
let
setVisible
=
!
this
.
data
.
setVisible
this
.
setData
({
setVisible
})
},
// 跳过片头
onChangeSkip
(
e
)
{
let
isSkip
=
!
this
.
data
.
isSkip
this
.
setData
({
isSkip
})
wx
.
setStorageSync
(
'isSkip'
,
isSkip
)
},
// 自动连播
onChangeAutoNext
(
e
)
{
let
isAutoNext
=
!
this
.
data
.
isAutoNext
this
.
setData
({
isAutoNext
})
wx
.
setStorageSync
(
'isAutoNext'
,
isAutoNext
)
}
}
})
learnOnline/components/player/video.wxml
浏览文件 @
73b56315
...
...
@@ -51,6 +51,12 @@
bindtap="switchAudio"
hidden="{{ !hasBackgroundAudio }}"
></image>
<!-- 设置 -->
<image
src="/assets/images/dots-vertical.png"
class="toolbar-button toolbar-button__set"
bindtap="showSet"
></image>
</view>
</view>
<view class="controls" wx:if="{{ controls }}">
...
...
@@ -135,6 +141,12 @@
</block>
</view>
</view>
<view class="set" hidden="{{ !setVisible }}" bindtap="toggleSet">
<view class="set-list">
<view class="set-item {{ isSkip ? 'is-active' : '' }}" catchtap="onChangeSkip">跳过片头</view>
<view class="set-item {{ isAutoNext ? 'is-active' : '' }}" catchtap="onChangeAutoNext">自动连播</view>
</view>
</view>
</block>
<slot></slot>
...
...
learnOnline/components/player/video.wxss
浏览文件 @
73b56315
...
...
@@ -54,6 +54,11 @@
width: 36rpx;
height: 30rpx;
}
.toolbar-button__set {
width: 40rpx;
height: 40rpx;
padding: 30rpx;
}
.controls {
position: absolute;
left: 0;
...
...
@@ -238,3 +243,39 @@
.rate-item.is-active {
color: #f47885;
}
.set {
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
z-index: 100;
}
.set-list {
position: absolute;
top: 0;
right: 0;
bottom: 0;
display: flex;
flex-direction: column;
justify-content: center;
background: linear-gradient(90deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.6) 100%);
width: 300rpx;
}
.is-fullscreen .set-list {
padding-right: env(safe-area-inset-bottom);
background-color: #000;
}
.set-item {
font-size: 30rpx;
line-height: 54rpx;
color: #fff;
text-align: center;
}
.is-fullscreen .set-item {
padding: 10rpx 0;
}
.set-item.is-active {
color: #f47885;
}
learnOnline/pages/course/player.js
浏览文件 @
73b56315
...
...
@@ -45,6 +45,21 @@ Page({
},
videoPlayUrl
(
data
)
{
return
data
.
video
.
SD
||
data
.
video
.
LD
||
data
.
video
.
FD
},
// 章节扁平数据
flatChapters
(
data
)
{
const
chapters
=
data
.
course
.
chapters
||
[]
return
chapters
.
reduce
((
result
,
item
)
=>
{
return
[...
result
,
...
item
.
children
]
},
[])
},
// 下一节
nextChapter
(
data
)
{
const
index
=
data
.
flatChapters
.
findIndex
(
item
=>
item
.
id
===
data
.
activeChapter
.
id
)
if
(
index
!==
-
1
)
{
return
data
.
flatChapters
[
index
+
1
]
}
return
null
}
},
onLoad
:
function
(
options
)
{
...
...
@@ -126,6 +141,22 @@ Page({
// 更新chapter
this
.
updateActiveChapter
(
chapter
)
},
// 播放结束
onEnded
(
e
)
{
const
isAutoNext
=
e
.
detail
// 自动连播
if
(
isAutoNext
&&
this
.
data
.
nextChapter
)
{
// 结束后上传最后一次
if
(
this
.
data
.
throttled
)
{
this
.
data
.
throttled
.
cancel
()
this
.
updateChapterVideoProgress
()
}
// 清除上传进度
this
.
clearProgressStatus
()
// 更新chapter
this
.
updateActiveChapter
(
this
.
data
.
nextChapter
)
}
},
// 当前播放时间更新
onTimeupdate
(
e
)
{
let
{
currentTime
}
=
e
.
detail
...
...
learnOnline/pages/course/player.wxml
浏览文件 @
73b56315
...
...
@@ -6,6 +6,7 @@
autoplay="{{ autoplay }}"
bindtimeupdate="onTimeupdate"
bindswitchAudio="onSwitchVideo"
bindended="onEnded"
wx:if="{{ hasVideo }}"
></player-video>
<player-audio
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论