js实现轮播图的两种方式(构造函数、面向对象)

下面是详细讲解js实现轮播图的两种方式的完整攻略。

构造函数实现轮播图

步骤1:HTML结构

首先需要有一个HTML结构,用于放置轮播图的图片及导航按钮,示例如下:

<div class="slider">
  <ul>
    <li><img src="img1.jpg"></li>
    <li><img src="img2.jpg"></li>
    <li><img src="img3.jpg"></li>
  </ul>
  <ol>
    <li class="active"></li>
    <li></li>
    <li></li>
  </ol>
</div>

其中,ul标签中的li标签是轮播图的图片,可以根据需要添加、删除;ol标签中的li标签是导航按钮,用于切换轮播图。

步骤2:CSS样式

通过CSS样式设置轮播图的显示效果、过渡效果以及导航按钮的样式。示例如下:

.slider {
  width: 500px;
  height: 250px;
  overflow: hidden;
  position: relative;
}

.slider ul {
  width: 1500px;
  height: 250px;
  list-style: none;
  margin: 0;
  padding: 0;
  position: absolute;
}

.slider ul li {
  width: 500px;
  height: 250px;
  float: left;
}

.slider ol {
  position: absolute;
  right: 10px;
  bottom: 10px;
  list-style: none;
  margin: 0;
  padding: 0;
}

.slider ol li {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: #ccc;
  margin: 5px;
  float: left;
  cursor: pointer;
}

.slider ol li.active {
  background: #f00;
}

步骤3:JavaScript代码

通过JavaScript代码实现轮播图的自动播放、导航按钮切换以及手动切换等功能。示例如下:

function Slider(selector) {
  this.slider = document.querySelector(selector);
  this.sliderUl = this.slider.querySelector('ul');
  this.sliderLis = this.sliderUl.querySelectorAll('li');
  this.sliderOl = this.slider.querySelector('ol');
  this.sliderOls = this.sliderOl.querySelectorAll('li');
  this.len = this.sliderLis.length;
  this.index = 0;

  // 自动播放
  this.timer = setInterval(() => {
    this.index++;
    if (this.index >= this.len) {
      this.index = 0;
    }
    this.change();
  }, 2000);

  // 鼠标移入暂停播放
  this.slider.addEventListener('mouseenter', () => {
    clearInterval(this.timer);
  });

  // 鼠标移出继续播放
  this.slider.addEventListener('mouseleave', () => {
    this.timer = setInterval(() => {
      this.index++;
      if (this.index >= this.len) {
        this.index = 0;
      }
      this.change();
    }, 2000);
  });

  // 点击导航按钮切换
  for (let i = 0; i < this.len; i++) {
    this.sliderOls[i].addEventListener('click', () => {
      this.index = i;
      this.change();
    });
  }
}

Slider.prototype.change = function() {
  for (let i = 0; i < this.len; i++) {
    this.sliderOls[i].className = '';
    this.sliderLis[i].style.opacity = 0;
    this.sliderLis[i].style.zIndex = 0;
  }
  this.sliderOls[this.index].className = 'active';
  this.sliderLis[this.index].style.opacity = 1;
  this.sliderLis[this.index].style.zIndex = 1;
};

实例化轮播图对象并调用:

new Slider('.slider');

面向对象实现轮播图

步骤1:HTML结构

同样需要有一个HTML结构用于放置轮播图的图片及导航按钮,与构造函数方式相同。

步骤2:CSS样式

同样需要通过CSS样式设置轮播图的显示效果,与构造函数方式相同。

步骤3:JavaScript代码

通过面向对象的方式实现轮播图的自动播放、导航按钮切换以及手动切换等功能。示例如下:

function Slider(selector) {
  this.slider = document.querySelector(selector);
  this.sliderUl = this.slider.querySelector('ul');
  this.sliderLis = this.sliderUl.querySelectorAll('li');
  this.sliderOl = this.slider.querySelector('ol');
  this.sliderOls = this.sliderOl.querySelectorAll('li');
  this.len = this.sliderLis.length;
  this.index = 0;
  this.timer = null;
}

Slider.prototype.init = function() {
  this.autoPlay();
  this.mouseEvent();
  this.buttonEvent();
};

Slider.prototype.autoPlay = function() {
  this.timer = setInterval(() => {
    this.index++;
    if (this.index >= this.len) {
      this.index = 0;
    }
    this.change();
  }, 2000);
};

Slider.prototype.mouseEvent = function() {
  this.slider.addEventListener('mouseenter', () => {
    clearInterval(this.timer);
  });
  this.slider.addEventListener('mouseleave', () => {
    this.autoPlay();
  });
};

Slider.prototype.buttonEvent = function() {
  for (let i = 0; i < this.len; i++) {
    this.sliderOls[i].addEventListener('click', () => {
      this.index = i;
      this.change();
    });
  }
};

Slider.prototype.change = function() {
  for (let i = 0; i < this.len; i++) {
    this.sliderOls[i].className = '';
    this.sliderLis[i].style.opacity = 0;
    this.sliderLis[i].style.zIndex = 0;
  }
  this.sliderOls[this.index].className = 'active';
  this.sliderLis[this.index].style.opacity = 1;
  this.sliderLis[this.index].style.zIndex = 1;
};

// 实例化轮播图对象并调用
const slider = new Slider('.slider');
slider.init();

这种方式相对于构造函数方式来说,代码更加面向对象,可扩展性更强。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现轮播图的两种方式(构造函数、面向对象) - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • 3.live555源码分析—延时队列

    Live555源码分析—延时队列 在Live555媒体服务器中,延时队列是一个非常重要的数据结构,它用于管理媒体流的发送和接收。在本文中,我们将详细介绍延时队列的原理、应用场景、实现方法以及两个示例说明。 延时队列的原理 延时队列是一种特殊的队列,它可以按照元素的到期时间进行排序。具体来说,当一个元素被插入到延时队列中时,它会被放置在队列的末尾,并记录下…

    other 2023年5月5日
    00
  • AngularJS实用基础知识_入门必备篇(推荐)

    AngularJS实用基础知识_入门必备篇(推荐)攻略 1. 什么是AngularJS? AngularJS是一种流行的JavaScript框架,用于构建动态Web应用程序。它提供了一种结构化的方法来组织和管理前端代码,并通过双向数据绑定、依赖注入和模块化等特性,简化了开发过程。 2. 安装和配置AngularJS 要开始使用AngularJS,首先需要将其…

    other 2023年8月21日
    00
  • 一篇文章彻底搞懂Python类属性和方法的调用

    一篇文章彻底搞懂Python类属性和方法的调用 介绍 在Python中,类是一种非常强大的机制,它允许我们组织和管理代码,并实现面向对象编程的概念。类中的属性和方法是类的重要组成部分,理解它们的调用方式是学习和使用Python类的关键。 本文将详细介绍类属性和方法的调用方式,并提供两个示例说明来帮助读者更好地理解。 类属性的调用 类属性是定义在类中的变量,它…

    other 2023年6月28日
    00
  • vue实现自定义多选与单选的答题功能

    Vue实现自定义多选与单选的答题功能攻略 确定组件结构 首先,确定答题功能所需的组件结构。可以考虑使用三个组件来实现:Questionnaire(问卷调查)组件作为父组件,Question(问题)组件作为子组件,Option(选项)组件作为子组件。其中,父组件负责管理所有问题和答案,子组件则负责展示问题和选项。 创建Questionnaire组件 接下来,创…

    other 2023年6月28日
    00
  • Java Web学习之MySQL在项目中的使用方法

    Java Web学习之MySQL在项目中的使用方法 MySQL是一种常用的关系型数据库,可以在Java Web项目中使用。以下是在项目中使用MySQL的完整攻略: 步骤一:导入MySQL驱动 在项目的pom.xml文件中添加MySQL驱动的依赖: <dependencies> <!– MySQL驱动 –> <dependen…

    other 2023年10月14日
    00
  • 详解Spring工厂特性

    详解Spring工厂特性 一、工厂模式概述 工厂模式是Java语言中比较常见的一种设计模式。它是一种创建型模式,用于通过工厂类创建对象。通过工厂模式能够将对象的实例化过程和客户端代码分离开来,从而降低代码的耦合度,提高系统的可维护性和可扩展性。 二、Spring工厂特性 Spring是Java应用程序开发中广泛使用的开源框架之一。Spring框架中有一种工厂…

    other 2023年6月27日
    00
  • 举例讲解Android中ViewPager中的PagerTitleStrip子控件

    Android中ViewPager中的PagerTitleStrip子控件 PagerTitleStrip是Android中ViewPager的一个子控件,用于显示ViewPager中各个页面的标题。它通常位于ViewPager的顶部,并且可以根据当前选中的页面自动更新标题。 步骤一:在布局文件中添加PagerTitleStrip 首先,在你的布局文件中添加…

    other 2023年9月7日
    00
  • Springboot项目Aop与拦截器与过滤器横向对比

    当然!下面是关于\”Spring Boot项目AOP与拦截器与过滤器横向对比\”的完整攻略,包含两个示例说明。 … … … … 示例1:AOP的使用 @Aspect @Component public class LoggingAspect { @Before(\"execution(* com.example.demo.servi…

    other 2023年8月20日
    00
合作推广
合作推广
分享本页
返回顶部