当前位置:首页 > JavaScript

js实现焦点轮播图

2026-03-01 07:10:10JavaScript

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

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

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="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实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…

js 实现页面刷新

js 实现页面刷新

使用 location.reload() location.reload() 是原生 JavaScript 提供的页面刷新方法。调用该方法会重新加载当前页面,相当于点击浏览器的刷新按钮。 // 基本…