亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

vue video和vue-video-player實(shí)現(xiàn)視頻鋪滿教程

 更新時(shí)間:2020年10月30日 10:49:51   作者:小孬種  
這篇文章主要介紹了vue video和vue-video-player實(shí)現(xiàn)視頻鋪滿教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

網(wǎng)頁(yè)放置視頻播放器,我一般都是用video.js和它的插件vue-video-player

一:Video.js

需求:對(duì)于簡(jiǎn)單的視頻播放需求來(lái)說(shuō),video.js足以勝任了。

它可是支持HTML5和Flash的視頻播放器呦。

1:安裝video.js

npm install -s video.js

2:在main.js文件中引入相關(guān)文件

import Video from 'video.js'
import 'video.js/dist/video-js.css'
Vue.prototype.$video = Video

3:在組件中使用

<template>
 <div class="video_text">
  <video
   id="myVideo"
   class="video-js"
  >
   <source
    :src="videoUrl"
    type="video/mp4"
   >
  </video>
 </div>
</template>
<script>
 export default {
  name: "Video",
  data() {
   return {
    videoUrl:'...',//視頻地址
   };
  },
  mounted() {
   this.initVideo(); //初始化視頻播放器
  },
  methods: {
   initVideo() {
    //初始化視頻方法
    let myPlayer = this.$video(myVideo, {
     //是否顯示控制欄
     controls: true,
     //是否自動(dòng)播放,muted:靜音播放
     autoplay: false,
     //是否靜音播放
     muted:false,
     //是否流體自適應(yīng)容器寬高
     fluid:true,
     //設(shè)置視頻播放器的顯示寬度(以像素為單位)
     width: "800px",
     //設(shè)置視頻播放器的顯示高度(以像素為單位)
     height: "400px"
    });
   }
  }
 };
</script>
<style lang="less">
 .video_text{
  width: 70%;
  margin: 0 auto;
 }
 video:focus{
  outline: 0;   //去掉選中藍(lán)框
 }
 .video-js .vjs-big-play-button{
  /*對(duì)播放按鈕的樣式進(jìn)行設(shè)置*/
  width: 100px;
  height: 60px;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate3d(-50%,-50%,0);
 }
</style>

4:效果圖

5:附上video.js的一些基本方法

myPlayer.ready(function(){
 //視頻播放器初始化完成后的回調(diào)函數(shù),this代表當(dāng)前播放器,可以在這進(jìn)行一系列的操作(myPlayer為我視頻播放器對(duì)象)
 myPlayer.play(); //播放
 myPlayer.pause(); //暫停
 var currentTime = myPlayer.currentTime(); //當(dāng)前播放進(jìn)度
 myPlayer.currentTime(120); //自定義修改當(dāng)前進(jìn)度
 var duration = myPlayer.duration(); //加載完成視頻后就可以獲取視頻總時(shí)長(zhǎng)了,注意:在flash情況下無(wú)效!
 var buffered = myPlayer.buffered(); //視頻緩沖,返回值為下載了多大文件
 var bufferedPercent = myPlayer.bufferedPercent(); //視頻緩沖,返回值為下載了百分之幾
 var volume = myPlayer.volume(); //獲取視頻音量大小,值在0-1之間
 myPlayer.volume(0.2); //設(shè)置視頻音量大小
 var width = myPlayer.width(); //獲取視頻的寬度
 myPlayer.width(640); //設(shè)置視頻的寬度
 var howTallIsIt = myPlayer.height(); //獲取視頻的高度
 myPlayer.height(200); //設(shè)置視頻高度
 myPlayer.size(640,480); //同時(shí)設(shè)置視頻高寬
 myPlayer.enterFullScreen(); //視頻全屏顯示
 myPlayer.enterFullScreen(); //視頻退出全屏顯示
})

除此之外,我們還可以綁定監(jiān)聽(tīng)事件:

//視頻播放完畢的回調(diào)事件
myPlayer.on("ended", function(){
 console.log("end", this.currentTime());
});
//視頻暫停的回調(diào)事件 
myPlayer.on("pause", function(){
 console.log("pause")
});
//視頻刪除事件
myPlayer.removeEvent(“eventName”, function(){
 console.log("delete")
});

二:vue-video-player

1:下載vue-video-player

npm install -s vue-video-player

2:在main.js中引入相關(guān)文件

import VideoPlayer from 'vue-video-player'
require('video.js/dist/video-js.css')
require('vue-video-player/src/custom-theme.css')
//引入 hls,視頻直播(m3u8)必須引入的
import 'videojs-contrib-hls'
//播放rtmp視頻
import 'videojs-flash'
//如果你需要自定義播放器的樣式,自己新建一個(gè)css
require('./assets/css/video_css/myvideo.css')
Vue.use(VideoPlayer)

3:組件中使用(有點(diǎn)長(zhǎng),其實(shí)多數(shù)是列出的一些回調(diào)函數(shù)而已,不需要使用的話忽略掉即可)

<template>
 <div class="my_video">
  <video-player class="video-player vjs-custom-skin"
          ref="videoPlayer"
          :playsinline="true"
          :options="videoPlayerOptions"
          @play="onPlayerPlay($event)"
          @pause="onPlayerPause($event)"
          @ended="onPlayerEnded($event)"
          @waiting="onPlayerWaiting($event)"
          @playing="onPlayerPlaying($event)"
          @loadeddata="onPlayerLoadeddata($event)"
          @timeupdate="onPlayerTimeupdate($event)"
          @canplay="onPlayerCanplay($event)"
          @canplaythrough="onPlayerCanplaythrough($event)"
          @statechanged="playerStateChanged($event)"
          @ready="playerReadied"
  ></video-player>
 </div>
</template>

<script>
 // 導(dǎo)入組件
 import {videoPlayer} from 'vue-video-player'

 export default {
  name: 'VideoPlayer',
  components: {
   videoPlayer
  },
  data () {
   return {
    video:'',     //具體視頻
    fileType: 'mp4', // 資源的類型
    videoUrl: '', // 資源的路徑地址
    posterUrl:'' //封面地址
   }
  },
  mounted(){
   
  },
  methods:{
   // 播放回調(diào)
   onPlayerPlay(player) {
    //console.log('player play!', player)
   },

   // 暫?;卣{(diào)
   onPlayerPause(player) {
    //console.log('player pause!', player)
   },

   // 視頻播完回調(diào)
   onPlayerEnded($event) {
    this.$refs.videoPlayer.player.src(this.fileUrl)
   },

   // DOM元素上的readyState更改導(dǎo)致播放停止
   onPlayerWaiting($event) {
    //console.log(player)
   },

   // 已開(kāi)始播放回調(diào)
   onPlayerPlaying($event) {
    // console.log(player)
   },

   // 當(dāng)播放器在當(dāng)前播放位置下載數(shù)據(jù)時(shí)觸發(fā)
   onPlayerLoadeddata($event) {
    // console.log(player)
   },

   // 當(dāng)前播放位置發(fā)生變化時(shí)觸發(fā)。
   onPlayerTimeupdate($event) {
    //console.log(player)
   },

   //媒體的readyState為HAVE_FUTURE_DATA或更高
   onPlayerCanplay(player) {
    // console.log('player Canplay!', player)
   },

   //媒體的readyState為HAVE_ENOUGH_DATA或更高。這意味著可以在不緩沖的情況下播放整個(gè)媒體文件。
   onPlayerCanplaythrough(player) {
    // console.log('player Canplaythrough!', player)
   },

   //播放狀態(tài)改變回調(diào)
   playerStateChanged(playerCurrentState) {
    //console.log('player current update state', playerCurrentState)
   },

   //將偵聽(tīng)器綁定到組件的就緒狀態(tài)。與事件監(jiān)聽(tīng)器的不同之處在于,如果ready事件已經(jīng)發(fā)生,它將立即觸發(fā)該函數(shù)。。
   playerReadied(player) {
    //console.log('example player 1 readied', player);
   },
  },
  computed: {
   videoPlayerOptions () {
    const videoPlayerOptions = {
     playbackRates: [0.75, 1.0, 1.25, 1.5,2.0], //播放速度
     autoplay: false, // 是否自動(dòng)播放。
     muted: false, // 是否靜音播放,默認(rèn)情況下將會(huì)消除任何音頻。
     loop: false, // 是否循環(huán)播放。
     preload: 'auto', // 建議瀏覽器在<video>加載元素后是否應(yīng)該開(kāi)始下載視頻數(shù)據(jù)。auto瀏覽器選擇最佳行為,立即開(kāi)始加載視頻(如果瀏覽器支持)
     language: 'zh-CN',
     aspectRatio: '3:1', // 將播放器置于流暢模式,并在計(jì)算播放器的動(dòng)態(tài)大小時(shí)使用該值。值應(yīng)該代表一個(gè)比例 - 用冒號(hào)分隔的兩個(gè)數(shù)字(例如"16:9"或"4:3")
     fluid: true, // 是否流體從而按比例縮放以適應(yīng)其容器。
     flash:{hls:{withCreadentials:false}},//可以播放rtmp視頻
     html5:{hls:{withCreadentials:false}},//可以播放m3u8視頻
     sources: [{
      type: 'video/' + this.fileType,
      src: this.videoUrl // 視頻url地址
     }],
     poster: this.posterUrl, // 封面地址
     width: '100%',
     notSupportedMessage: '此視頻暫無(wú)法播放...', // 當(dāng)無(wú)法播放時(shí)允許覆蓋Video.js,顯示的默認(rèn)信息。
     controlBar: {
      timeDivider: true,
      durationDisplay: true,
      remainingTimeDisplay: false,
      fullscreenToggle: true
     }
    }
    return videoPlayerOptions
   }
  },
 }
</script>
<style scoped lang="less">
 .my_video{
  width: 100%;
  height: calc(100vh - 100px);
  background-color: white;
 }
 .video-js .vjs-big-play-button{
  /*對(duì)播放按鈕的樣式進(jìn)行設(shè)置*/
  width: 100%;
  height: 100%;
  border-radius: 50%;
 }
</style>

4:效果圖

一些改進(jìn):

1:消除視頻兩邊留白,也就是實(shí)現(xiàn)視頻鋪滿父元素

通過(guò)添加樣式object-fit:fill;來(lái)實(shí)現(xiàn)視頻鋪滿

video{
   width: 100% !important;
   height: calc(100vh - 95px) !important;
   object-fit:fill;  //消除留白
  }

效果圖:(視頻左右兩邊是沒(méi)有黑邊了的)

補(bǔ)充object-fit取值的相關(guān)知識(shí):

fill:此值為boject-fit的默認(rèn)值,替換內(nèi)容的大小被設(shè)置為填充元素的內(nèi)容框,也就是說(shuō),元素的內(nèi)容擴(kuò)大到完全填充容器的外形尺寸,即使這打破其內(nèi)在的寬高比。

contain:替換元素內(nèi)容大小保持長(zhǎng)寬比例填充元素內(nèi)容容器,其具體對(duì)象大小被解析為一個(gè)包含元素的寬度和高度。也就是說(shuō),如果你在替換元素上設(shè)置一個(gè)明確的高度和寬度,此值將導(dǎo)致內(nèi)容大小,完全在固定的比例顯示,但仍在元素尺寸內(nèi)顯示。

cover:替換元素內(nèi)容大小保持長(zhǎng)寬比例填充元素內(nèi)容容器,其具體對(duì)象大小被解析為覆蓋整個(gè)元素的寬度和高度。也就是說(shuō),替換元素內(nèi)容大小保持長(zhǎng)寬比,但改變寬度和高度,以便完全覆蓋內(nèi)容元素。

none:替換元素內(nèi)容不調(diào)整大小以適應(yīng)內(nèi)部元素的容器,內(nèi)容完全忽略設(shè)置在元素上的任何高度和權(quán)重,并且仍在元素尺寸內(nèi)顯示。 scale-down:當(dāng)內(nèi)容大小設(shè)置了none或contain,將導(dǎo)致具體對(duì)象變得更小。

2:實(shí)現(xiàn)自適應(yīng)高寬

通過(guò)上面設(shè)置的fluid:true雖然可以自適應(yīng)寬高,但有時(shí)候需求是規(guī)定視頻總高度的,如果只是靠fluid來(lái)自適應(yīng)是遠(yuǎn)遠(yuǎn)不夠的。

我的需求效果圖:

pc端:

移動(dòng)端:

我遇到的問(wèn)題:

設(shè)置video視頻高寬100%后,總高度卻超出了那個(gè)位置的高度,試了很多方法都不行,后來(lái)就才去了簡(jiǎn)單粗暴的方法去解決–修改css樣式。(覺(jué)得有用再用吧各位)

注意:這里我是去掉了之前在videoPlayerOptions中設(shè)置的fluid:true和aspectRatio: '16:10'再改css樣式的

html代碼:

<div class="my_video">
  <video-player class="video-player vjs-custom-skin"
          id="videoDiv"
          ref="videoPlayer"
          :playsinline="true"
          :webkit-playsinline="true"
          :options="videoPlayerOptions"
  ></video-player>
 </div>

自定義css樣式:

@media screen and(min-width:768px){ //pc端視頻鋪滿且占據(jù)整個(gè)容器的高寬,而移動(dòng)端不需要視頻占據(jù)整個(gè)高度,因?yàn)闀?huì)拉長(zhǎng)視頻,很難看

  video{
   width: 100% !important;
   height: calc(100vh - 95px) !important; //我的容器高度設(shè)置的是100vh-95px,你們根據(jù)你們?nèi)萜鞲叨仍O(shè)置視頻高度即可
   object-fit:fill;  //消除兩邊留白
  }
 }
 //為了填滿整個(gè)my_video的高度,設(shè)置video外層div高度(就是移動(dòng)端效果圖包含黑色部分和視頻部分的整個(gè)div),使之為容器高度
 #videoDiv>div{
  height: calc(100vh - 95px) !important;
  overflow: hidden;
 }
 .my_video{  //這是我放視頻播放器的容器
  width: 100%;
  height: calc(100vh - 95px);
  background-color: white;
 }

補(bǔ)充知識(shí):vue中使用 vue-video-player的幾個(gè)問(wèn)題

video.js 插件在vue中是 vue-video-player;

我們?cè)趘ue中播放視頻可以使用這個(gè)插件;

下面簡(jiǎn)單描述幾個(gè)使用中的問(wèn)題,不涉及其他問(wèn)題:

1、自定義播放處理 , 我們自己如何去觸發(fā)播放這個(gè)事件

2、播放,停止觸發(fā)的函數(shù)相關(guān)處理;

3、在安卓的微信中播放視頻不能播放的問(wèn)題;

1、自定義播放,假設(shè)現(xiàn)在自己寫(xiě)了一個(gè)button, 或者其他什么東西放在視頻上方,要求點(diǎn)擊這個(gè)玩意兒播放視頻,

你也可以理解為播放按鈕; 那么首先肯定得綁定事件,vue綁定事件就不說(shuō)了,應(yīng)該都會(huì),那么在這個(gè)綁定的

事件函數(shù)中,我們?nèi)绾稳ゲシ乓曨l呢?:this.$refs.videoPlayer.player.play(); 就可以了

2、播放或者停止播放時(shí),我想怎加一些額外的處理,那么可以在 <video-player @play=... @pause...>

如下代碼,在相應(yīng)的函數(shù)中處理即可,還有其它的事件也都類似處理;

3、在<video-player :playsinline =....> 設(shè)置 playsinline 參數(shù)的時(shí)候,如果我們?cè)O(shè)置為true 或者 false 是會(huì)出問(wèn)題的,

所以需要根據(jù)情況進(jìn)行處理,這里的情況一般是微信瀏覽器的 x5內(nèi)核,需要設(shè)置為 false, 其它的設(shè)置為 true 即可;

如果微信的 x5 設(shè)置為 true , 那么在安卓中微信環(huán)境下是無(wú)法播放的,是有問(wèn)題的;

下面的代碼是部分代碼,僅供參考設(shè)置:

<template>
  <div class="video">
    <video-player class="video-player-box"
         ref="videoPlayer"
         :options="playerOptions"
         :playsinline="playsinline"
         customEventName="customstatechangedeventname"
         @play="onPlayerPlay($event)"
         @pause="onPlayerPause($event)"
    >
    </video-player>
  </div>
</template> 
 
<script>
import 'video.js/dist/video-js.css'
import { videoPlayer } from 'vue-video-player'
 
export default {
  name: 'Video',
  props: {
    videoUrl: Object
  },
  data() {
    return{
      playerOptions: {
        playbackRates: [0.7, 1.0, 1.5, 2.0],
        autoplay: false,
        muted: false,
        loop: false,
        preload: 'auto', 
        language: 'zh-CN',
        aspectRatio: '16:9',
        fluid: true, 
        sources: [{
          type: "video/mp4",
          src: "https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm"
        }],
        poster: "http://localhost/547be638615da10.png",
        width: document.documentElement.clientWidth,
        notSupportedMessage: '此視頻暫無(wú)法播放,請(qǐng)稍后再試',
        controlBar: {
          timeDivider: true,
          durationDisplay: true,
          remainingTimeDisplay: false,
          fullscreenToggle: true //全屏按鈕
        }
      },
      videoButton: require("../video_player.png"),
    }
  },
  components: {
    videoPlayer
  },
  mounted() {
   
   this.playerOptions.sources[0].src = this.videoUrl.a;
   this.playerOptions.poster = this.videoUrl.b
  },
  computed: {
   player() {
    return this.$refs.videoPlayer.player
   },
 
   playsinline(){
    var ua = navigator.userAgent.toLocaleLowerCase();
    if (ua.match(/tencenttraveler/) != null || ua.match(/qqbrowse/) != null) {
      return false
    }else{
      return true       
    }
   }
 
  },
  methods: {
    clickStartButton: function(){
      this.$refs.videoPlayer.player.play();
    },
    onPlayerPlay(player) {
      this.videoPlayState = true;
    }
  }
}
</script>

以上這篇vue video和vue-video-player實(shí)現(xiàn)視頻鋪滿教程就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論