原生js实现图片层叠轮播切换效果

让我来详细讲解一下“原生js实现图片层叠轮播切换效果”的完整攻略:

1. 准备工作

在开始编写代码之前,需要进行一些准备工作:

1.1 编写 HTML 结构

首先需要编写 HTML 结构,包含轮播图容器、图片容器、轮播点容器等元素,示例代码如下:

<div class="swiper-container">
  <div class="swiper-wrapper">
    <div class="swiper-slide"><img src="image1.jpg"></div>
    <div class="swiper-slide"><img src="image2.jpg"></div>
    <div class="swiper-slide"><img src="image3.jpg"></div>
  </div>
  <div class="swiper-pagination"></div>
</div>

1.2 初始化样式

为了方便样式的处理,需要先对容器元素进行初始化样式,示例代码如下:

.swiper-container {
  position: relative;
  overflow: hidden;
}
.swiper-wrapper {
  position: relative;
  width: 100%;
  height: 100%;
}
.swiper-slide {
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  opacity: 0;
  transition: opacity .6s ease-out;
}
.swiper-slide-active {
  opacity: 1;
  z-index: 1;
}

2. 编写 JavaScript

接下来开始编写 JavaScript 代码,实现图片层叠轮播切换效果。

2.1 获取元素

首先需要获取到容器元素、图片容器、轮播点容器等元素,示例代码如下:

const swiperContainer = document.querySelector('.swiper-container');
const swiperWrapper = document.querySelector('.swiper-wrapper');
const swiperSlides = document.querySelectorAll('.swiper-slide');
const pagination = document.querySelector('.swiper-pagination');

2.2 初始化参数

接着需要初始化各种参数,包括图片数量、当前下标、自动轮播间隔时间等,示例代码如下:

const slideCount = swiperSlides.length;
let currentIndex = 0;
let timer = null;
const interval = 3000;

2.3 编写切换函数

然后需要编写图片切换函数,包括切换时的位移、透明度、轮播点等操作,示例代码如下:

function goToSlide(index) {
  if (index < 0) {
    index = slideCount - 1;
  } else if (index >= slideCount) {
    index = 0;
  }
  swiperWrapper.style.transform = `translate3d(-${index * 100}%, 0, 0)`;
  swiperSlides[currentIndex].classList.remove('swiper-slide-active');
  swiperSlides[index].classList.add('swiper-slide-active');
  currentIndex = index;
  updatePagination();
}

2.4 编写自动轮播函数

还需要编写自动轮播函数,实现定时调用图片切换函数,示例代码如下:

function startAutoPlay() {
  timer = setInterval(function() {
    goToSlide(currentIndex + 1);
  }, interval);
}

function stopAutoPlay() {
  clearInterval(timer);
}

2.5 编写轮播点操作函数

最后需要编写轮播点操作函数,实现点击轮播点时切换到对应的图片,示例代码如下:

function updatePagination() {
  pagination.innerHTML = '';
  for (let i = 0; i < slideCount; i++) {
    const li = document.createElement('li');
    li.classList.add('pagination-item');
    if (i === currentIndex) {
      li.classList.add('active');
    }
    li.addEventListener('click', function() {
      stopAutoPlay();
      goToSlide(i);
      startAutoPlay();
    });
    pagination.appendChild(li);
  }
}

3. 完整示例

下面是完整的示例代码,可以直接运行在浏览器中:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>原生js实现图片层叠轮播切换效果</title>
  <style>
    .swiper-container {
      position: relative;
      overflow: hidden;
      width: 500px;
      height: 300px;
    }
    .swiper-wrapper {
      position: relative;
      width: 100%;
      height: 100%;
    }
    .swiper-slide {
      position: absolute;
      left: 0;
      top: 0;
      width: 100%;
      height: 100%;
      opacity: 0;
      transition: opacity .6s ease-out;
    }
    .swiper-slide-active {
      opacity: 1;
      z-index: 1;
    }
    .swiper-pagination {
      position: absolute;
      left: 50%;
      bottom: 20px;
      transform: translateX(-50%);
      display: flex;
    }
    .pagination-item {
      margin: 0 10px;
      width: 10px;
      height: 10px;
      border-radius: 50%;
      background: #ccc;
      cursor: pointer;
      transition: background .3s ease-out;
    }
    .pagination-item.active {
      background: #333;
    }
  </style>
</head>
<body>
  <div class="swiper-container">
    <div class="swiper-wrapper">
      <div class="swiper-slide"><img src="https://picsum.photos/id/237/500/300"></div>
      <div class="swiper-slide"><img src="https://picsum.photos/id/238/500/300"></div>
      <div class="swiper-slide"><img src="https://picsum.photos/id/239/500/300"></div>
    </div>
    <div class="swiper-pagination"></div>
  </div>

  <script>
    const swiperContainer = document.querySelector('.swiper-container');
    const swiperWrapper = document.querySelector('.swiper-wrapper');
    const swiperSlides = document.querySelectorAll('.swiper-slide');
    const pagination = document.querySelector('.swiper-pagination');

    const slideCount = swiperSlides.length;
    let currentIndex = 0;
    let timer = null;
    const interval = 3000;

    function goToSlide(index) {
      if (index < 0) {
        index = slideCount - 1;
      } else if (index >= slideCount) {
        index = 0;
      }
      swiperWrapper.style.transform = `translate3d(-${index * 100}%, 0, 0)`;
      swiperSlides[currentIndex].classList.remove('swiper-slide-active');
      swiperSlides[index].classList.add('swiper-slide-active');
      currentIndex = index;
      updatePagination();
    }

    function startAutoPlay() {
      timer = setInterval(function() {
        goToSlide(currentIndex + 1);
      }, interval);
    }

    function stopAutoPlay() {
      clearInterval(timer);
    }

    function updatePagination() {
      pagination.innerHTML = '';
      for (let i = 0; i < slideCount; i++) {
        const li = document.createElement('li');
        li.classList.add('pagination-item');
        if (i === currentIndex) {
          li.classList.add('active');
        }
        li.addEventListener('click', function() {
          stopAutoPlay();
          goToSlide(i);
          startAutoPlay();
        });
        pagination.appendChild(li);
      }
    }

    startAutoPlay();
  </script>
</body>
</html>

可以发现,该示例代码实现了图片层叠轮播切换效果,并且提供了自动轮播和轮播点操作的功能,具有较好的用户体验。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生js实现图片层叠轮播切换效果 - Python技术站

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

相关文章

  • 值得收藏的一些HTML、JavaScript、ASP代码

    首先我们要明确一下,“值得收藏的一些HTML、JavaScript、ASP代码”指的是什么? 什么是值得收藏的代码? 值得收藏的代码是指那些能够提高你开发效率,实现一些高级功能或者增强用户交互,甚至带来一些乐趣的代码片段。这些代码可能是通过互联网上各种途径获得的,可能是来自优秀的开源项目,也可能是自己编写的。 这里我将讲解以下几个方面: 如何搜索值得收藏的代…

    JavaScript 2023年6月10日
    00
  • Web开发之JavaScript

    Web开发之JavaScript 一、JavaScript入门 1. JavaScript是什么 JavaScript是一种广泛应用于Web开发的脚本语言,主要用于为网页添加动态效果、实现交互功能等。 2. 学习JavaScript的基本要素 (1)掌握HTML和CSS的基本用法 在使用JavaScript进行Web开发时,HTML和CSS是最基本的语言。 …

    JavaScript 2023年5月18日
    00
  • JavaScript实现的encode64加密算法实例分析

    JavaScript实现的encode64加密算法实例分析 简介 encode64是一种基于64个可打印字符来表示二进制数据的编码方式。相比于普通的ASCII码编码而言,它可以更加节约空间。这种编码方式常用于在网络传输中对一些隐私数据进行加密保护。 实现原理 encode64算法的实现原理如下: 将原始数据(二进制)每6位一组,转换成相应的十进制数。 根据以…

    JavaScript 2023年6月1日
    00
  • JavaScript常用内置对象用法分析

    JavaScript常用内置对象用法分析攻略 什么是内置对象 在JavaScript中,常用内置对象是指自带的对象,无需额外导入或安装插件便可直接使用的对象。比如:数组对象、字符串对象、数学对象、日期对象等。 常用内置对象用法分析 数组对象 数组对象是JavaScript中重要的内置对象之一。数组对象用法如下: 创建数组 var arr = new Arra…

    JavaScript 2023年6月10日
    00
  • 前端设计模式——外观模式

    外观模式(Facade Pattern):它提供了一个简单的接口,用于访问复杂的系统或子系统。通过外观模式,客户端可以通过一个简单的接口来访问复杂的系统,而无需了解系统内部的具体实现细节。 在前端开发中,外观模式常常被用于封装一些常用的操作,以简化代码复杂度和提高代码可维护性。比如,一个用于处理数据的模块可能包含很多复杂的代码逻辑和 API 调用,但是我们可…

    JavaScript 2023年4月18日
    00
  • javascript中的Array对象(数组的合并、转换、迭代、排序、堆栈)

    下面是关于JavaScript中的Array对象的完整攻略: 概述 Array是JavaScript中用于存储和操作一组数据的对象,它是一种有序列表,可以存储不同类型的值,包括数字、字符串、对象、甚至是其它数组。 在使用Array时,我们可以通过许多方法来操作它,这些方法可以帮助我们对数组进行合并、转换、迭代、排序和操作堆栈。接下来我们将逐一介绍这些方法。 …

    JavaScript 2023年5月27日
    00
  • JavaScript时间戳与时间日期间相互转换

    下面我将详细讲解“JavaScript 时间戳与时间日期间相互转换”的完整攻略。 什么是时间戳? 时间戳是用于表示时间的一种方式,它是自1970年1月1日 00:00:00 UTC到当前时间的毫秒数。JavaScript只支持精确到毫秒级别的时间戳。 时间戳的好处是可以通过它来进行时间比较或计算时间差等操作,并且可以通过时间戳在不同的设备和系统之间进行时间的…

    JavaScript 2023年5月27日
    00
  • JavaScript中Location.search处理使用方法

    JavaScript中Location.search处理使用方法 在JavaScript中,Location对象提供了一些方法来操作URL,其中Location.search属性用于获取或设置URL中问号后面的查询字符串部分。查询字符串可以包含多个参数,每个参数由参数名和参数值组成,以等号连接,不同参数之间以&符号分隔。 获取查询参数 我们可以通过如…

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