当前位置: 首页 > news >正文

Taro+React+ts开发类似抖音的视频播放功能

前言

  功能要求开发的小程序以及h5在视频下滑切换要保持和抖音一样的流畅播放,同时绕过谷歌的视频禁止有声自动播放,也要解决视频过多滑动过快导致的白屏和视频无法自动播放的功能。

 

第一步 使用Taro的 Swiper 和 Video

  思路在于使用Swiper的上下滑动包裹着Video,实现流畅滑动切换视频的功能,但 SwiperItem 我们不能直接用获取的视频列表进行循环,因为视频列表一般都是做分页,往往都是几百条数据,直接循环就会导致在30条及往上的时候就卡顿白屏,触发页面的重熏染,影响体验。故我们限制死3个 SwiperItem,然后通过滑动切换计算当前列表的下标,动态渲染里面的 Video。

<SwiperclassName='Swiper'current={current}duration={700}verticalcircularonAnimationFinish={e => {togglePlay(e.detail.current)switchPlay(e.detail.current)}}onChange={e => {e.stopPropagation()setCurrent(e.detail.current)throttle(handleSwiperChange, e.detail.current, 700)}}>{renderedVideos.map((e, i) => (<SwiperItem key={i}><NewVideoref={el => refs.current[i] = el}video_url={e.video_url}cover_img={e.cover_img}videoIndex={videoIndex}item={e}isActive={videoIndex === i}switchPlay={switchPlay}/></SwiperItem>))}</Swiper>

  

const [current, setCurrent] = useState<number>(0)  // 索引
const [oldCurrent, setOldCurrent] = useState(0) // 旧索引
const [currentIndex, setCurrentIndex] = useState(0) // 当前视频在完整列表中的索引
const handleSwiperChange = (i:number) => {setVideoIndex(i)if ((i > oldCurrent && !(i === 2 && oldCurrent === 0)) || (i === 0 && oldCurrent === 2)) {setCurrentIndex(currentIndex + 1)} else {setCurrentIndex(currentIndex - 1)}if (currentIndex >= videoList.length - 3) init()setOldCurrent(i)}// 核心:根据当前索引,计算需要渲染的3个视频(当前、下一个、上一个)const renderedVideos = useMemo(() => {const prevIndex = (currentIndex - 1 + videoList.length) % videoList.length;const nextIndex = (currentIndex + 1) % videoList.length;return [videoList[prevIndex], videoList[currentIndex % videoList.length], videoList[nextIndex]]}, [videoList, currentIndex]);

 

第二步 利用Video创建对应的类组件,然后加上点赞关注等等

  这里不方便加上过多代码,所以点赞关注等细节这种非常简单的就自己加,主要跟你们说下思路

<Video// ref={videoRef}id={`video_${index}`}src={video_url}className='video-player'loop// muted={!videoPlayingState}muted={false}poster={cover_img}objectFit='cover'onClick={() => switchPlay(index)}onPlay={() => this.setState({videoPlayingState: true,})}onPause={() => {this.setState({videoPlayingState: false,})}}><NewImage src="common/play_btn" suffix='svg' className={isPlaying ? ' hidden-btn' : ''} /></Video>{ !isActive && <View className='cover-img' onClick={() => switchPlay(index)} /> }

 

最终效果图展示:

2dd99ce9e886cd6124454b54458ef8db (1)

 

有兴趣的也可以看看我公司的线下预约教练的网站 https://web.xiaoxiangfeng-sports.cn/pages_main/home/index

  

http://www.jsqmd.com/news/337436/

相关文章:

  • SPI总线全攻略:从以太网组网、大容量Flash存储到AirLink高速通信
  • 省时省力,CAN总线一站式开发指南
  • 亲测好用10个降AIGC网站 千笔帮你降AI率
  • 新手入门:阿里云OSS存储完整使用指南(从配置到实操)
  • 救命神器!AI论文网站 千笔·专业论文写作工具 VS 笔捷Ai,自考写论文必备!
  • 2026年NMN品牌技术实力排名:基于核心机制与实证数据的深度盘点 - 速递信息
  • 盘点2026年专业眼镜店连锁品牌,康视怡配镜服务性价比高靠谱吗 - 工业品牌热点
  • GO!开源UART短信转发器【无需焊接+不耗流量】
  • 食品包装机械远程运维管理系统方案
  • MCP 协议爆火背后:AI 应用开发正在经历 USB 时刻
  • 探讨2026年行业排名前十的跨境电商财税合规代办机构 - mypinpai
  • 导师推荐10个降AI率平台,千笔·专业降AI率智能体解决论文AIGC检测难题
  • Linux 命令:diff3
  • 必收藏!未来5年程序员最优发展方向,认准AI大模型准没错
  • 卡西欧品牌代理价格对比 全国性价比高的卡西欧代理服务 - myqiye
  • DeepSeek V4代码生成实战:3步用AI模型搭建你的第一个智能脚本
  • 德国inne品牌深度解析:守护全龄营养,凭创新活动领跑行业 - 速递信息
  • Java程序员必学的Agent开发:一篇掌握大模型智能体核心概念,建议收藏
  • 2026跨境电商财税合规代办机构推荐哪家,结合费用来看选择更准 - mypinpai
  • 收藏备用|AI浪潮下,传统程序员转型AI工程师全指南(小白也能看懂)
  • 说说武汉财税合规政府补助核算公司价格多少钱 - myqiye
  • Linux 命令:patch
  • linux防火墙核心命令 - 教程
  • 智源多模态大模型登Nature,生成式人工智能路线统一到自回归
  • 中小企业的“零门槛数字化”救星——无需IT团队,3天搭建适配业务的招聘流程
  • 2026最新西南管材选购风向标:PE管/ HDPE管/复合管/ PVC管/波纹管五大实力品牌推荐 - 深度智识库
  • 聊聊2026年性价比高的地产开发运营商,哪个口碑好值得选 - 工业设备
  • 微信立减金还可以这样用!团团收回收变现的最佳选择 - 团团收购物卡回收
  • 分享实力强的防火堵料实体厂家,费用怎么收费 - 工业品网
  • 陪诊系统的“资源调度中枢”——基于区域就诊高峰/人群画像,提前调配陪诊员覆盖三甲医院“一号难求”时段