墙裂推荐!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');
相关文章
|
3天前
|
移动开发 JavaScript 前端开发
💻揭秘!如何用 Vue 3 实现酷炫的色彩魔方游戏✨
本文分享了开发基于Canvas技术的小游戏"色彩魔方挑战"的完整过程。游戏旨在考验玩家的观察力和耐心,通过随机生成的颜色矩阵和一个变化点,玩家需在两幅画布中找出不同的颜色点。文章详细讲解了游戏的核心功能,包括随机颜色矩阵生成、点的闪烁提示、自定义配色方案等。此外,作者展示了使用Vue 3和TypeScript开发的代码实现,带领读者一步步深入了解游戏的逻辑与细节。
113 68
|
1天前
|
JavaScript 前端开发
Vue 2 和 Vue 3 之间响应式区别
10月更文挑战第7天
13 2
|
2天前
|
JavaScript 前端开发 API
vue3中常用插件的使用方法:按需引入自定义组件,自动导入依赖包,自动生成路由,自动生成模拟数据
vue3中常用插件的使用方法:按需引入自定义组件,自动导入依赖包,自动生成路由,自动生成模拟数据
58 0
|
2天前
|
JavaScript 前端开发 算法
对比一下Vue2 和 Vue3?—— 8个方面给你答案
本文介绍了 Vue 和 React 的起源、核心思想、表现形式、API 差异、社区差异、升级方向、响应式原理、Diff 算法、事件机制,并进行了总结。Vue 以其渐进式框架设计和简洁性著称,而 React 则强调单向数据流和灵活性。两者均支持组件化开发和虚拟 DOM,适用于不同的开发场景。
11 0
对比一下Vue2 和 Vue3?—— 8个方面给你答案
|
2天前
|
存储 前端开发 中间件
vue3之vite配置vite-plugin-mock使用mock轻松创建模拟数据提高开发效率
vue3之vite配置vite-plugin-mock使用mock轻松创建模拟数据提高开发效率
13 0
|
2天前
|
API
vue3中父子组件的双向绑定defineModel详细使用方法
vue3中父子组件的双向绑定defineModel详细使用方法
13 0
|
2天前
|
存储 缓存 资源调度
Vue3状态管理新选择:Pinia安装与使用详解,以及与Vuex的对比分析
Vue3状态管理新选择:Pinia安装与使用详解,以及与Vuex的对比分析
19 0
|
2天前
|
JavaScript iOS开发
用上Vue3,你真的变了吗?
10月更文挑战第6天
11 0
|
3天前
|
JavaScript
在 Vue 3 中使用 DHTMLX 甘特图组件
本文将介绍如何在 Vue 3 项目中集成 DHTMLX 甘特图组件,详细讲解安装、模块导入以及基本用法。通过示例代码,您将学会如何配置甘特图的任务、样式和交互功能,帮助您在项目中更有效地管理和展示任务时间线。
11 0
|
3天前
|
资源调度 JavaScript 前端开发
在 Vue 3 中实现流畅的 Swiper 滑动效果
本文介绍了如何在 Vue 3 项目中集成 Swiper,涵盖了从安装、基本用法到丰富的配置选项。通过简单的示例,读者将学习如何创建响应式的图片轮播,利用 Swiper 的循环、自动播放和自定义分页功能,提升用户体验。无论是简单的幻灯片还是复杂的滑块效果,Swiper 都能轻松实现,帮助开发者快速构建出美观的滑动组件。
60 0