原生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日

相关文章

  • JavaScript如何删除对象的某个属性详析

    让我来详细讲解一下“JavaScript如何删除对象的某个属性”。 1. 删除对象属性的方法 JavaScript提供了两种方法来删除对象的某个属性: 1.1 delete操作符 delete操作符可以删除对象的属性,语法如下: delete object.property; 其中,object是待删除属性的对象,property是待删除的属性名。例如: v…

    JavaScript 2023年6月10日
    00
  • python闭包的实例详解

    下面我将为您详细讲解 “Python闭包的实例详解”。 什么是闭包 在介绍闭包的实例之前,我们先来了解闭包的概念。闭包是指在函数内部再定义函数,并且这个内部函数可以引用到外部函数中的变量,叫做闭包。 下面是一个简单的例子,函数 counter 返回了内部函数 add,而 add 引用了外层的变量 n。 def counter(n): def add(m): …

    JavaScript 2023年6月10日
    00
  • javascript学习随笔(编写浏览器脚本 Navigator Scripting )

    JavaScript学习随笔(编写浏览器脚本 Navigator Scripting) 概述 Navigator对象在JavaScript中提供了许多有用的属性和方法,可以用于检测和操作浏览器。 在编写浏览器脚本时,Navigator对象的知识非常重要。 Navigator对象中的属性和方法 Navigator对象的属性 navigator.appCodeN…

    JavaScript 2023年5月27日
    00
  • JavaScript+canvas实现七色板效果实例

    下面是详细讲解“JavaScript+canvas实现七色板效果实例”的完整攻略。 一、背景介绍 在现代Web前端开发中,Canvas是使用最广泛的绘图技术之一。Canvas可以用来绘制各种图形,文字,图片等,也可以用来制作动画,实现图像处理等。在本文中,我们将介绍如何使用JavaScript+Canvas实现七色板效果,这是一个非常酷的效果,让你的网站更加…

    JavaScript 2023年6月11日
    00
  • js跨域请求数据的3种常用的方法

    下面是详细讲解”js跨域请求数据的3种常用的方法”的攻略: 1. 跨域请求数据的背景 在Web开发的过程中,经常会遇到需要通过js代码来请求数据的情况。我们知道,由于同源策略(Same-origin policy)的限制,不同源(域)之间的js代码请求是受限制的。跨域请求数据就是在解决这个限制的前提下来实现的。 2. 跨域请求数据的3种常用的方法 2.1 J…

    JavaScript 2023年5月27日
    00
  • 深入理解JavaScript字节二进制知识以及相关API

    深入理解JavaScript字节二进制知识以及相关API 为什么需要了解字节和二进制? 在前端开发中,我们经常会遇到需要处理二进制数据的场景,例如图片加载、加密算法、数据压缩等等。在这些场景下,我们必须对字节和二进制有深刻的理解,才能够正确地处理和操作数据。 字节和二进制的概念 从计算机的角度来看,数据和指令都是二进制串。直接以二进制串的形式进行数据处理和传…

    JavaScript 2023年5月19日
    00
  • js前端如何写一个精确的倒计时代码

    下面我将为你详细讲解JS前端如何编写一个精确的倒计时代码。 如何编写JS倒计时 步骤一:取值 我们需要先取得倒计时的结束时间,以便计算剩余时间。可以通过以下代码获取当前时间: const now = new Date().getTime(); 然后,可以通过设定一个结束时间(例如:2022年1月1日),并将其转换为时间戳: const end = new D…

    JavaScript 2023年6月11日
    00
  • 深入理解javascript中的this

    深入理解JavaScript中的this的完整攻略 什么是this 所谓 this ,就是JavaScript中一个相对特殊的关键字,指向当前函数的执行环境。换句话说,this 可以看做是一个对象,这个对象指向的是函数执行时所在的环境对象,而这个环境对象是由调用方式来决定的。 this指向的典型情况 在JavaScript中,this 的指向是根据如何调用当…

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