• 128549

    文章

  • 807

    评论

  • 12

    友链

  • 最近新加了换肤功能,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

vue 视频播放列表 动态创建组件

服了这份高薪指南,涨多少你说了算>>

当点击播放时 整个页面只实例化一个 video 播放视频   使用vue.extend 动态创建

 

创建插件

winplay.vue

<template>
    <div class="winplay">
         <button @click.stop="onClick">点击</button>
    </div>
</template>

<script>
    export default {
        name: "winplay",

        data(){
            return {

            }
        },
        mounted(){
          console.log("winplay"+this.url)
        },
        methods:{
            play(url){
                console.log(url)
            },
            onClick(){
                console.log("click");
            }
        }
    }
</script>

<style scoped>
.winplay{
    background: #ccc;
    z-index: 1000;
}
</style>

play.js

import winplay from './winplay'
import Vue from 'vue'
let winplayComponent = Vue.extend(winplay); //将组件加入构造器

var vm=null;
export default {
    install(Vue) {
        Object.defineProperty(Vue.prototype, "$showPlay", {
            get() {
                return function (od, url) {
                    if(vm){
                        vm.$el.remove() //移除节点


                    }
                    vm = new winplayComponent({
                        //     data() {  data也可以直接覆盖组件的data
                        //         return {
                        //             url:url
                        //         }
                        //     }
                        }
                    ).$mount(document.createElement('div'));
                    vm.play(url); //传递url
                    console.log(vm);
                    od.appendChild(vm.$el)
                }
            },
        })
    }
}

在main.js挂载插件

import Vue from 'vue'
import App from './App.vue'
import 'flex.css'
import play from  './plugin/play.js'
Vue.config.productionTip = false
Vue.use(play)

new Vue({
  render: h => h(App),
}).$mount('#app')

在页面使用播放

<template>
  <div class="index">
        <div class="moves-list" flex="dir:top">
            <div class="moves-list-item" flex="dir:top" v-for="(i,t) of 100">
                <div class="moves-list-item-cover" @click="paly(t)" ref="move" style="background: url('/jq.jpg') no-repeat center;background-size:cover;">
                </div>
                <div class="moves-list-item-option" flex="dir:left">
                    <div class="moves-list-item-option-title" flex-box="2" flex="cross:center ">
                            <p>惊奇队长 高清 1080P 在线播放</p>
                    </div>
                    <div class="moves-list-item-option-ico" flex-box="1"  flex="cross:center main:right">
                         <a href="#">分享</a>
                    </div>
                </div>
            </div>

        </div>
  </div>
</template>

<script>
export default {
  name: 'Index',
    props: {
    msg: String
  },
    data(){
      return{

      }
    },
    methods:{
        paly(i){
            
          this.$showPlay(this.$refs.move[i],i); //动态调用视频播放组件
        }
    }
}
</script>

在页面只会有一个播放video 


695856371Web网页设计师②群 | 喜欢本站的朋友可以收藏本站,或者加入我们大家一起来交流技术!

0条评论

Loading...


发表评论

电子邮件地址不会被公开。 必填项已用*标注

自定义皮肤 主体内容背景
打开支付宝扫码付款购买视频教程
遇到问题联系客服QQ:419400980
注册梁钟霖个人博客