当前位置:首页 > JavaScript

js实现焦点轮播图

2026-01-30 16:06:16JavaScript

实现焦点轮播图的核心思路

轮播图的核心逻辑是通过定时切换图片的显示状态,结合用户交互(如点击焦点按钮)实现手动切换。以下是基于原生JavaScript的实现方法。

js实现焦点轮播图

HTML结构

创建一个包含图片容器和焦点按钮的基础结构:

js实现焦点轮播图

<div class="slider">
  <div class="slider-container">
    <img src="image1.jpg" class="active">
    <img src="image2.jpg">
    <img src="image3.jpg">
  </div>
  <div class="indicator">
    <span class="dot active"></span>
    <span class="dot"></span>
    <span class="dot"></span>
  </div>
</div>

CSS样式

设置基本布局和过渡效果:

.slider {
  position: relative;
  width: 600px;
  height: 400px;
  overflow: hidden;
}
.slider-container img {
  position: absolute;
  width: 100%;
  height: 100%;
  opacity: 0;
  transition: opacity 1s;
}
.slider-container img.active {
  opacity: 1;
}
.indicator {
  position: absolute;
  bottom: 20px;
  left: 50%;
  transform: translateX(-50%);
}
.dot {
  display: inline-block;
  width: 12px;
  height: 12px;
  margin: 0 5px;
  border-radius: 50%;
  background: rgba(255,255,255,0.5);
  cursor: pointer;
}
.dot.active {
  background: white;
}

JavaScript逻辑

初始化变量

const container = document.querySelector('.slider-container');
const images = document.querySelectorAll('.slider-container img');
const dots = document.querySelectorAll('.dot');
let currentIndex = 0;
let timer = null;

图片切换函数

function showImage(index) {
  images.forEach(img => img.classList.remove('active'));
  dots.forEach(dot => dot.classList.remove('active'));

  images[index].classList.add('active');
  dots[index].classList.add('active');
  currentIndex = index;
}

自动轮播功能

function startAutoPlay() {
  timer = setInterval(() => {
    const nextIndex = (currentIndex + 1) % images.length;
    showImage(nextIndex);
  }, 3000);
}

function stopAutoPlay() {
  clearInterval(timer);
}

焦点按钮事件绑定

dots.forEach((dot, index) => {
  dot.addEventListener('click', () => {
    stopAutoPlay();
    showImage(index);
    startAutoPlay();
  });
});

初始化轮播

showImage(0);
startAutoPlay();

// 鼠标悬停暂停
container.addEventListener('mouseenter', stopAutoPlay);
container.addEventListener('mouseleave', startAutoPlay);

完整代码示例

将所有代码整合后形成完整实现:

document.addEventListener('DOMContentLoaded', function() {
  const container = document.querySelector('.slider-container');
  const images = document.querySelectorAll('.slider-container img');
  const dots = document.querySelectorAll('.dot');
  let currentIndex = 0;
  let timer = null;

  function showImage(index) {
    images.forEach(img => img.classList.remove('active'));
    dots.forEach(dot => dot.classList.remove('active'));
    images[index].classList.add('active');
    dots[index].classList.add('active');
    currentIndex = index;
  }

  function startAutoPlay() {
    timer = setInterval(() => {
      const nextIndex = (currentIndex + 1) % images.length;
      showImage(nextIndex);
    }, 3000);
  }

  function stopAutoPlay() {
    clearInterval(timer);
  }

  dots.forEach((dot, index) => {
    dot.addEventListener('click', () => {
      stopAutoPlay();
      showImage(index);
      startAutoPlay();
    });
  });

  showImage(0);
  startAutoPlay();

  container.addEventListener('mouseenter', stopAutoPlay);
  container.addEventListener('mouseleave', startAutoPlay);
});

扩展功能建议

  • 添加左右箭头导航
  • 实现无限循环滑动效果
  • 增加触摸滑动支持(移动端)
  • 添加过渡动画效果(如淡入淡出、滑动等)
  • 响应式布局适配不同屏幕尺寸

通过以上代码可实现一个基础的焦点轮播图,可根据实际需求进一步扩展功能。核心要点在于通过CSS控制显示状态,JavaScript管理切换逻辑,并处理好用户交互与自动播放的关系。

标签: 焦点js
分享给朋友:

相关文章

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码…