墙裂推荐!Vue3 实现B站页面滚动开启小屏播放功能,超简单!!

简介: 墙裂推荐!Vue3 实现B站页面滚动开启小屏播放功能,超简单!!

最近在浏览B站(Bilibili)时,我发现了一个非常实用的功能:当你在观看视频时,如果向下滚动页面,视频会自动缩小并固定在页面的一角继续播放。

这种小屏播放功能极大地提升了用户体验,让用户即使在浏览其他内容时也能继续观看视频。

于是我决定在自己的项目中实现这一功能。

效果演示

实现功能

第一步:创建视频组件

首先,我们创建一个视频组件VideoPlayer.vue,用于显示视频内容。

src/components/ 目录下创建 VideoPlayer.vue 文件,内容如下:

<template>
  <div class="video-player" ref="videoPlayer">
    <video
      ref="video"
      :src="videoSrc"
      controls
      @play="handlePlay"
      @pause="handlePause"
    ></video>
  </div>
</template>
<script setup>
import { ref, watch }from'vue';
const props =defineProps({
videoSrc:{
type:String,
required:true,
},
});
const videoPlayer =ref(null);
const isMiniPlayer =ref(false);
consthandlePlay=()=>{
window.addEventListener('scroll', handleScroll);
};
consthandlePause=()=>{
window.removeEventListener('scroll', handleScroll);
};
consthandleScroll=()=>{
const rect = videoPlayer.value.getBoundingClientRect();
  isMiniPlayer.value= rect.top<0;
};
watch(isMiniPlayer,(newValue) =>{
if(newValue){
    videoPlayer.value.classList.add('mini-player');
}else{
    videoPlayer.value.classList.remove('mini-player');
}
});
</script>
<style scoped>
.video-player {
position: relative;
width:100%;
max-width:640px;
margin:0auto;
}
.video-player.mini-player{
position: fixed;
bottom:20px;
right:20px;
width:200px;
height:112.5px;/* 16:9 aspect ratio */
z-index:1000;
box-shadow:02px10pxrgba(0,0,0,0.2);
}
</style>

第二步:在主应用中使用视频组件

接下来,我们在主应用组件 App.vue 中使用这个视频组件。

打开 src/App.vue,修改内容如下:

<template>
  <div id="app">
    <header>
<h1>Vue3实现 B站小屏播放功能</h1>
</header>
<main>
<VideoPlayer videoSrc="https://www.w3schools.com/html/mov_bbb.mp4" />
<div class="content">
<p>滚动页面看看效果吧!</p>
<!-- 模拟其他内容 -->
<p v-for="i in 100" :key="i">这是模拟的内容{{ i }}</p>
</div>
</main>
  </div>
</template>
<script setup>
import VideoPlayer from './components/VideoPlayer.vue';
</script>
<style>
#app {
font-family:Avenir,Helvetica,Arial, sans-serif;
text-align: center;
color:#2c3e50;
}
header{
background-color:#42b983;
padding:20px;
color: white;
}
main{
padding:20px;
}
.content{
margin-top:20px;
text-align: left;
}
</style>

第三步:添加 CSS 样式

为了使小屏播放功能更加美观,我们需要添加一些 CSS 样式。在 src/assets/ 目录下创建 styles.css 文件,内容如下:

body {
margin:0;
font-family:Avenir,Helvetica,Arial, sans-serif;
}
#app {
margin:0auto;
}
header{
background-color:#42b983;
color: white;
padding:20px0;
text-align: center;
}
main{
padding:20px;
}
.content{
margin-top:20px;
}
.video-player{
position: relative;
width:100%;
max-width:640px;
margin:0auto;
}
.video-player.mini-player{
position:fixed;
bottom:20px;
right:20px;
width:200px;
height:112.5px;/* 16:9 aspect ratio */
z-index:1000;
box-shadow:02px10pxrgba(0,0,0,0.2);
}

src/main.js 中引入该样式文件:

import { createApp } from 'vue';
import App from './App.vue';
import './assets/styles.css';
createApp(App).mount('#app');
相关文章
|
5天前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
107 64
|
5天前
|
JavaScript 前端开发 API
Vue 3 中 v-model 与 Vue 2 中 v-model 的区别是什么?
总的来说,Vue 3 中的 `v-model` 在灵活性、与组合式 API 的结合、对自定义组件的支持等方面都有了明显的提升和改进,使其更适应现代前端开发的需求和趋势。但需要注意的是,在迁移过程中可能需要对一些代码进行调整和适配。
|
1月前
|
存储 JavaScript 前端开发
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
【10月更文挑战第21天】 vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
|
27天前
|
JavaScript 前端开发 开发者
Vue 3中的Proxy
【10月更文挑战第23天】Vue 3中的`Proxy`为响应式系统带来了更强大、更灵活的功能,解决了Vue 2中响应式系统的一些局限性,同时在性能方面也有一定的提升,为开发者提供了更好的开发体验和性能保障。
54 7
|
28天前
|
前端开发 数据库
芋道框架审批流如何实现(Cloud+Vue3)
芋道框架审批流如何实现(Cloud+Vue3)
47 3
|
27天前
|
JavaScript 数据管理 Java
在 Vue 3 中使用 Proxy 实现数据双向绑定的性能如何?
【10月更文挑战第23天】Vue 3中使用Proxy实现数据双向绑定在多个方面都带来了性能的提升,从更高效的响应式追踪、更好的初始化性能、对数组操作的优化到更优的内存管理等,使得Vue 3在处理复杂的应用场景和大量数据时能够更加高效和稳定地运行。
43 1
|
27天前
|
JavaScript 开发者
在 Vue 3 中使用 Proxy 实现数据的双向绑定
【10月更文挑战第23天】Vue 3利用 `Proxy` 实现了数据的双向绑定,无论是使用内置的指令如 `v-model`,还是通过自定义事件或自定义指令,都能够方便地实现数据与视图之间的双向交互,满足不同场景下的开发需求。
47 1
|
29天前
|
前端开发 JavaScript
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
|
1月前
Vue3 项目的 setup 函数
【10月更文挑战第23天】setup` 函数是 Vue3 中非常重要的一个概念,掌握它的使用方法对于开发高效、灵活的 Vue3 组件至关重要。通过不断的实践和探索,你将能够更好地利用 `setup` 函数来构建优秀的 Vue3 项目。
|
2月前
|
JavaScript 前端开发 API
vue3知识点:Vue3.0中的响应式原理和 vue2.x的响应式
vue3知识点:Vue3.0中的响应式原理和 vue2.x的响应式
25 0