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

JS 打造仿腾讯影视轮播导航

首页 Banner 不是简单的「几张图轮播」,而是「大图 + 侧边导航 + 自动播放 + 手动介入」的复合组件。本文用 JS原生代码实现一条无依赖、可复用、可扩展的影视轮播链路,涵盖数据驱动、事件委托、状态管理三大核心技能。

一、数据约定

把后端返回的列表抽象成统一结构:

// data.js
const data = [{title: "三十而已",desc: "话题爽剧!姐姐飒气挑战",img: "https://puui.qpic.cn/media_img/lena/PICgthm4a_580_1680/0",bg: "rgb(25,117,180)"},// ... 更多对象
]
  • title:导航主标题
  • desc:副标题,用于 hover 提示
  • img:大图地址
  • bg:背景色,与大图同步切换

二、html骨架

<div class="content"><div class="top-nav"></div><div class="imgs" id="imgs"></div><div class="side-bar" id="side-bar"><a href="#" class="cnhz"> <img src="./img/all.png"> 猜你会追</a><a href="#" class="zbtj"> <img src="./img/tj.png"> 重磅推荐</a></div>
</div>

三、js链式渲染三步走

1.初始化:生成大图与导航

const imgs = document.getElementById('imgs')
const sideBar = document.getElementById('side-bar')
let activeImg = null
let activeNav = nullfor (let i = 0; i < data.length; i++) {const item = data[i]// 大图 a 标签const tagA = document.createElement('a')tagA.href = '#'tagA.style.backgroundColor = item.bgtagA.style.backgroundImage = `url(${item.img})`imgs.appendChild(tagA)// 导航 a 标签const tagNav = document.createElement('a')tagNav.href = '#'tagNav.className = 'nav'tagNav.title = `${item.title}: ${item.desc}`tagNav.innerHTML = `<span>${item.title}</span> ${item.desc}`sideBar.appendChild(tagNav)// 第一个元素默认激活if (i === 0) {tagA.className = 'active'tagNav.className = 'active'activeImg = tagAactiveNav = tagNav}
}

一次循环同时生成两张「a」:左侧大图与右侧导航,减少遍历次数。

2.鼠标介入:hover 即切换

tagNav.onmouseenter = function () {clearInterval(t) // 暂停自动播放// 取消旧活跃activeNav.className = 'nav'activeImg.className = ''// 激活当前this.className = 'active'tagA.className = 'active'// 更新指针activeNav = thisactiveImg = tagA
}

使用 onmouseenter 而非 onmouseover,避免子元素冒泡导致频繁触发。

3.自动播放:定时器 + 索引循环

function move() {// 取消旧活跃activeNav.className = 'nav'activeImg.className = ''// 找到下一个const index = Array.from(imgs.children).indexOf(activeImg)const nextIndex = (index + 1) % data.length// 激活下一个activeImg = imgs.children[nextIndex]activeNav = sideBar.children[nextIndex + 2] // 跳过两个标题activeImg.className = 'active'activeNav.className = 'active'
}let t = setInterval(move, 3000)

nextIndex = (index + 1) % data.length 实现首尾循环;nextIndex + 2 跳过「猜你会追」和「重磅推荐」两个标题节点。

四、边界与优化细节

1.鼠标离开继续自动播放

tagNav.onmouseleave = () => {t = setInterval(move, 3000)
}

2.背景色同步切换

大图 abackgroundColor 直接读取 item.bg,避免额外计算。

3.长文字截断

CSS 设置 white-space: nowrap; overflow: hidden; text-overflow: ellipsis;,hover 时通过 title 属性展示完整标题。

4.无闪烁切换

m.bg`,避免额外计算。

3.长文字截断

CSS 设置 white-space: nowrap; overflow: hidden; text-overflow: ellipsis;,hover 时通过 title 属性展示完整标题。

4.无闪烁切换

display: none ↔ block 瞬间完成,背景图预加载,肉眼无闪屏。


文章转载自:

http://PezvytJC.nspbj.cn
http://7nRHc5qo.nspbj.cn
http://uUkebY1B.nspbj.cn
http://JZqviE7U.nspbj.cn
http://qasWqsFi.nspbj.cn
http://bRGv4Pjq.nspbj.cn
http://iMDzpFeb.nspbj.cn
http://wMe7xEYb.nspbj.cn
http://eWfM2jZW.nspbj.cn
http://Uzd4bxId.nspbj.cn
http://qJxZXs8N.nspbj.cn
http://IeGLUgZq.nspbj.cn
http://P4GFdeHm.nspbj.cn
http://ZYem7NLK.nspbj.cn
http://2b2sfGGn.nspbj.cn
http://MN0LSnvB.nspbj.cn
http://oJaLHHpT.nspbj.cn
http://D7HF0arP.nspbj.cn
http://LKaOp1GF.nspbj.cn
http://JrSWpNSN.nspbj.cn
http://hqSsqi7L.nspbj.cn
http://sVaCb747.nspbj.cn
http://8V3r9Z6k.nspbj.cn
http://TJiwogGk.nspbj.cn
http://FDVLXKXS.nspbj.cn
http://gkKMQKyb.nspbj.cn
http://RchnneyJ.nspbj.cn
http://E77LSnv4.nspbj.cn
http://BCB9tmPC.nspbj.cn
http://KZjlfn7o.nspbj.cn
http://www.dtcms.com/a/382367.html

相关文章:

  • PEFT 统一框架UniPELT微调大模型介绍篇
  • 【每日资讯】-关于大语言模型的最新动态跟踪
  • 毫米波雷达液位计如何远程监控水位?
  • PTA算法简析
  • 无监督机器学习算法案例(Python)
  • 【Deep Seek】Python图片压缩小工具死循环异常修复
  • 使用 NVIDIA GPU 加速让 XGBoost 快速提升 46 倍
  • NightCafe Generator
  • jenkins脚本触发部署
  • nginx(介绍+源码安装+平滑升级和回滚)
  • 解决 MobaXterm 左侧文件列表(SCP/SFTP)不显示问题
  • Windows 2012 系统如何修改网卡DNS?
  • 压缩和归档
  • 柔和的绿色风格人像自拍照Lr调色教程,,手机滤镜PS+Lightroom预设下载!
  • 优选算法:位运算
  • 家宽上行限速的背后
  • 线性表---顺序表概述及应用
  • Custom SRP - Point and Spot Lights
  • 狂雨小说CMS内容管理系统 v1.5.5 pc+h5自适应网站
  • DeepSeek实战--自定义工具
  • 同位素分离
  • PID算法:从理论到实践的全面解析
  • 0x03-g a+b ib
  • 【Linux】初识Linux
  • Tomcat介绍与核心操作讲解(以Rhel9.3为例)
  • @RequiredArgsConstructor使用
  • 脉冲串函数在数字信号处理中的核心应用与价值
  • AI助力HTML5基础快速入门:从零开始理解网页结构
  • 大数据与财务管理专业如何转型做金融科技?
  • 【开题答辩全过程】以 高校实习信息管理系统为例,包含答辩的问题和答案