国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
寫在前面" >寫在前面
一、外層ui布局" >一、外層ui布局
二、播放器ui" >二、播放器ui
三、實(shí)現(xiàn)自定義controlBar功能" >三、實(shí)現(xiàn)自定義controlBar功能
首頁 web前端 js教程 vue-video-player自定義播放器步驟詳解

vue-video-player自定義播放器步驟詳解

May 03, 2018 pm 04:13 PM
播放器 自定義

這次給大家?guī)韛ue-video-player自定義播放器步驟詳解,vue-video-player自定義播放器的注意事項(xiàng)有哪些,下面就是實(shí)戰(zhàn)案例,一起來看一下。

圖1--顯示側(cè)邊欄

圖2-收起側(cè)邊欄;

圖三:全屏。

寫在前面

本次項(xiàng)目中需要用到vue,vue-video-player,我用的是iview的ui框架,但是ui框架無妨,這里關(guān)注的是基于video.js開發(fā)的vue-video-player的使用,以及如何操作video.js中的api。

vue-video-player 項(xiàng)目地址:https://github.com/surmon-china/vue-video-player。

video.js文檔地址:http://docs.videojs.com/docs/api/player.html。

項(xiàng)目目錄:

一、外層ui布局

圖一中可以看到,本次項(xiàng)目使用的是兩欄自適應(yīng)布局,其中,右側(cè)為播放列表,固定寬度500px,左邊是播放器box,播放列表box可根據(jù)手柄點(diǎn)擊展開或收起,而播放器box也跟隨播放列表的展開/收縮進(jìn)行寬度自適應(yīng)。

(因錄制動(dòng)畫太大傳不上,可clone我的程序下來運(yùn)行可見)。

html代碼結(jié)構(gòu)如此:

收縮展開的時(shí)候加上一個(gè)過度動(dòng)畫,這里選擇使用css手寫動(dòng)畫:

[css] view plain copy
.transition{  
       transition: all 1s ease;  
       -moz-transition: all 1s ease;  
       -webkit-transition: all 1s ease;   
       -o-transition: all 1s ease;   
   }  
[css] view plain copy
.toLeft{  
        .transition;  
        
margin-right
: 540px !important;  
    }  
    .toRight{  
        .transition;  
        margin-right: 40px !important;  
    }  
    .toHide{  
        .transition;  
        right: -500px !important;  
    }  
    .toShow{  
        .transition;  
        right: 0px !important;  
    }  
[css] view plain copy
// 播放區(qū)  
    .player-box{  
        margin-right: 540px;  
        height: 100%;  
        position: relative;  
         
    }  
    [css] view plain copy
//側(cè)邊信息區(qū)  
    .info-box{  
        width: 520px;  
        height: 100%;  
        background: transparent;      
        position: relative;  
        overflow: hidden;  
    } 
[css] view plain copy
// 內(nèi)容區(qū)  
.content{  
    background: #292929;  
    position: relative;  
    padding: 20px 0 20px 20px;  
  
}

二、播放器ui

整個(gè)自定義的播放器ui封裝成了一個(gè)組件--CostomVedio.vue,播放區(qū)使用的是vue-video-player的播放器,但是底部控制欄是自定義的,不使用播放器自帶的controlBar,通常通用的這些都不符合設(shè)計(jì)哥哥的要求,所以我們需要自定義播放器UI。

html結(jié)構(gòu)代碼如下:

[html] view plain copy
<template>  
    <p class="custom-video-outer-box" @mouseover="videoMouseOver">  
      <video-player  class="video-player-box"  
                 ref="videoPlayer"  
                 :options="playerOptions"  
                 :playsinline="true"  
                 customEventName="customstatechangedeventname"  
                 @play="onPlayerPlay($event)"  
                 @pause="onPlayerPause($event)"  
                 @ended="onPlayerEnded($event)"  
                 @waiting="onPlayerWaiting($event)"  
                 @playing="onPlayerPlaying($event)"  
                 @loadeddata="onPlayerLoadeddata($event)"     
                 @timeupdate="onPlayerTimeupdate($event)"  
                 @statechanged="playerStateChanged($event)"  
                 @ready="playerReadied"  
                 >  
                   
                  <!-- @canplay="onPlayerCanplay($event)" -->  
                   <!-- @canplaythrough="onPlayerCanplaythrough($event)" -->  
                  
       </video-player>  
       <!-- 底部進(jìn)度條 start -->  
         <transition name="fade">  
                <p class="bottomCtrl" v-show="isBottomCtrlShow" id="bottomCtrl">  
                    <!--  -->  
                    <!-- <p class="bottomCtrl" v-show="false"> -->  
                <!-- <p class="bottomCtrl"  > -->  
                      
                    <Slider v-model="playerCtrl.currentTimeInt" class="progress-slider" :max="playerCtrl.durationInt" :tip-format="progressTipFormat" @on-change="progressChange"></Slider>  
                    <p class="clearfix" >  
                        <p class="left">  
                                <!-- 暫停 -->  
                                <span v-on:click="play" v-if="!playerCtrl.isPlay" class="icon">  
                                    <Icon type="play"></Icon>  
                                </span>  
                                <!-- 播放 -->  
                                <span v-else v-on:click="pause" class="icon">  
                                     <Icon type="stop"></Icon>  
                                </span>  
                                 
                                <!-- 下一曲 -->  
                                <span class="icon" v-on:click="nextClick">  
                                    <Icon type="skip-forward"></Icon>  
                                </span>  
                                      <span>  
                                {{playerCtrl.currentTime}}/{{playerCtrl.duration}}  
                            </span>  
                        </p>  
                        <p class="right clearfix">  
                                <p class="voice-box clearfix left">   
                                    <!-- 音量 -->  
                                    <Icon type="volume-medium" class="left icon"></Icon>  
                                    <Slider v-model="playerCtrl.voiceSlider" class="voice-slider left " max=100 @on-change="volumeChange"></Slider>  
                                </p>  
                                 <!-- 全屏 -->  
                                 <span class="icon left" @click="fullScreenHandle">  
                                    <Icon type="crop" ></Icon>  
                                 </span>  
                        </p>  
                    </p>  
                </p>  
         </transition>  
       </p>  
  </template> 
具體思路就是,使用播放器鋪滿播放區(qū),使用position定位將自定義的controlBar固定在播放區(qū)的底部,這里注意controlBar的z-index一定要足夠大,否則在全屏的時(shí)候不在最上層看不到。
css樣式:
[css] view plain copy
<style>  
    .video-player-box{  
        height: 100% !important;  
        width: 100% !important;  
    }  
    //底部進(jìn)度條  
    .bottomCtrl{  
        line-height: 60px;  
        height: 60px;  
        overflow: visible;  
        position: absolute;  
        bottom: 0;  
        left: 0;  
        background-color: rgba(45, 45, 45, .92);  
        width: 100%;  
        padding: 0 50px;  
        color: #fff;  
        z-index: 999999999999999;  
  
        .icon{  
            font-size: 16px;  
            line-height: 60px;  
            cursor: pointer;  
        }  
  
        .icon+.icon{  
            margin-left: 20px;  
        }  
    }  
    .custom-video-outer-box{  
        position: relative;  
        height: 100%;  
        width: 100%;  
    }  
    .progress-slider{  
        position: absolute;  
        width: 100%;  
        top: 0;  
        left: 0;  
        height: 18px;  
        line-height: 18px;  
        .ivu-slider-wrap{  
            margin: 0 !important;  
            border-radius: 0 !important;  
        }  
        .ivu-slider-button-wrap{  
             line-height: normal !important;  
        }  
        .ivu-slider-button{  
            height: 8px !important;  
            width: 8px !important;  
             
        }  
    }  
    .voice-box{  
        .voice-slider{  
            width: 100px;  
            margin-left: 20px;  
        }  
        .ivu-slider-wrap{  
            margin: 27px 0 !important;  
        }  
  
    }  
    .time{  
        margin-left: 25px;  
    }  
    .full-screen{  
       margin-left: 25px;  
        line-height: 60px;  
    }  
    
    .ivu-progress-outer{  
        padding: 0 10px !important;  
    }  
      
    .vjs-big-play-button{  
        height: 80px !important;  
        width: 80px !important;  
        line-height: 80px !important;  
        text-align: center;  
        background:rgba(0, 0, 0, 0.8) !important;  
        border-radius: 50% !important;  
        top: 50% !important;  
        left: 50% !important;  
        margin-left: -40px !important;  
        margin-top: -40px !important;  
    }  
    #vjs_video_3{  
        max-height: 100% !important;  
        width: 100% !important;  
        height: 100% !important;  
    }  
    .video-player-box>p{  
        height: 100% !important;  
        width: 100% !important;  
    }  
    .video-js .vjs-big-play-button{  
        font-size: 5em !important;  
    }  
    video{  
        max-height: 100% !important;  
  
    }  
     
</style>

三、實(shí)現(xiàn)自定義controlBar功能

接下來就是實(shí)現(xiàn)自定義controlBar的功能,如播放,暫停,下一曲,播放進(jìn)度,剩余時(shí)間,全屏,音量調(diào)節(jié)等。

這里我們肯定要先看video.js的相應(yīng)api了,雖然是英文的但是上邊寫的很清楚,很容易看明白。

video.js api文檔地址:http://docs.videojs.com/docs/api/player.html

1. 播放,暫停,下一曲,全屏主要就是監(jiān)聽我們添加的自定義按鈕click事件,然后調(diào)用播放器API執(zhí)行相應(yīng)操作,并改變狀態(tài)。

[javascript] view plain copy
// 播放  
 play(){  
     this.player.play();  
 },  
 // 暫停  
 pause(){  
      this.player.pause();  
 },  
 //下一曲  
 nextClick(){  
     console.log("自定義","下一曲點(diǎn)擊");  
      
 },  
 //全屏  
 fullScreenHandle(){  
     console.log("全屏");  
     if(!this.player.isFullscreen()){  
         this.player.requestFullscreen();  
         this.player.isFullscreen(true);  
     }else{  
          this.player.exitFullscreen();  
          this.player.isFullscreen(false);  
     }  
 },

當(dāng)然,在vue-video-player中的播放器會(huì)在回調(diào)方法中監(jiān)聽狀態(tài)的變化:

[html] view plain copy
<video-player  class="video-player-box"  
                ref="videoPlayer"  
                :options="playerOptions"  
                :playsinline="true"  
                customEventName="customstatechangedeventname"  
                @play="onPlayerPlay($event)"  
                @pause="onPlayerPause($event)"  
                @ended="onPlayerEnded($event)"  
                @waiting="onPlayerWaiting($event)"  
                @playing="onPlayerPlaying($event)"  
                @loadeddata="onPlayerLoadeddata($event)"     
                @timeupdate="onPlayerTimeupdate($event)"  
                @statechanged="playerStateChanged($event)"  
                @ready="playerReadied"  
                >  
                  
                 <!-- @canplay="onPlayerCanplay($event)" -->  
                  <!-- @canplaythrough="onPlayerCanplaythrough($event)" -->  
                 
      </video-player>

我們可以根據(jù)這些狀態(tài)變化,相應(yīng)的改變我們的UI,比如播放時(shí)顯示“暫停”按鈕,暫停時(shí)顯示“播放”等功能。

2.播放進(jìn)度,剩余時(shí)間,音量調(diào)節(jié)

播放進(jìn)度的話是根據(jù)在播放器onPlayerTimeupdate()回調(diào)方法中,通過currentTime這個(gè)方法來獲取當(dāng)前播放的進(jìn)度時(shí)間,單位S,因?yàn)檫@里我使用的是slider,進(jìn)度都是整數(shù)計(jì)算,所以這里我需要兩個(gè)變量存放,一個(gè)是整數(shù)形式,另一個(gè)是格式化好時(shí)分秒之后的string形式,用以顯示。

[javascript] view plain copy
//時(shí)間更新    
           onPlayerTimeupdate(player){  
               this.playerCtrl.currentTime=timeUtil.secondToDate(player.currentTime());  
               this.playerCtrl.currentTimeInt=Math.floor(player.currentTime());  
               console.log("當(dāng)前音量",player.volume());  
           },

定點(diǎn)播放,即用戶點(diǎn)擊進(jìn)度條某個(gè)地方,即可在這個(gè)點(diǎn)進(jìn)度播放,使用的是slider的
[html] view plain copy
@on-change="progressChange"?

這個(gè)方法監(jiān)聽slider定點(diǎn),

[javascript] view plain copy
//進(jìn)度條被拉動(dòng)  
           progressChange(val){  
               this.player.currentTime(val);  
               this.playerCtrl.currentTimeInt=val;  
               this.playerCtrl.currentTime=timeUtil.secondToDate(val);  
           },

拿到定點(diǎn)的值,然后通過player的currentTime設(shè)置跳到定點(diǎn)播放。
音量調(diào)節(jié)的做法跟播放進(jìn)度相似:

一開始初始化的時(shí)候記得配置

[javascript] view plain copy
muted:false,//開始聲音

來開啟聲音,否則靜音狀態(tài)下調(diào)節(jié)聲音無效。

使用player.volume(val)這個(gè)api設(shè)置音量,其中val=0,表示聲音off,val=1表示聲音最大,0.5表示聲音設(shè)置在half。

四:總結(jié)

最后在app.vue/需要用到這個(gè)播放器的地方 引入自定義播放器組件即可。vue-video-player是大神基于video.js開發(fā)的適用于vue.js框架的組件,具有良好兼容性,所以我們?cè)趘ue中使用這個(gè)播放器組件本質(zhì)還是使用video.js,我們要更多的去了解video.js中的api并使用他。

相信看了本文案例你已經(jīng)掌握了方法,更多精彩請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!

推薦閱讀:

Bootstrap中使用WebUploader步驟詳解

Vue.js中computed使用詳解

以上是vue-video-player自定義播放器步驟詳解的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
如何在Netflix中快速設(shè)置自定義頭像 如何在Netflix中快速設(shè)置自定義頭像 Feb 19, 2024 pm 06:33 PM

Netflix上的頭像是你流媒體身份的可視化代表。用戶可以超越默認(rèn)的頭像來展示自己的個(gè)性。繼續(xù)閱讀這篇文章,了解如何在Netflix應(yīng)用程序中設(shè)置自定義個(gè)人資料圖片。如何在Netflix中快速設(shè)置自定義頭像在Netflix中,沒有內(nèi)置功能來設(shè)置個(gè)人資料圖片。不過,您可以通過在瀏覽器上安裝Netflix擴(kuò)展來實(shí)現(xiàn)此目的。首先,在瀏覽器上安裝Netflix擴(kuò)展的自定義個(gè)人資料圖片。你可以在Chrome商店買到它。安裝擴(kuò)展后,在瀏覽器上打開Netflix并登錄您的帳戶。導(dǎo)航至右上角的個(gè)人資料,然后單擊

VLC Chromecast無法在Windows PC上運(yùn)行 VLC Chromecast無法在Windows PC上運(yùn)行 Mar 26, 2024 am 10:41 AM

VLCChromecast功能在您的WindowsPC上不起作用嗎?此問題可能是由Chromecast設(shè)備與VLC的鑄造功能之間的兼容性問題引起的。在這篇文章中,我們將告訴你在這種情況下你可以做什么,以及如果VLC渲染器找不到你的Chromecast該怎么辦。如何在Windows上使用ChromecastVLC?要使用VLC將視頻從Windows投射到Chromecast,請(qǐng)遵循以下步驟:打開媒體播放器應(yīng)用程序,轉(zhuǎn)到播放菜單。導(dǎo)航到Renderer選項(xiàng),您將能夠看到檢測(cè)到的Chromecast設(shè)

如何在Python中創(chuàng)建和自定義Venn圖? 如何在Python中創(chuàng)建和自定義Venn圖? Sep 14, 2023 pm 02:37 PM

維恩圖是用來表示集合之間關(guān)系的圖。要?jiǎng)?chuàng)建維恩圖,我們將使用matplotlib。Matplotlib是一個(gè)在Python中常用的數(shù)據(jù)可視化庫,用于創(chuàng)建交互式的圖表和圖形。它也用于制作交互式的圖像和圖表。Matplotlib提供了許多函數(shù)來自定義圖表和圖形。在本教程中,我們將舉例說明三個(gè)示例來自定義Venn圖。Example的中文翻譯為:示例這是一個(gè)創(chuàng)建兩個(gè)維恩圖交集的簡(jiǎn)單示例;首先,我們導(dǎo)入了必要的庫并導(dǎo)入了venns。然后我們將數(shù)據(jù)集創(chuàng)建為Python集,之后,我們使用“venn2()”函數(shù)創(chuàng)

Win11如何自定義背景圖片 Win11如何自定義背景圖片 Jun 30, 2023 pm 08:45 PM

Win11如何自定義背景圖片?在最新發(fā)布的win11系統(tǒng)中,里面有許多的自定義功能,但是很多小伙伴不知道應(yīng)該如何使用這些功能。就有小伙伴覺得背景圖片比較單調(diào),想要自定義背景圖,但是不知道如何操作自定義背景圖,如果你不知道如何定義背景圖片,小編下面整理了Win11自定義背景圖片步驟,感興趣的話一起往下看看把!Win11自定義背景圖片步驟1、點(diǎn)擊桌面win按鈕,在彈出的菜單中點(diǎn)擊設(shè)置,如圖所示。2、進(jìn)入設(shè)置菜單,點(diǎn)擊個(gè)性化,如圖所示。3、進(jìn)入個(gè)性化,點(diǎn)擊背景,如圖所示。4、進(jìn)入背景設(shè)置,點(diǎn)擊瀏覽圖片

如何在裝有 iOS 17 的 iPhone 上的 Apple Music 中啟用和自定義交叉淡入淡出 如何在裝有 iOS 17 的 iPhone 上的 Apple Music 中啟用和自定義交叉淡入淡出 Jun 28, 2023 pm 12:14 PM

適用于iPhone的iOS17更新為AppleMusic帶來了一些重大變化。這包括在播放列表中與其他用戶協(xié)作,在使用CarPlay時(shí)從不同設(shè)備啟動(dòng)音樂播放等。這些新功能之一是能夠在AppleMusic中使用交叉淡入淡出。這將允許您在曲目之間無縫過渡,這在收聽多個(gè)曲目時(shí)是一個(gè)很棒的功能。交叉淡入淡出有助于改善整體聆聽體驗(yàn),確保您在音軌更改時(shí)不會(huì)受到驚嚇或退出體驗(yàn)。因此,如果您想充分利用這項(xiàng)新功能,以下是在iPhone上使用它的方法。如何為AppleMusic啟用和自定Crossfade您需要最新的

win10播放器進(jìn)度條不動(dòng) win10播放器進(jìn)度條不動(dòng) Feb 12, 2024 am 08:12 AM

Windows10v1809十月更新版正朝著史上最糟糕Windows升級(jí)義無反顧地沖過去,不但第一次正式發(fā)布后緊急撤回,還在重新打造了一個(gè)月之久后仍然Bug層出不窮,讓人對(duì)微軟的品控越來越擔(dān)憂?,F(xiàn)在,它的Bug清單上又多了一項(xiàng),而且這次中招的是微軟自家的媒體播放器WindowsMediaPlayer。近期有網(wǎng)友反饋,在安裝最新補(bǔ)丁后,Windows10v1809的WindowsMediaPlayer出現(xiàn)了無法拖動(dòng)播放進(jìn)度條的問題。目前還沒有找到解決辦法。微軟已確認(rèn)了一個(gè)Bug,涉及兩個(gè)補(bǔ)丁KB4

如何在CakePHP中創(chuàng)建自定義分頁? 如何在CakePHP中創(chuàng)建自定義分頁? Jun 04, 2023 am 08:32 AM

CakePHP是一個(gè)強(qiáng)大的PHP框架,為開發(fā)人員提供了很多有用的工具和功能。其中之一是分頁,它可以幫助我們將大量數(shù)據(jù)分成幾頁,從而簡(jiǎn)化瀏覽和操作。默認(rèn)情況下,CakePHP提供了一些基本的分頁方法,但有時(shí)你可能需要?jiǎng)?chuàng)建一些自定義的分頁方法。這篇文章將向您展示如何在CakePHP中創(chuàng)建自定義分頁。步驟1:創(chuàng)建自定義分頁類首先,我們需要?jiǎng)?chuàng)建一個(gè)自定義分頁類。這個(gè)

Eclipse中自定義快捷鍵設(shè)置的方法 Eclipse中自定義快捷鍵設(shè)置的方法 Jan 28, 2024 am 10:01 AM

如何在Eclipse中自定義快捷鍵設(shè)置?作為一名開發(fā)人員,在使用Eclipse進(jìn)行編碼時(shí),熟練掌握快捷鍵是提高效率的關(guān)鍵之一。Eclipse作為一款強(qiáng)大的集成開發(fā)環(huán)境,不僅提供了許多默認(rèn)的快捷鍵,還允許用戶根據(jù)自己的偏好進(jìn)行個(gè)性化的定制。本文將介紹如何在Eclipse中自定義快捷鍵設(shè)置,并給出具體的代碼示例。打開Eclipse首先,打開Eclipse,并進(jìn)入

See all articles