|
@@ -30,10 +30,17 @@
|
|
|
<div class="leftPlayController">
|
|
|
<img @click="handlePlay" :src="require(`./img/${playController.type === 'play' ? 'iconPause' : 'iconPlay'}.png`)" />
|
|
|
<img @click="handleLoop" :src="require(`./img/${playController.loop ? 'iconLoopActive' : 'iconLoop'}.png`)" />
|
|
|
- <el-popover placement="top" trigger="click" :teleported="false" popper-class="palySpeedPopover">
|
|
|
- <template #reference>
|
|
|
- <img src="./img//iconSpeed.png" />
|
|
|
- </template>
|
|
|
+ <img ref="btnSpendDom" src="./img//iconSpeed.png" />
|
|
|
+ <el-popover
|
|
|
+ @show="handlePopoverTimeHide"
|
|
|
+ ref="popoverSpendDom"
|
|
|
+ :virtual-ref="btnSpendDom"
|
|
|
+ trigger="click"
|
|
|
+ placement="top"
|
|
|
+ :teleported="false"
|
|
|
+ popper-class="palySpeedPopover"
|
|
|
+ virtual-triggering
|
|
|
+ >
|
|
|
<div class="sliderSpeedCon">
|
|
|
<img @click="handlePalySpeed(playController.speedStep)" src="./img/jia.png" />
|
|
|
<el-slider
|
|
@@ -62,7 +69,7 @@
|
|
|
<script setup lang="ts">
|
|
|
import TCPlayer from "tcplayer.js"
|
|
|
import "tcplayer.js/dist/tcplayer.min.css"
|
|
|
-import { onMounted, onUnmounted, ref, reactive } from "vue"
|
|
|
+import { onMounted, onUnmounted, ref, reactive, watch } from "vue"
|
|
|
import { UUID } from "@/libs/tools"
|
|
|
import { formatTime } from "./tools"
|
|
|
|
|
@@ -85,6 +92,16 @@ const timeController = reactive({
|
|
|
isDrag: false
|
|
|
})
|
|
|
/* 播放控制器 */
|
|
|
+const btnSpendDom = ref()
|
|
|
+const popoverSpendDom = ref()
|
|
|
+let _popoverSpendTime: any
|
|
|
+// 定时隐藏
|
|
|
+function handlePopoverTimeHide() {
|
|
|
+ _popoverSpendTime && clearTimeout(_popoverSpendTime)
|
|
|
+ _popoverSpendTime = setTimeout(() => {
|
|
|
+ popoverSpendDom.value?.hide()
|
|
|
+ }, 5000)
|
|
|
+}
|
|
|
const playController = reactive<{
|
|
|
type: "play" | "pause"
|
|
|
loop: boolean
|
|
@@ -100,6 +117,13 @@ const playController = reactive<{
|
|
|
speedStep: 0.1,
|
|
|
palySpeed: 1
|
|
|
})
|
|
|
+watch(
|
|
|
+ () => playController.palySpeed,
|
|
|
+ () => {
|
|
|
+ // 值变化 重新计算隐藏时间
|
|
|
+ handlePopoverTimeHide()
|
|
|
+ }
|
|
|
+)
|
|
|
/* 是否显示控制器 */
|
|
|
const isShowController = ref(true)
|
|
|
let _showTimer: any
|
|
@@ -201,14 +225,12 @@ function handlePalySpeed(value: number) {
|
|
|
}
|
|
|
/* 是否显示控制器 */
|
|
|
function handleVideoKeydown(e: KeyboardEvent) {
|
|
|
- console.log("handleVideoKeydown")
|
|
|
const key = e.key
|
|
|
if (key === " ") {
|
|
|
handlePlay()
|
|
|
}
|
|
|
}
|
|
|
function handleVideoMousemove() {
|
|
|
- console.log("handleVideoMousemove")
|
|
|
showController()
|
|
|
}
|
|
|
function showController() {
|
|
@@ -260,7 +282,7 @@ defineExpose({
|
|
|
transition: all 0.5s;
|
|
|
.timeController {
|
|
|
font-weight: 500;
|
|
|
- font-size: 22px;
|
|
|
+ font-size: 20px;
|
|
|
color: #ffffff;
|
|
|
line-height: 30px;
|
|
|
}
|
|
@@ -294,13 +316,13 @@ defineExpose({
|
|
|
}
|
|
|
& > :deep(.palySpeedPopover.el-popover.el-popper) {
|
|
|
min-width: initial;
|
|
|
- width: 65px !important;
|
|
|
- height: 293px;
|
|
|
+ width: 59px !important;
|
|
|
+ height: 264px;
|
|
|
background: url("./img/bg.png") no-repeat;
|
|
|
background-size: 100% 100%;
|
|
|
box-shadow: none;
|
|
|
border: none;
|
|
|
- padding: 15px 0 22px;
|
|
|
+ padding: 12px 0 20px;
|
|
|
.el-popper__arrow {
|
|
|
display: none;
|
|
|
}
|
|
@@ -314,15 +336,15 @@ defineExpose({
|
|
|
& > img {
|
|
|
cursor: pointer;
|
|
|
flex-shrink: 0;
|
|
|
- width: 33px;
|
|
|
- height: 35px;
|
|
|
+ width: 30px;
|
|
|
+ height: 31px;
|
|
|
}
|
|
|
.sliderSpeed.el-slider {
|
|
|
flex-grow: 1;
|
|
|
- padding: 14px 0;
|
|
|
- --el-slider-button-wrapper-offset: -10px;
|
|
|
- --el-slider-button-wrapper-size: 26px;
|
|
|
- --el-slider-button-size: 18px;
|
|
|
+ padding: 10px 0;
|
|
|
+ --el-slider-button-wrapper-offset: -9px;
|
|
|
+ --el-slider-button-wrapper-size: 24px;
|
|
|
+ --el-slider-button-size: 16px;
|
|
|
--el-slider-height: 6px;
|
|
|
--el-slider-border-radius: 4px;
|
|
|
--el-slider-main-bg-color: #ff8057;
|