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日

相关文章

  • C++ 中”priority_queue” 优先级队列实例详解

    C++ 中 “priority_queue” 优先级队列实例详解 1. 什么是优先级队列(Priority Queue)? 优先级队列是一种特殊的队列,它的元素按照一定的优先级进行排序和访问。在 C++ 中,我们可以使用 priority_queue 类来实现优先级队列。 2. priority_queue 类的基本用法 priority_queue 类定义…

    other 2023年6月28日
    00
  • 智能手表开发API接口

    关于智能手表开发API接口的完整攻略,下面是简要的步骤及示例说明。 步骤一:确定需要的API接口 在开发智能手表API接口之前,首先需要明确需要哪些接口。这些接口应该与应用程序的功能需求相关。例如,一个智能手表应用程序可能需要以下接口: 获取用户的健康数据:步数、心率等。 控制手表电池管理 接受手机通知,并进行相应的显示等。 步骤二:设计API接口协议 一旦…

    other 2023年6月26日
    00
  • Android中获得正在运行的程序和系统服务的方法

    获取正在运行的程序和系统服务在Android中的应用广泛。以下是获得这些信息的方法的完整攻略。 使用ActivityManager获取正在运行的程序 要获取Android设备上正在运行的程序的列表,可以使用ActivityManager类。下面是一个使用ActivityManager获取正在运行程序列表的示例。 ActivityManager am = (A…

    other 2023年6月25日
    00
  • 基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息

    基于MVC+EasyUI的Web开发框架使用C-Lodop打印控件打印页面或套打报关运单信息 1. 简介 C-Lodop是一款免费的打印控件,可以实现Web页面的高级打印功能和套打功能。在MVC+EasyUI的Web开发框架中使用C-Lodop可以实现打印发票、报告、运单和标签等功能,是Web开发常用的技术之一。 2. 安装C-Lodop 首先需要到官网(h…

    other 2023年6月27日
    00
  • vector的几种初始化及赋值方式

    Vector的几种初始化及赋值方式 在C++中,vector是一个非常常用的容器,它可以动态地增加和减少元素,类似于数组,但是不需要提前预留空间,更加灵活方便。本文将介绍vector的几种初始化及赋值方法。 声明并初始化 当我们声明一个vector变量时,需要指定元素的数据类型,如: vector<int> vec; 此时vec是一个空的vect…

    其他 2023年3月28日
    00
  • Win7中设置网络优先级的方法与小技巧

    Win7中设置网络优先级的方法与小技巧 概述 在Windows 7操作系统中,我们可以通过设置网络优先级来确保我们的网络连接按照我们所期望的顺序连接。这对于多种网络连接同时存在的情况下非常有用,例如有线连接和无线连接同时可用时,我们可以优先使用有线连接来获得更稳定和快速的互联网体验。本文将详细介绍在Win7中设置网络优先级的方法与小技巧。 步骤 步骤1: 打…

    other 2023年6月28日
    00
  • Android之仿美团加载数据帧动画

    下面我将详细讲解“Android之仿美团加载数据帧动画”的完整攻略。 1. 前言 随着移动互联网的发展,越来越多的移动应用开始采用帧动画的形式展示数据加载状态。本文将介绍如何在Android应用中实现仿美团加载数据帧动画的效果。 2. 准备工作 在实现帧动画之前,我们需要先准备好一张包含多张帧的图片,并将图片放在res/drawable目录下。 3. 实现过…

    other 2023年6月25日
    00
  • 三星Note5手写笔SPen反插后无法取出 尚无解决方案

    问题描述 最近有用户反映,三星Note5手写笔SPen反插后无法取出,这是一个十分烦恼的问题。搜索网络并咨询专业人士后发现,此问题确实存在,尚没有找到最终的解决方案。本文将详细讲解解决该问题或者缓解该问题的方法。 解决方案 经过搜索和暂时的解决方法尝试,此问题可以采取以下方法进行缓解或解决: 方法一:通过振动松动笔尾 笔尾是取出笔尖的位置。当S Pen插反后…

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