|
@@ -4,10 +4,13 @@ import iconplay from '@views/attend-class/image/icon-pause.png';
|
|
import iconpause from '@views/attend-class/image/icon-play.png';
|
|
import iconpause from '@views/attend-class/image/icon-play.png';
|
|
import iconReplay from '@views/attend-class/image/icon-replay.png';
|
|
import iconReplay from '@views/attend-class/image/icon-replay.png';
|
|
import iconPreviewDownload from '@views/attend-class/image/icon-preivew-download.png';
|
|
import iconPreviewDownload from '@views/attend-class/image/icon-preivew-download.png';
|
|
|
|
+import iconFullscreen from '@views/attend-class/image/icon-fullscreen.png';
|
|
|
|
+import iconFullscreenExit from '@views/attend-class/image/icon-fullscreen-exit.png';
|
|
import { NSlider, useMessage } from 'naive-ui';
|
|
import { NSlider, useMessage } from 'naive-ui';
|
|
import Vudio from 'vudio.js';
|
|
import Vudio from 'vudio.js';
|
|
import tickMp3 from '@views/attend-class/image/tick.mp3';
|
|
import tickMp3 from '@views/attend-class/image/tick.mp3';
|
|
import { saveAs } from 'file-saver';
|
|
import { saveAs } from 'file-saver';
|
|
|
|
+import { exitFullscreen } from '/src/utils';
|
|
|
|
|
|
export default defineComponent({
|
|
export default defineComponent({
|
|
name: 'audio-play',
|
|
name: 'audio-play',
|
|
@@ -32,8 +35,11 @@ export default defineComponent({
|
|
}
|
|
}
|
|
},
|
|
},
|
|
setup(props) {
|
|
setup(props) {
|
|
|
|
+ const videoId =
|
|
|
|
+ 'vFullscreen' + Date.now() + Math.floor(Math.random() * 100);
|
|
const message = useMessage();
|
|
const message = useMessage();
|
|
const audioForms = reactive({
|
|
const audioForms = reactive({
|
|
|
|
+ isFullScreen: false, // 是否全屏
|
|
paused: true,
|
|
paused: true,
|
|
currentTimeNum: 0,
|
|
currentTimeNum: 0,
|
|
currentTime: '00:00',
|
|
currentTime: '00:00',
|
|
@@ -141,8 +147,38 @@ export default defineComponent({
|
|
vudio1.dance();
|
|
vudio1.dance();
|
|
});
|
|
});
|
|
|
|
|
|
|
|
+ /** 全屏 */
|
|
|
|
+ const isElementFullscreen = (element: any) => {
|
|
|
|
+ const dom: any = document;
|
|
|
|
+ return (
|
|
|
|
+ element ===
|
|
|
|
+ (dom.fullscreenElement ||
|
|
|
|
+ dom.webkitFullscreenElement ||
|
|
|
|
+ dom.mozFullScreenElement ||
|
|
|
|
+ dom.msFullscreenElement)
|
|
|
|
+ );
|
|
|
|
+ };
|
|
|
|
+ const onFullScreen = () => {
|
|
|
|
+ const el: any = document.querySelector('#' + videoId);
|
|
|
|
+
|
|
|
|
+ // //进入全屏
|
|
|
|
+ if (el) {
|
|
|
|
+ if (isElementFullscreen(el)) {
|
|
|
|
+ exitFullscreen();
|
|
|
|
+ audioForms.isFullScreen = false;
|
|
|
|
+ } else {
|
|
|
|
+ (el.requestFullscreen && el.requestFullscreen()) ||
|
|
|
|
+ (el.mozRequestFullScreen && el.mozRequestFullScreen()) ||
|
|
|
|
+ (el.webkitRequestFullscreen && el.webkitRequestFullscreen()) ||
|
|
|
|
+ (el.msRequestFullscreen && el.msRequestFullscreen());
|
|
|
|
+ audioForms.isFullScreen = true;
|
|
|
|
+ }
|
|
|
|
+ // audioForms.isFullScreen = isElementFullscreen(el);
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+
|
|
return () => (
|
|
return () => (
|
|
- <div class={styles.audioWrap}>
|
|
|
|
|
|
+ <div class={styles.audioWrap} id={videoId}>
|
|
<div class={styles.audioContainer}>
|
|
<div class={styles.audioContainer}>
|
|
<audio
|
|
<audio
|
|
ref={audio}
|
|
ref={audio}
|
|
@@ -227,13 +263,21 @@ export default defineComponent({
|
|
</div>
|
|
</div>
|
|
<div class={styles.actionWrap}>
|
|
<div class={styles.actionWrap}>
|
|
{props.isDownload && (
|
|
{props.isDownload && (
|
|
- <button
|
|
|
|
- class={styles.iconReplay}
|
|
|
|
- onClick={onDownload}
|
|
|
|
- style={{ marginLeft: '15px' }}>
|
|
|
|
|
|
+ <button class={styles.iconDownload} onClick={onDownload}>
|
|
<img src={iconPreviewDownload} />
|
|
<img src={iconPreviewDownload} />
|
|
</button>
|
|
</button>
|
|
)}
|
|
)}
|
|
|
|
+ {props.fullscreen && (
|
|
|
|
+ <button class={styles.iconDownload} onClick={onFullScreen}>
|
|
|
|
+ <img
|
|
|
|
+ src={
|
|
|
|
+ audioForms.isFullScreen
|
|
|
|
+ ? iconFullscreenExit
|
|
|
|
+ : iconFullscreen
|
|
|
|
+ }
|
|
|
|
+ />
|
|
|
|
+ </button>
|
|
|
|
+ )}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|