墙裂推荐!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');
相关文章
|
6天前
|
JavaScript
Vue3中路由跳转的语法
Vue3中路由跳转的语法
109 58
|
4天前
|
JavaScript 索引
Vue 2和Vue 3的区别以及实现原理
Vue 2 的响应式系统通过Object.defineProperty来实现,它为对象的每个属性添加 getter 和 setter,以便追踪依赖并响应数据变化。
20 9
|
6天前
|
JavaScript 开发工具
vite如何打包vue3插件为JSSDK
【9月更文挑战第10天】以下是使用 Vite 打包 Vue 3 插件为 JS SDK 的步骤:首先通过 `npm init vite-plugin-sdk --template vue` 创建 Vue 3 项目并进入项目目录 `cd vite-plugin-sdk`。接着,在 `src` 目录下创建插件文件(如 `myPlugin.js`),并在 `main.js` 中引入和使用该插件。然后,修改 `vite.config.js` 文件以配置打包选项。最后,运行 `npm run build` 进行打包,生成的 `my-plugin-sdk.js` 即为 JS SDK,可在其他项目中引入使用。
|
7天前
|
JavaScript 开发者
彻底搞懂 Vue3 中 watch 和 watchEffect是用法
彻底搞懂 Vue3 中 watch 和 watchEffect是用法
|
4天前
|
JavaScript 调度
Vue3 使用 Event Bus
Vue3 使用 Event Bus
10 1
|
4天前
|
JavaScript
Vue3 : ref 与 reactive
Vue3 : ref 与 reactive
9 1
vue3 reactive数据更新,视图不更新问题
vue3 reactive数据更新,视图不更新问题
|
5天前
|
JavaScript
|
5天前
vue3定义暴露一些常量
vue3定义暴露一些常量
|
4天前
Vue3 使用mapState
Vue3 使用mapState
9 0