当前位置:首页 > JavaScript

js实现焦点轮播图

2026-03-01 07:10:10JavaScript

实现焦点轮播图的基本思路

轮播图的核心是通过定时切换图片,并同步更新焦点指示器(小圆点)的状态。需要处理自动轮播、手动切换(点击小圆点或左右箭头)以及鼠标悬停暂停等功能。

HTML 结构

创建一个包含图片列表、焦点指示器和导航箭头的容器:

<div class="slider">
  <div class="slider-container">
    <img src="image1.jpg" class="active">
    <img src="image2.jpg">
    <img src="image3.jpg">
  </div>
  <div class="slider-dots">
    <span class="dot active" data-index="0"></span>
    <span class="dot" data-index="1"></span>
    <span class="dot" data-index="2"></span>
  </div>
  <button class="slider-prev">&lt;</button>
  <button class="slider-next">&gt;</button>
</div>

CSS 样式

设置轮播图的基础样式,隐藏非活动图片:

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

JavaScript 实现

class Slider {
  constructor(selector) {
    this.slider = document.querySelector(selector);
    this.container = this.slider.querySelector('.slider-container');
    this.images = this.container.querySelectorAll('img');
    this.dots = this.slider.querySelectorAll('.dot');
    this.prevBtn = this.slider.querySelector('.slider-prev');
    this.nextBtn = this.slider.querySelector('.slider-next');
    this.currentIndex = 0;
    this.timer = null;
    this.interval = 3000;

    this.init();
  }

  init() {
    this.startAutoPlay();
    this.bindEvents();
  }

  bindEvents() {
    this.prevBtn.addEventListener('click', () => this.prev());
    this.nextBtn.addEventListener('click', () => this.next());

    this.dots.forEach(dot => {
      dot.addEventListener('click', () => {
        this.goTo(parseInt(dot.dataset.index));
      });
    });

    this.slider.addEventListener('mouseenter', () => this.stopAutoPlay());
    this.slider.addEventListener('mouseleave', () => this.startAutoPlay());
  }

  startAutoPlay() {
    this.timer = setInterval(() => this.next(), this.interval);
  }

  stopAutoPlay() {
    clearInterval(this.timer);
  }

  update() {
    this.images.forEach(img => img.classList.remove('active'));
    this.dots.forEach(dot => dot.classList.remove('active'));

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

  next() {
    this.currentIndex = (this.currentIndex + 1) % this.images.length;
    this.update();
  }

  prev() {
    this.currentIndex = (this.currentIndex - 1 + this.images.length) % this.images.length;
    this.update();
  }

  goTo(index) {
    this.currentIndex = index;
    this.update();
  }
}

// 初始化轮播图
new Slider('.slider');

功能扩展建议

  1. 添加动画效果:可以使用CSS transition或animation实现更丰富的切换效果。
  2. 响应式设计:通过监听窗口大小变化调整轮播图尺寸。
  3. 无限循环:克隆首尾图片实现无缝滚动效果。
  4. 触摸支持:添加touch事件处理实现移动端滑动切换。

注意事项

  1. 图片预加载:确保所有图片加载完成后再开始轮播。
  2. 性能优化:避免频繁的DOM操作,可以使用requestAnimationFrame优化动画。
  3. 可访问性:为导航元素添加ARIA属性,增强屏幕阅读器支持。

js实现焦点轮播图

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

相关文章

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、…