vue+elementUI走马灯组件+html <video>实现轮播视频,并自定义视频播放按钮完整demo

效果:

 代码:

<template>
  <div class="show-imgs-container" @mouseover="isIn = true" @mouseout="isIn = false">
    <el-carousel :interval="cutTime" arrow="always" :autoplay="autoplay" trigger="click" :indicator-position="autoplay?'':'none'" @change="getIndex">
      <el-carousel-item v-for="(item,index) in videos" :key="index">
        <!--视频播放器 -->
        <video :ref="'videoPlayer' + index" :controls="isIn">
          <source :src="item.src" type="video/mp4">
          您的浏览器不支持Video标签。
        </video>
        <i v-show="!isPlay" class="play-btn el-icon-video-play" @click="playVideo"></i>
        <i v-show="isPlay && isIn" class="play-btn el-icon-video-pause" @click="pauseVideo"></i>
      </el-carousel-item>
    </el-carousel>
  </div>
</template>
<script>
export default {
  props: {
    title: {//模块标题
      type: String,
      default: ""
    }
  },
  data () {
    return {
      autoplay: true,//是否自动切换
      isPlay: false,//播放状态
      isIn: false,//鼠标是否位于播放器内
      cutTime: 5000,//轮播时间,单位毫秒
      nowIndex: 0,
      videos: [
        {
          src: "https://www.runoob.com/try/demo_source/mov_bbb.mp4"
        },
        {
          src: "https://www.runoob.com/try/demo_source/mov_bbb.mp4"
        },
        {
          src: "https://www.runoob.com/try/demo_source/mov_bbb.mp4"
        },
      ]
    }
  },
  mounted () {
    //初始监听第一个视频
    this.listenVideo();
  },
  methods: {
    //获取走马灯的索引
    getIndex (nowIndex, oldIndex) {
      //用户可能在上个视频未播放完毕就切换
      //此时需要暂停上个视频并把时间归零,否则影响对当前视频的监听逻辑
      let myVideo = this.$refs['videoPlayer' + oldIndex];
      myVideo[0].pause();
      myVideo[0].currentTime = 0;
      this.nowIndex = nowIndex;
      this.listenVideo();
    },
    //监听视频的播放、暂停、播放完毕等事件
    listenVideo () {
      //注意:这样获取的dom是一个数组,必须加上[0]索引才能正确的添加事件
      let myVideo = this.$refs['videoPlayer' + this.nowIndex];
      //监听播放
      myVideo[0].addEventListener("play", () => {
        this.autoplay = false;
        this.isPlay = true;
      });
      //监听暂停
      myVideo[0].addEventListener("pause", () => {
        this.autoplay = true;
        this.isPlay = false;
      });
      //监听播放完毕
      myVideo[0].addEventListener("ended", () => {
        //时间归零
        myVideo[0].currentTime = 0;
        this.autoplay = true;
        this.isPlay = false;
      });
    },
    //播放视频
    playVideo () {
      //注意:这样获取的dom是一个数组,必须加上[0]索引才能正确的添加事件
      let myVideo = this.$refs['videoPlayer' + this.nowIndex];
      myVideo[0].play();
    },
    //暂停视频
    pauseVideo () {
      //注意:这样获取的dom是一个数组,必须加上[0]索引才能正确的添加事件
      let myVideo = this.$refs['videoPlayer' + this.nowIndex];
      myVideo[0].pause();
    },
  },
}
</script>
<style lang="scss">
.show-imgs-container {
  height: 100%;

  .el-carousel {
    width: 100%;
    height: 100%;
  }

  .el-carousel__container {
    width: 100%;
    height: 100%;
  }

  .el-carousel__item {
    width: 100%;
    height: 100%;
    border-radius: 10px;
    video {
      width: 100%;
      height: 100%;
      position: fixed;
      display: inline-block;
      vertical-align: baseline;
      object-fit: fill; //消除留白
    }
    .play-btn {
      font-size: 60px;
      color: #fff;
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      &:hover {
        cursor: pointer;
      }
    }
  }
}
</style>

css部分:注意,video层级很高,设置position:fixed,自定义的播放按钮才能覆盖在上

  • 6
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
海康视频是一家致力于提供全面的视频监控解决方案的公司,而VueElementUI是两个在网页应用开发中非常流行的工具。 Vue是一个用于构建用户界面的JavaScript 框架,它采用了组件化的开发思想,可以轻松地构建出复杂的单页应用。Vue具有简洁、灵活、高效的特点,提供了一系列的API来实现数据驱动的视图组件。通过Vue的响应式机制,可以实时更新数据的变化,实现动态渲染页面的效果。 而ElementUI是一个基于Vue的UI组件库,它提供了丰富的组件和样式库,可以帮助开发者快速搭建漂亮、易用的用户界面。ElementUI组件风格简洁大方,使用方便,适合开发各种类型的网页应用。它提供了各种常用的组件,如按钮、表格、对话框等,也支持响应式布局,适应不同设备上的显示。 海康视频结合了VueElementUI,在其视频监控解决方案中应用了这两个工具。通过Vue的数据驱动和响应式机制,可以实时展示监控摄像头的视频画面,并实现视频流的控制,如变焦、调整画面等。ElementUI的丰富组件可以用于构建用户友好的监控界面,如视频播放器、告警列表等。同时,ElementUI的样式库也可以提供统一的风格和美观的界面显示。 综上所述,海康视频利用VueElementUI,可以更加高效地构建出功能强大、用户友好的视频监控界面,为用户提供安全、方便的监控体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值