原生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 技巧

    今天分享几个少见却很有用的 JS 技巧 技巧一:使用逻辑运算符对变量进行赋值 在 JavaScript 中,逻辑运算符可以用来对变量进行赋值。比如,我们想要将一个变量的值限制在某一范围内,可以使用以下方式: var num = 5; num = (num <= 10) ? num : 10; console.log(num); // 输出5 num =…

    JavaScript 2023年5月18日
    00
  • 详解javascript高级定时器

    详解JavaScript高级定时器 在JavaScript中,定时器是一种非常强大的机制,它允许你在未来的某个时间点执行某些代码。在本文中,我们将探讨JavaScript高级定时器的各种用法和技巧。 setTimeout setTimeout允许你在一定的延迟之后执行一段代码。语法如下: setTimeout( function() { // 在这里写需要执…

    JavaScript 2023年6月11日
    00
  • 浅谈JS使用[ ]来访问对象属性

    下面是详细讲解“浅谈JS使用[ ]来访问对象属性”的完整攻略。 什么是对象属性? 在 JavaScript 中,对象属性指的是对象中保存数据的一个部分。对象的属性可以存储任何类型的数据,包括字符串、数字、布尔值、对象等等。 比如下面这个简单的对象: const myObj = { name: "Tom", age: 18 }; 它有两个属…

    JavaScript 2023年5月27日
    00
  • ES6知识点整理之数组解构和字符串解构的应用示例

    针对ES6知识点整理之数组解构和字符串解构的应用示例,我的建议是按照以下步骤进行: 1. 了解ES6中的解构赋值 解构赋值是ES6新增的语法特性,它允许我们从数组或者对象中提取值,然后对变量进行赋值。它的一般语法格式如下: let [a, b, …rest] = [1, 2, 3, 4, 5]; console.log(a); // 1 console.…

    JavaScript 2023年5月28日
    00
  • AngularJS使用ngMessages进行表单验证

    好的!那么在这里我将详细为您讲解如何使用AngularJS中的ngMessages模块进行表单验证。 什么是ngMessages? ngMessages是AngularJS模块中的一种指令,用于在UI层面进行表单验证。ngMessages会根据验证不通过时的条件,自动输出相应的错误消息。这样可以极大地方便用户填写表单,并且提示信息是根据具体情况显示的,让用户…

    JavaScript 2023年6月10日
    00
  • 为JS扩展Array.prototype.indexOf引发的问题探讨及解决

    我会详细讲解“为JS扩展Array.prototype.indexOf引发的问题探讨及解决”的完整攻略。以下是具体的步骤: 1.问题描述 在JS中,Array.prototype.indexOf()方法用于查找元素在数组中的位置,如果存在,就返回它的下标。但是,有一些开发者会通过扩展Array.prototype.indexOf()方法的方式来添加一些自定义…

    JavaScript 2023年6月11日
    00
  • Javascript入门学习第三篇 js运算

    Javascript入门学习第三篇 js运算 在Javascript中,我们可以使用运算符来进行一系列的数学和逻辑运算。运算符可以对不同类型的值(例如数字、字符串、布尔值等)执行不同的操作。本篇教程将介绍Javascript中的各种运算符及其用法。 算术运算符 Javascript中的算术运算符用于执行基本的数学运算。常用的算术运算符包括:加号(+), 减号…

    JavaScript 2023年5月17日
    00
  • javascript+css实现进度条效果

    下面是实现进度条效果的攻略: 1.基本原理 进度条通常是在页面的顶部或底部显示的,用来展示某个任务的完成进度。实现进度条的基本原理是,通过JavaScript控制元素的宽度达到动画效果。然后结合CSS使进度条更美观。 2. 实现步骤 2.1 HTML结构 首先需要在HTML中添加进度条的结构,通常情况下进度条是一个<div>元素,同时为了更好地控…

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