Vue.js 实战系列之实现视频类WebApp的项目开发——8. 视频自动播放和上滑下拉播放与暂停

如果想看该实战系列的其他内容,请移步至 Vue.js 实战系列之实现视频类WebApp的项目开发

项目仓库地址,欢迎 Star


实现效果


功能实现

  1. 首个视频自动播放

    当你打开抖音APP 时,它首页的视频是自动播放的。我们不能直接修改 vue-video-player 上的 options -> autoplay,因为 autoplaytrue 的话,则所有的视频都会自动播放,我们只需要让数组中的第一个播放就行了,所以我们传递数组的所以给 video 组件,在 video 组件内判断 如果 index 为 0 的话则自动播放。

    1. VideoList.vue
      <Videos> 组件传递当前视频的索引值 index。

      <swiper ref="mySwiper" :options="swiperOptions">
        <swiper-slide v-for="(item , index) in dataList" :key="index">
          <Videos :video="item" :index="index"></Videos>
          <div class="info-bar">
            <InfoBar :infoName="item.author" :infoDesc="item.desc" :infoMusic="item.music"></InfoBar>
          </div>
          <div class="right-bar">
            <RightBar></RightBar>
          </div>
        </swiper-slide>
        <div class="swiper-pagination" slot="pagination"></div>
      </swiper>
      
    2. Videos.vue
      在组件中接收父组件传入的 index 的值,判断是否为第一个视频自动播放。

      <script>
      import 'video.js/dist/video-js.css';
      import { videoPlayer } from 'vue-video-player';
      
      export default {
          components: {
              videoPlayer,
          },
          props: ['video', 'index'], //video 是数据 index标识自动播放第一个视频
          data() {
            return {
              // videojs options
              playerOptions: {
                  // 默认情况下将会消除任何音频。
                  muted: true,
                  // 如果true,浏览器准备好时开始回放。
                  autoplay: false,
                  // 导致视频一结束就重新开始。
                  loop: true,
                  preload: 'auto',
                  // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器.
                  fluid: true,
                  sources: [{
                      type: 'video/mp4', // 类型
                      // src: require('@/assets/videos/sucai.mp4'),
                      src: this.video.url,
                  }],
                  // 视频宽度,获取客户端宽度
                  width: document.documentElement.clientWidth,
                  // 允许覆盖Video.js无法播放媒体源时显示的默认信息。
                  notSupportedMessage: '此视频暂无法播放,请稍后再试',
                  controlBar: false,
              },
              // 用于判断当前视频是否处于播放状态
              palying: true,
            };
          },
          created() {
              this.autoPlayAction();
          },
          methods: {
            // 自动播放第一个视频
            autoPlayAction() {
              if (this.index === 0) {
                this.playerOptions.autoplay = true;
              }
            },
         },
      };
      </script>
      
  2. 视频的播放与暂停

    vue-video-player 组件播放与暂停的api
    parse:暂停
    play:播放

    1. Videos.vue

      methods: {
        // 视频播放或暂停
        playOrStop() {
          if (this.palying) {
            // 如果视频处于播放状态 则点击时 暂停此视频的播放
            this.$refs.videoPlayer.player.pause();
            // 设置播放标识为未播放
            this.palying = false;
          } else {
            // 如果视频处于暂停状态 则点击时 继续视频的播放
            this.$refs.videoPlayer.player.play();
            // 设置播放标识为正在播放
            this.palying = true;
          }
        },
      },
      
    2. VideoList.vue

      <template>
        <div class="video-list">
          <swiper ref="mySwiper" :options="swiperOptions">
            <swiper-slide v-for="(item , index) in dataList" :key="index">
              <Videos ref="videos" :video="item" :index="index"></Videos>
      		// ...
            </swiper-slide>
          </swiper>
        </div>
      </template>
      
      <script>
      data() {
        return {
          swiperOptions: {
            // swiper组件提供的方法
            on: {
              tap: () => {
                this.playAction(this.page - 1);
                console.log('点击: ', this.page);
              },
              slidePrevTransitionStart: () => {
                if (this.page > 1) {
                  this.page -= 1;
                }
                this.playAction(this.page - 1);
                console.log('下拉:', this.page);
              },
              slideNextTransitionStart: () => {
                this.page += 1;
                this.playAction(this.page - 1);
                console.log('上滑:', this.page);
              },
            },
          },
          // 标识翻页
          page: 1,
        };
      },
      methods: {
        playAction(index) { // index 当前屏幕上显示的视频是第几个视频
          // 调用videos组件的playOrStop 方法
          this.$refs.videos[index].playOrStop();
        },
      },
      </script>
      
  3. 控制上滑、下滑视频的播放与暂停

    methods 中声明两个方法,play()播放方法、stop()暂停方法,控制视频的播放与暂停

    1. Videos.vue

      部分代码:

      methods: {
        // 播放
        play() {
          this.$refs.videoPlayer.player.play();
          this.palying = true;
        },
        // 暂停
        stop() {
          this.$refs.videoPlayer.player.pause();
          this.palying = false;
        },
      },
      
    2. VideoList.vue

      methods 属性声明两个方法:

      • nextVideo:用户上滑时暂停当前正在播放的视频并自动播放下一个视频;
      • preVideo:用户下拉时暂停当前正在播放的视频并自动播放上一个视频;
      data() {
            return {
              swiperOptions: {
                // swiper组件提供的方法
                on: {
                  tap: () => {
                    this.playAction(this.page - 1);
                    console.log('点击: ', this.page);
                  },
                  // 上滑 当屏幕向上滑动时
                  slidePrevTransitionStart: () => {
                    if (this.page > 1) {
                      this.page -= 1;
                      this.preVideo(this.page - 1);
                    }
                  },
                  // 下滑动 当屏幕向下滑动时
                  slideNextTransitionStart: () => {
                    this.page += 1;
                    this.nextVideo(this.page - 1);
                  },
                },
              },
              // 标识翻页
              page: 1,
            };
          },
          methods: {
            playAction(index) {
              // index 当前屏幕上显示的视频是第几个视频
              // 调用videos组件的playOrStop 方法
              this.$refs.videos[index].playOrStop();
            },
            // 用户下拉时暂停当前正在播放的视频并自动播放上一个视频
            preVideo(index) {
              this.$refs.videos[index].play();
              this.$refs.videos[index + 1].stop();
            },
            // 用户上滑时暂停当前正在播放的视频并自动播放下一个视频
            nextVideo(index) {
              this.$refs.videos[index].play();
              this.$refs.videos[index - 1].stop();
            },
          },
      

总结

本章节主要内容包括:

  • 视频播放与暂停
  • ref 在父组件内调用子组件的方法(父子组件方法调用)
  • 视频自动播放
  • swiper 组件的点击事件 on tap
  • swiper 的上滑下滑的事件:
    • slidePrevTransitionStart 上滑方法
    • slideNextTransitionStart 下拉方法
  • 要知道当前正在播放的视频是 videoListdata 数组中的哪一个,然后在父组件 VideoList 组件内调用子组件 Videos 中的 play()/stop() 方法来实现视频的自动播放与暂停。

上一章节: 7. 点赞评论分享以及唱片旋转动画

下一章节: 9. 视频评论列表

项目整体介绍:Vue.js 项目实战之实现视频播放类WebApp的项目开发(仿抖音app)


项目仓库地址,欢迎 Star。

有任何问题欢迎评论区留言讨论。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 《Vue.js前端开发基础与项目实战PDF》是一本关于Vue.js前端开发的实用教程。本书共分为两个部分,前半部分是关于Vue.js基础知识的介绍,后半部分通过实战项目的方式加深读者对Vue.js的理解与应用。 在前半部分,本书首先介绍了Vue.js的基本概念和原则,包括Vue实例、模板语法、计算属性、指令、生命周期等。读者通过这些基础知识的学习,能够了解Vue.js的基本工作原理,掌握Vue.js的基本语法和核心功能。 后半部分,本书通过一个完整的实战项目,引导读者将前半部分所学知识运用于实践。项目从需求分析、项目搭建到页面设计、数据交互等方面进行了详细的讲解。读者通过跟随实战项目的步骤,能够从中学会如何使用Vue.js构建一个完整的前端应用。 《Vue.js前端开发基础与项目实战PDF》的特点在于其结合了理论和实践,让读者既能够理解Vue.js的基本原理和语法,又能够通过实战项目的方式进行实际操作。这种结合使得读者可以更好地掌握Vue.js开发技巧,提升自己的前端开发能力。 总之,《Vue.js前端开发基础与项目实战PDF》是一本适合前端开发初学者的实用教程,通过学习本书,读者能够系统地了解和掌握Vue.js开发技术和应用,为自己的前端开发之路奠定坚实的基础。 ### 回答2: "vue.js前端开发基础与项目实战pdf" 是一本关于Vue.js前端开发的书籍,涵盖了基础知识和实战经验。该书以提供全面详细的教程和示例代码为目标,可用于初学者和有一定经验的开发者。 在基础部分,该书讲解了Vue.js的基本概念和特点,包括Vue.js的生命周期、组件和指令的使用方法、数据绑定和事件处理等。读者将学会如何搭建Vue.js项目,包括使用Vue CLI进行项目初始化和依赖管理,以及使用Webpack进行模块化开发和打包。 在项目实战部分,该书提供了多个实际案例供读者学习和实践。这些案例涵盖了常见的前端开发需求,如用户登录认证、数据可视化、实通信等。每个案例都由浅入深地介绍了解决方案和实现细节,读者可以从中学习到实际项目开发中的技巧和经验。 此外,该书还介绍了Vue.js的常用插件和工具库,如Vue Router、Vuex、Element UI等,以及与后端API交互和服务器部署等相关内容。读者可以根据自己的需求选择合适的工具和技术栈,提高项目开发的效率和质量。 总之,"vue.js前端开发基础与项目实战pdf"是一本全面介绍Vue.js前端开发的教程书籍,适合想要学习Vue.js开发者。通过学习该书,读者可以掌握Vue.js的基础知识,提升前端开发技能,并能够应用Vue.js开发实际项目。 ### 回答3: 《vue.js前端开发基础与项目实战pdf》是一本介绍Vue.js前端开发基础及实战项目的电子书籍。 Vue.js是一款流行的JavaScript框架,用于构建用户界面。它采用了MVVM(Model-View-ViewModel)架构模式,使开发者能够快速构建高性能的单页面应用程序。本书通过详细的讲解和实例演示,系统地介绍了Vue.js基础知识和开发实践。 首先,本书从Vue.js的概述入手,介绍了Vue.js的特点和优势,并介绍了其与其他流行框架的比较。接着,本书详细介绍了Vue.js的基本语法、组件和指令,以及其数据绑定、事件处理、过滤器和表单验证等常用功能。读者可以通过学习这些基础知识,快速掌握Vue.js开发方法和技巧。 然后,本书通过实战项目来帮助读者更好地理解和应用Vue.js。这些项目包括购物车应用、电影列表和用户管理系统等,涵盖了常见的业务场景。每个项目都有详细的代码实现和步骤说明,读者可以根据实际需求进行修改和扩展,提高自己的开发能力。 总的来说,《vue.js前端开发基础与项目实战pdf》是一本适合初学者和有一定经验的开发者的实用指南。通过学习这本书,读者可以从零开始掌握Vue.js的基础知识,并通过实践项目提升自己的开发能力。无论是对于想要学习Vue.js的新手,还是对于想要深入了解和运用Vue.js开发者,都是一本值得推荐的书籍。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值