123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- <template>
- <view class="root" :style="{width,height}">
- <image :style="{width,height}" class="posterImg" :src="posterUrl" mode="aspectFit"></image>
- <view :style="{width,height}" @click="state=!state" class="box">
- <image class="playIcon" :src="imgUrl+'/play.png'" mode="widthFix"></image>
- </view>
- <video :id="videoId" :style="{height,width:state?'750rpx':'1rpx'}" @pause="state=0" @timeupdate="timeupdate" @fullscreenchange="fullscreenchange" class="video" :src="url"></video>
- <!-- <progress :style="{'top':height,width}" class="progress" :percent="currentTime?parseInt(currentTime/duration*100):0" show-info border-radius="5" active></progress> -->
- </view>
- </template>
- <script>
- export default {
- computed:{
- posterUrl(){
- if(this.poster) return this.poster
- return this.url + '?x-oss-process=video/snapshot,t_'+(parseInt(this.currentTime*1000))+',f_jpg,w_800,m_fast,ar_auto'
- }
- },
- created() {
- this.videoId = Date.now() + Math.ceil(Math.random()*10000000)+"";
- },
- mounted() {
- this.VideoContext = uni.createVideoContext(this.videoId)
- },
- methods:{
- fullscreenchange(e){
- console.log(e.detail.fullScreen);
- this.state = e.detail.fullScreen
- },
- timeupdate(e){
- console.log(e.detail);
- this.duration = e.detail.duration
- this.currentTime = e.detail.currentTime
- }
- },
- watch: {
- state(state, oldValue) {
- console.log(state,'state');
- if(!state){
- this.VideoContext.pause()
- }else{
- this.VideoContext.play()
- this.$nextTick(()=>{
- this.VideoContext.requestFullScreen({direction:this.direction})
- })
- }
- }
- },
- data() {
- return {
- VideoContext:{},
- state:false,
- currentTime:0,
- duration:0,
- videoId:'',
- imgUrl: this.$mConfig.staticUrl
- };
- },
- props: {
- poster: {
- type: [String,Boolean],
- default(){
- return ''
- }
- },
- url: {
- type: String,
- default(){
- return ''
- }
- },
- direction: {
- type: Number,
- default(){
- return 0
- }
- },
- width: {
- type: String,
- default(){
- return "750rpx";
- }
- },
- height: {
- type: String,
- default(){
- return "450rpx";
- }
- }
- },
- }
- </script>
- <style lang="scss" scoped>
- /deep/.uni-video-container{
- width: 0;
- height: 0;
- }
- .root{
- position:relative;
- width: 750rpx;
- height: 300px;
- overflow: hidden;
- }
- .posterImg,.video,.box{
- display: flex;
- width: 750rpx;
- height: 300px;
- //border: solid 1px red;absolute
- position:absolute;
- }
- .posterImg{
- //border: solid red 1px;
- }
- .box{
- justify-content: center;
- align-items: center;
- }
- .playIcon{
- width: 100rpx !important;
- }
- </style>
|