在Vue 3中,您可以使用video.js库创建自定义的视频播放器。video.js是一个JavaScript和CSS库,用于在所有流行的web浏览器中制作HTML5和Flash视频播放器。下面是一个简单的例子说明如何在Vue 3应用程序中使用video.js。
首先,您需要安装video.js:
npm install video.js
然后,创建一个VideoPlayer组件:
<template>
<div>
<video
ref="videoPlayer"
class="video-js"
controls
preload="auto"
width="640"
height="264"
data-setup="{}"
>
<source :src="videoSrc" type="video/mp4" />
<p class="vjs-no-js">
To view this video please enable JavaScript, and consider upgrading to a
web browser that
<a href="https://videojs.com/html5-video-support/" target="_blank"
>supports HTML5 video</a
>
</p>
</video>
</div>
</template>
<script>
import { onMounted, ref } from 'vue'
import videojs from 'video.js'
import 'video.js/dist/video-js.css'
export default {
props: ['videoSrc'],
setup(props) {
const videoPlayer = ref(null)
onMounted(() => {
videojs(videoPlayer.value, {}, function onPlayerReady() {
console.log('Your player is ready!')
})
})
return {
videoPlayer
}
}
}
</script>
然后,你可以在你的应用中像这样使用VideoPlayer组件:
<template>
<div id="app">
<VideoPlayer videoSrc="/path/to/your/video.mp4" />
</div>
</template>
<script>
import VideoPlayer from './components/VideoPlayer.vue'
export default {
components: {
VideoPlayer
}
}
</script>
在这个例子中,video.js播放器被初始化并绑定到<video>
元素。<video>
元素的ref
属性被用来在Vue 3的setup
函数中获取对实际DOM元素的引用。这个引用随后被传递给video.js的初始化函数,使它可以设置和控制播放器。
另外,你还需要确保在你的项目中正确地引入了video.js的CSS文件,否则播放器可能不会正常显示。如果你使用的是webpack或者类似的模块打包器,你可以直接在VideoPlayer组件的脚本部分导入CSS文件。
video.js 窗口宽高跟随父div变化
要让video.js窗口的宽度和高度跟随其父元素变化,你可以使用CSS来实现这个效果。首先,你需要设置父元素的宽度和高度,然后让video元素继承这些值。
你可以在CSS中为父元素设置宽度和高度,然后为video元素设置width: 100%
和height: 100%
。这将使video元素占据其父元素的全部空间。
.parent-element {
width: /* 宽度值 */;
height: /* 高度值 */;
}
.video-js {
width: 100%;
height: 100%;
}
你还需要在video.js播放器初始化的时候,将fluid
选项设置为true
。这将使得播放器能够响应式地调整大小。
videojs(videoPlayer.value, {fluid: true}, function onPlayerReady() {
console.log('Your player is ready!')
})
这种方式下,如果父元素的大小发生改变,video.js播放器的大小也会相应地调整。
注意:在实际应用中,你可能需要考虑更复杂的布局情况,例如当父元素的宽度和高度都是动态改变的,或者你需要处理更复杂的响应式布局情况。在这种情况下,你可能需要使用更复杂的CSS技巧或者JavaScript来动态调整video.js播放器的大小。
video.js 自动播放静音播放
var player = videojs('my-video', {
autoplay: true,
muted: true
});
video.js视频铺满
铺满前
铺满后
通过object-fit: cover;
实现铺满效果
<template>
<div class="videos">
<video
ref="videoPlayer"
class="video-js"
controls
preload="auto"
width="640"
height="120"
data-setup="{}"
>
<source :src="videoSrc" type="video/mp4"/>
</video>
</div>
</template>
<script>
import {onMounted, ref} from 'vue'
import videojs from 'video.js'
import 'video.js/dist/video-js.css'
export default {
props: ['videoSrc'],
setup(props) {
const videoPlayer = ref(null)
onMounted(() => {
videojs(videoPlayer.value, {
fluid: true,
autoplay: true,
muted: true
}, function onPlayerReady() {
console.log('Your player is ready!')
})
})
return {
videoPlayer
}
}
}
</script>
<style lang="scss">
.videos {
position: relative;
width: 100%;
height: calc(100% - 30px);
.video-js {
width: 100%;
height: 100% !important;
}
.video-js.vjs-fluid {
padding-top: 38%;
}
.video-js .vjs-tech {
object-fit: cover;
}
}
</style>
video.js循环播放视频
要让 video.js
循环播放(loop)视频,有几种方法可以实现这一功能:
1. 使用 HTML 属性
在 <video>
标签中设置 loop
属性:
<video id="my-video" class="video-js" controls loop>
<source src="my-video.mp4" type="video/mp4">
</video>
2. 使用 JavaScript 初始化
在用 JavaScript 初始化 video.js
的时候,设置 loop
为 true
:
var player = videojs('my-video', {
loop: true
});
3. 动态设置
如果你需要在视频播放过程中动态设置循环播放,你可以使用 video.js
的 API:
// 获取 video.js 实例
var player = videojs('my-video');
// 开启循环播放
player.loop(true);
// 关闭循环播放
player.loop(false);
任何一种方法都可以让 video.js
循环播放视频。只需选择最适合你应用场景的方法即可。
video.js vue2写法
<template>
<div class="videos">
<video
ref="videoPlayer"
class="video-js"
controls
preload="auto"
width="640"
height="264"
data-setup="{}"
>
<source :src="videoSrc" type="video/mp4"/>
</video>
</div>
</template>
<script>
import videojs from 'video.js'
import 'video.js/dist/video-js.css'
export default {
props: ['videoSrc'],
data() {
return {
videoPlayer: null
}
},
mounted() {
this.videoPlayer = this.$refs.videoPlayer;
videojs(this.videoPlayer, { fluid: true }, function onPlayerReady() {
console.log('Your player is ready!');
});
},
methods: {
// 播放方法
playVideo() {
if (this.videoPlayer) {
this.videoPlayer.play();
}
}
}
}
</script>
<style lang="scss">
.videos {
position: relative;
width: 100%;
height: calc(100% - 0px);
.video-js {
width: 100%;
height: 100% !important;
padding-top: 0 !important;
}
}
</style>