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

yizhihongxing

让我来详细讲解一下“原生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日

相关文章

  • JS中DOM元素的attribute与property属性示例详解

    关于“JS中DOM元素的attribute与property属性示例详解”,我们可以从以下几个方面进行说明: 一、什么是DOM元素的attribute和property? DOM元素可以看做是一个JS对象,它有很多属性和方法,其中包括两个比较容易混淆的属性,分别是attribute和property。 attribute是DOM元素具有的属性,就是标签上的属…

    JavaScript 2023年6月10日
    00
  • JavaScript实现动画打开半透明提示层的方法

    下面是“JavaScript实现动画打开半透明提示层的方法”的完整攻略。 确定提示层的样式和HTML结构 首先,我们需要确定提示层的样式和HTML结构。提示层一般是一个半透明的背景遮罩,上面有一个包含提示信息的框。 HTML结构可以使用div来实现,样式可以使用CSS来设置,比如: .tip-wrap { position: fixed; top: 0; l…

    JavaScript 2023年6月11日
    00
  • 实现JavaScript中继承的三种方式

    实现JavaScript中继承的三种方式包括:原型链继承、构造函数继承和组合继承。 1. 原型链继承 原型链继承是通过将子类的原型指向父类实例来实现继承的。代码示例如下: // 父类 function Person(name) { this.name = name; } Person.prototype.sayHello = function() { con…

    JavaScript 2023年5月27日
    00
  • 在HTML代码中使用JavaScript代码的例子

    在HTML代码中使用JavaScript代码是一种常见的前端编程技巧,可以为网页添加各种交互和动态效果。下面是两个使用JavaScript代码的例子,分别展示在HTML中如何使用内联JavaScript代码和外部JavaScript文件。 内联JavaScript代码 内联JavaScript代码直接在HTML元素的代码里嵌入JavaScript代码,可以实…

    JavaScript 2023年5月18日
    00
  • js判断是否为数组的函数: isArray()

    要判断一个变量是否为数组,我们可以使用JavaScript中的isArray()函数。以下是关于该函数的详细攻略: 语法 Array.isArray(obj) 参数 obj:必需。 检测该对象是否是数组。 返回值 如果 obj 是数组返回 true,否则返回 false。 示例一 const arr = [1, 2, 3]; console.log(Arra…

    JavaScript 2023年5月27日
    00
  • js实现鼠标悬浮框效果

    JavaScript 实现鼠标悬浮框效果的过程主要分为以下几步: 1. 创建 HTML 结构 首先需要在 HTML 中定义框架,例如容器、容器内的内容、触发事件的 DOM 元素等。其中包含一个容器作为悬浮框,在鼠标触发事件后自动显示,同时鼠标移出事件后自动隐藏。 例如: <div class="parent"> <but…

    JavaScript 2023年6月11日
    00
  • js实现接收表单的值并将值拼在表单action后面的方法

    实现接收表单的值并将值拼在表单action后面的方法,可以通过以下步骤来完成: 使用 HTML 表单标签创建表单,并指定表单的 action 和 method 属性以及 input 标签来定义表单项。 <form action="submit.php" method="post"> <label fo…

    JavaScript 2023年6月10日
    00
  • Javascript中获取出错代码所在文件及行数的代码

    在Javascript代码中,有时候我们需要知道出错的代码所在的文件和行数。这个问题可以通过在代码中添加一些特定的指令来实现。下面是实现此功能的完整攻略: 步骤1: 这个功能需要运行在浏览器环境下。打开浏览器的控制台,找到“Console”面板,在里面输入以下代码: console.log(‘出错了’); throw new Error(‘错误信息’); 这…

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