原生javascript实现图片轮播切换效果

下面进入主题,讲解如何用原生 JavaScript 实现图片轮播切换效果。

准备

在开始实现之前,我们需要先准备好以下内容:

  1. 图片资源
  2. 一个用于显示轮播图片的HTML元素
  3. CSS样式
  4. JavaScript代码

HTML

我们先来看一下 HTML 部分的代码。我们需要一个 div 元素作为图片轮播的容器,用于显示待切换的图片。

<div id="image-container">
  <img src="img1.jpg" alt="图片1" />
  <img src="img2.jpg" alt="图片2" />
  <img src="img3.jpg" alt="图片3" />
</div>

CSS

再来看一下 CSS 部分的代码。我们需要设置图片容器的宽度和高度,以及将图片设置为居中显示。

#image-container {
  width: 700px;
  height: 400px;
  margin: 0 auto;
  text-align: center;
}

#image-container img {
  max-width: 100%;
  max-height: 100%;
  display: none;
}

#image-container img:first-child {
  display: block;
}

上面的代码中,第一个 img 元素会被默认显示,其他 img 元素通过 CSS 隐藏。在 JavaScript 中,我们会根据需求动态地切换图片的显示。

JavaScript

接下来我们来到 JavaScript 的实现过程。我们需要实现以下三个功能:

  1. 自动轮播图片
  2. 点击左、右按钮切换图片,包括切换前后的图片使用动画特效
  3. 鼠标悬停在轮播图上时停止自动轮播,离开时自动轮播继续

自动轮播图片

自动轮播图片需要使用定时器来实现。我们可以使用 setInterval 或者 setTimeout 方法来实现。

let index = 0;
let timer = setInterval(() => {
  index++;
  if(index >= imageList.length) {
    index = 0;
  }
  changeImage(index);
}, 3000);

function changeImage(index) {
  const imageList = document.querySelectorAll("#image-container img");
  const currentImage = document.querySelector("#image-container img.show");
  const nextImage = imageList[index];
  currentImage.classList.remove("show");
  nextImage.classList.add("show");
}

在上面的代码中,我们设置了一个 timer 变量,使用 setInterval 方法每隔 3 秒钟自动轮播一次图片。index 变量表示当前显示的图片在图片列表中的索引。在函数 changeImage 中,我们使用 querySelectorAll 方法获取所有图片元素,并从中找到当前显示的图片和下一张要显示的图片。然后对当前和下一张图片元素分别进行操作,使用 classList 进行 CSS 类的添加和删除,从而实现图片轮播的切换效果。

点击左右按钮切换图片

左右切换按钮的实现主要分为两个部分:添加左右按钮的点击事件监听器,以及实现图片切换动画。其中,图片切换动画可以使用 CSS3 中的 transition 属性实现。

const leftButton = document.querySelector('#left-button');
const rightButton = document.querySelector('#right-button');
let currentIndex = 0;

leftButton.addEventListener('click', () => {
  currentIndex--;
  if(currentIndex<0) {
    currentIndex = imageList.length-1;
  }
  changeImage(currentIndex);
});

rightButton.addEventListener('click', () => {
  currentIndex++;
  if(currentIndex >= imageList.length) {
    currentIndex = 0;
  }
  changeImage(currentIndex);
});

function changeImage(index) {
  const currentImage = document.querySelector("#image-container img.show");
  const nextImage = imageList[index];

  // 在动画结束后,去掉图片的 translate 属性
  currentImage.style.transform = "translate(-700px)";
  currentImage.addEventListener("transitionend", () => {
    nextImage.classList.add("next");
    currentImage.classList.remove("show");
    currentImage.classList.remove("next");
    currentImage.style.transform = "";
  });

  // 添加 next 类,缩小图片的初始大小
  nextImage.classList.add("next");
  setTimeout(() => {
    nextImage.classList.add("show");
    currentImage.style.transform = "translate(700px)";
  }, 10);
}

在上面的代码中,我们定义了两个变量 leftButtonrightButton,分别表示左右切换按钮元素。然后为左右按钮分别添加 click 事件监听器,当点击按钮时,调用 changeImage 方法,实现图片的切换。

changeImage 方法中,我们先获取当前显示的图片和下一张要显示的图片。为了使切换图片时显示出动画效果,我们使用 transition 属性给当前显示的图片添加一个动画过渡效果。当当前图片的动画效果结束之后,我们再移除它的 shownext 类,并将图片的 translate 属性清除,恢复图片的原始位置。

右边图片的处理思路类似,不再赘述。

停止自动轮播

最后,我们需要实现当鼠标悬停在轮播图上时,停止自动轮播,当鼠标移开时,自动轮播继续。

const imageContainer = document.querySelector("#image-container");

Imagecontainer.addEventListener("mouseenter", () => {
  clearInterval(timer);
});

Imagecontainer.addEventListener("mouseleave", () => {
  timer = setInterval(() => {
    index++;
    if (index >= imageList.length) {
      index = 0;
    }
    changeImage(index);
  }, 3000);
});

在上面的代码中,我们使用 addEventListener 监听鼠标进入和离开事件,并在事件发生时更改定时器来实现自动轮播的停止和继续。

示例

以上就是实现原生 JavaScript 图片轮播的完整攻略。现在来看两个实际示例,一个是将图片旋转 360 度来实现轮播效果,另一个是使用纯 css 来实现轮播效果,两个示例会帮助你更好的理解 JavaScript 中实现轮播的细节。

示例一:旋转效果

#image-container {
  position: relative;
  width: 700px;
  height: 400px;
  margin: 50px auto 0;
  perspective: 1000px;
}

#image-container img {
  position: absolute;
  width: 100%;
  height: 100%;
  transition: transform 1s linear;
}

#image-container img.next {
  transform: rotateY(180deg);
}

#image-container img.show {
  transform: rotateY(0deg);
}
const imageList = document.querySelectorAll("#image-container img");
let index = 0;
let timer = setInterval(() => {
  index++;
  if (index >= imageList.length) {
    index = 0;
  }
  changeImage(index);
}, 3000);

function changeImage(index) {
  const currentImage = document.querySelector("#image-container img.show");
  const nextImage = imageList[index];
  currentImage.classList.remove("show");
  nextImage.classList.add("next");
  setTimeout(() => {
    nextImage.classList.add("show");
    currentImage.classList.remove("next");
  }, 500);
}

示例二:CSS 实现轮播

#image-container {
  width: 700px;
  height: 400px;
  margin: 50px auto;
  position: relative;
}

#image-container img {
  position: absolute;
  top: 0;
  left: 0;
  opacity: 0;
  transition: opacity 1s ease-out;
}

#image-container img.show {
  opacity: 1;
  z-index: 1;
}

#image-container img.next {
  opacity: 1;
  z-index: 2;
}
const imageList = document.querySelectorAll("#image-container img");
let index = 0;
let timer = setInterval(() => {
  index++;
  if (index >= imageList.length) {
    index=0;
  }
  changeImage(index);
}, 3000);

function changeImage(index) {
  const currentImage = document.querySelector("#image-container img.show");
  const nextImage = imageList[index];
  currentImage.classList.remove("show");
  nextImage.classList.add("next");
  setTimeout(() => {
    nextImage.classList.remove("next");
    nextImage.classList.add("show");
  }, 500);
}

总结

以上就是实现原生 JavaScript 图片轮播的过程,其中的每个步骤都有其实现的原理和细节。通过这个例子,我们不仅学会了如何使用 JavaScript 实现图片轮播,还了解了使用 CSS 实现轮播效果的方法,同时也提高了我们在 HTML/CSS/JavaScript 应用中的综合能力。

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

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

相关文章

  • JS访问SWF的函数用法实例

    JS访问SWF函数用法实例攻略 在Web开发中,有时我们需要在JS中调用SWF动画中的函数,来实现一些交互效果。本攻略将详细讲解如何在JS中访问SWF函数,并提供两个实例说明。 步骤一:为SWF函数起一个别名 在AS3中,为了让JS能访问到SWF中的函数,我们需要给这个函数起一个别名。别名可以在发布SWF文件时以“flashvars”参数的形式传递。此处声明…

    JavaScript 2023年5月27日
    00
  • 《JavaScript DOM 编程艺术》读书笔记之JavaScript 语法

    《JavaScript DOM 编程艺术》读书笔记之JavaScript 语法 什么是JavaScript? JavaScript 是一种用于 Web 上的编程语言。它用于为 web 页面添加交互性和动态效果。JavaScript 通常通过在网页上嵌入脚本来实现: <script type="text/javascript">…

    JavaScript 2023年5月18日
    00
  • javascript工厂方式定义对象

    下面我将详细讲解一下“javascript工厂方式定义对象”的完整攻略。 什么是工厂模式 在 JavaScript 中,工厂模式是一种用于创建对象的设计模式。这种模式可以用来解决创建对象时代码冗余的问题,同时也有利于避免不必要的重复工作,从而使代码更加简洁、优雅。 工厂模式的基本实现方式 下面,我们来看一下工厂模式的基本实现方式: function fact…

    JavaScript 2023年6月10日
    00
  • 在Chrome DevTools中调试JavaScript的实现

    在Chrome DevTools中调试JavaScript的实现可以帮助我们更加高效地进行开发和调试。本文将详细介绍如何在Chrome DevTools中调试JavaScript。 1.打开Chrome DevTools Chrome DevTools可以通过多种方式打开,以下是其中两种: 右键单击页面上的任何元素,然后选择“检查”。 使用Ctrl + Sh…

    JavaScript 2023年5月28日
    00
  • JS在浏览器中解析Base64编码图像

    在浏览器中解析Base64编码图像可以使用JavaScript来实现,下面是实现的步骤和相应的示例代码。 1. 将Base64编码字符串转换为Blob对象 使用atob()函数将Base64编码字符串转换为二进制数据,然后将其转换为Blob对象。 // 示例1:将Base64编码字符串转换为Blob对象 const base64 = ‘data:image/…

    JavaScript 2023年5月19日
    00
  • JS实现时间选择器

    JS实现时间选择器的攻略需要遵守以下步骤: 1. 准备工作 首先需要在页面中引入需要用到的JS库,例如jQuery或者Zepto。可以通过CDN或者下载本地使用。 2. 创建HTML结构 时间选择器需要一个输入框来显示选中的时间,同时还需要一个弹窗来显示时间选择器控件。HTML结构可以按照以下方式构建: <div class="form-gr…

    JavaScript 2023年5月27日
    00
  • 谈谈我对JavaScript原型和闭包系列理解(随手笔记6)

    来详细讲解一下“谈谈我对JavaScript原型和闭包系列理解(随手笔记6)”这篇文章。 标题 文章的标题是“谈谈我对JavaScript原型和闭包系列理解(随手笔记6)”,主要内容是探讨JavaScript中的原型和闭包。 正文 原型 在JavaScript中,每个对象都有一个原型对象(即 prototype 属性)。原型对象是一个普通的对象,它有可能也有…

    JavaScript 2023年6月10日
    00
  • 原生js操作checkbox用document.getElementById实现

    原生JS操作checkbox用document.getElementById实现的步骤如下: 1.在HTML页面中添加checkbox元素: <input type="checkbox" id="myCheckbox">My Checkbox</input> 2.在JS文件中使用document…

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