123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- <template>
- <div
- style="width: 100%; height: 100%"
- class="bs-design-wrap"
- >
- <video-player
- ref="videoPlayer1"
- :options="videoOptions"
- class="vjs-custom-skin videoPlayer"
- :playsinline="true"
- />
- </div>
- </template>
- <script>
- import { videoPlayer } from 'vue-video-player'
- import 'video.js/dist/video-js.css'
- import 'videojs-contrib-hls'
- import { refreshComponentMixin } from 'data-room-ui/js/mixins/refreshComponent'
- export default {
- name: 'Video',
- components: { videoPlayer },
- mixins: [refreshComponentMixin],
- props: {
- // 卡片的属性
- config: {
- type: Object,
- default: () => ({})
- }
- },
- computed: {},
- beforeDestroy () {
- this.$refs.videoPlayer1.dispose()
- },
- data () {
- return {
- // TODO 这里介绍各个参数的意义
- videoOptions: {
- live: true,
- // 浏览器准备好时开始回放
- autoplay: false,
- // true:默认视频播放无声音,需要手动开启声音
- muted: false,
- // 播放速度
- playbackRates: [0.5, 1.0, 1.5, 2.0],
- // 语言
- language: 'zh-CN',
- // 当true时,播放器将按比例缩放以适应其容器
- fluid: true,
- // 无法播放时提示信息
- notSupportedMessage: '该视频无法正常播放',
- // 纵横比或屏幕高宽比
- aspectRatio: '16:9',
- controlBar: {
- timeDivider: true,
- durationDisplay: true,
- remainingTimeDisplay: true,
- // 全屏按钮
- fullscreenToggle: true
- },
- // 播放器宽度,测试无效
- // width: 100,
- // 视频封面图
- poster: this.config.customize.posterUrl,
- sources: [
- {
- // 流配置,数组形式,会根据兼容顺序自动切换
- type: this.config.customize.videoType,
- src: this.config.customize.videoUrl
- }
- ]
- },
- dataForm: {
- script: ''
- }
- }
- },
- watch: {},
- mounted () {},
- methods: {
- // 由于静态组件没有混入公共函数,所以需要定义一个changeStyle方法,以免报错
- changeStyle (config) {
- this.videoOptions.sources.type = config.customize.videoType
- this.videoOptions.sources.type = config.customize.videoUrl
- this.videoOptions.poster = config.customize.posterUrl
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- .bs-design-wrap {
- position: relative;
- width: 100%;
- height: 100%;
- background-color: transparent;
- border-radius: 4px;
- box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.1);
- box-sizing: border-box;
- .videoPlayer {
- width: 100%;
- height: 100%;
- display: flex;
- align-items: center;
- }
- }
- /*滚动条样式*/
- ::v-deep ::-webkit-scrollbar {
- width: 4px;
- border-radius: 4px;
- height: 4px;
- }
- ::v-deep ::-webkit-scrollbar-thumb {
- background: #dddddd !important;
- border-radius: 10px;
- }
- ::v-deep .video-js .vjs-big-play-button {
- z-index: 100;
- left: 50%;
- top: 50%;
- transform: translate(-50%, -50%);
- font-size: 4em;
- }
- </style>
|