带你读《2022技术人的百宝黑皮书》——短视频无尽流前端开发指南(2)

简介: 带你读《2022技术人的百宝黑皮书》——短视频无尽流前端开发指南(2)

带你读《2022技术人的百宝黑皮书》——短视频无尽流前端开发指南(1) https://developer.aliyun.com/article/1243503?groupCode=taobaotech



视频播放器状态按钮


常规来讲播放器需要展示出两种状态:暂停中、缓冲中,播放中有进度条在推进一般不需要做额外展示。状态按钮组件实现如下:


tips:将按钮状态内置在组件中,暴露修改状态的方法给父元素,可以避免在改变按钮状态时触发父元素的re-render。


// ...
const StatusButton = forwardRef<IStatusButtonRef>((_, ref) => {
 const [status, setStatus] = useState<EStatus>(EStatus.PLAY);
 useImperativeHandle(ref, () => ({
 setStatus,
 }));
 return (
 <div className={styles.statusButton}>
 {(() => {
 switch (status) {
 case EStatus.PAUSE:
 return <div>{/* 暂停Icon */}</div>;
 case EStatus.WAITING:
 return <div>{/* 缓冲Icon */}</div>;
 default:
 return null;
 }
 })()}
 </div>
);
});
export default memo(StatusButton);


// ...
const VideoPlayer: FC<IVideoPlayer> = (props) => {
 const { source } = props;
 const videoPlayerRef = useRef<HTMLVideoElement | null>(null);
 const statusButtonRef = useRef<IStatusButtonRef | null>(null);
 const onPlay = () => {
 statusButtonRef.current?.setStatus(EPlayerStatus.PLAY);
 };
 useEffect(() => {
 videoPlayerRef.current?.addEventListener('play', onPlay);
 // 暂停(pause)和缓冲(waiting)监听方法类似
 // ...
 return () => {
 videoPlayerRef.current?.removeEventListener('play', onPlay);
 };
 }, []);
 return (
 <div className={styles.videoPlayerContainer}>
 {/* 播放器 */}
 <video
 ref={videoPlayerRef}
 className={styles.item}
 src={source}
 playsInline
 autoPlay
 />
 {/* 播放器状态按钮 */}
 <StatusButton ref={statusButtonRef} />
 </div>
 );
};
export default memo(VideoPlayer);


视频播放器进度条


image.png



带你读《2022技术人的百宝黑皮书》——短视频无尽流前端开发指南(3) https://developer.aliyun.com/article/1243499?groupCode=taobaotech


相关文章
|
6天前
|
JSON 缓存 前端开发
个人练习前端技术使用Bootstrap、JQuery、thymeleaf
个人练习前端技术使用Bootstrap、JQuery、thymeleaf
12 2
|
16天前
|
缓存 人工智能 前端开发
前端技术博客:探索现代前端开发的奥秘
前端技术博客:探索现代前端开发的奥秘
33 11
|
2月前
|
前端开发 JavaScript 开发者
震惊!Web 前端 href 与 src 竟有如此差异,快来一探究竟,掌握热门技术核心要点
【8月更文挑战第26天】在Web前端开发中,`href`与`src`是两个常用属性,但其差异常被忽视。`href`(超文本引用)用于创建文档间的链接关系,如链接至外部网页或引入CSS文件;`src`(来源)则用于在文档内嵌入资源,如图片或JavaScript文件。两者在使用场景及加载机制上有所不同:`href`支持并行下载且不阻塞渲染,适合非关键资源加载;而`src`加载时会暂停页面渲染直至资源加载完成,适用于如图片和脚本这类对页面显示至关重要的资源。因此,正确理解并运用这两个属性对于保障网页性能和用户体验至关重要。
41 3
|
2月前
|
存储 移动开发 前端开发
HTML5时代来临,这些新特性你掌握了吗?一篇文章带你玩转Web前端技术潮流!
【8月更文挑战第26天】HTML5(简称H5)作为新一代Web标准,相比HTML4带来了诸多增强功能。
46 2
|
2月前
|
前端开发 JavaScript 项目管理
飞跃前端瓶颈:技术进阶指南精华篇
飞跃前端瓶颈:技术进阶指南精华篇
59 1
|
2月前
|
移动开发 前端开发 JavaScript
前端需要掌握的技术有哪些方面?
前端需要掌握的技术有哪些方面?
108 1
|
2月前
|
存储 前端开发 安全
【海贼王航海日志:前端技术探索】CSS你了解多少?(三)
【海贼王航海日志:前端技术探索】CSS你了解多少?(三)
30 2
|
2月前
|
Web App开发 前端开发
【海贼王航海日志:前端技术探索】CSS你了解多少?(二)
【海贼王航海日志:前端技术探索】CSS你了解多少?(二)
23 2
|
2月前
|
缓存 前端开发 JavaScript
【海贼王航海日志:前端技术探索】CSS你了解多少?(一)
【海贼王航海日志:前端技术探索】CSS你了解多少?(一)
22 2
|
2月前
|
前端开发 JavaScript 数据安全/隐私保护
【海贼王航海日志:前端技术探索】HTML你学会了吗?(二)
【海贼王航海日志:前端技术探索】HTML你学会了吗?(二)
29 1
下一篇
无影云桌面