原生JS改变透明度实现轮播效果

yizhihongxing

好的!原生JS改变透明度实现轮播效果的攻略如下:

一、准备工作

  1. 在HTML文件中创建一个包含图片的轮播容器,如下所示:
<div class="slider">
  <img src="./image1.jpg" alt="image1">
  <img src="./image2.jpg" alt="image2">
  <img src="./image3.jpg" alt="image3">
</div>
  1. 在CSS中为这个轮播容器添加样式,包括宽度、高度、overflow等属性,使得轮播效果可以正常展现,如下所示:
.slider {
  width: 600px;
  height: 400px;
  overflow: hidden;
}

二、JS实现透明度轮播

  1. 在JS中获取轮播容器及其中所有图片的引用,如下所示:
const slider = document.querySelector('.slider');
const sliderImgs = document.querySelectorAll('.slider img');
  1. 设置一些常量,如轮播间隔时间、图片透明度变化速度等,如下所示:
const intervalTime = 3000; // 轮播间隔时间为3秒
const opacityChangeSpeed = 0.05; // 图片透明度变化速度为5%
  1. 创建一个轮播计数器、一个当前图片索引变量、一个变化方向变量,如下所示:
let slideCount = 1; // 轮播计数器
let currentImgIndex = 0; // 当前图片索引
let direction = 'up'; // 变化方向
  1. 在轮播函数中,根据变化方向对当前图片进行透明度变化,如下所示:
function slide() {
  // 判断变化方向
  if (direction === 'up') {
    // 图片透明度增加
    sliderImgs[currentImgIndex].style.opacity = Number(sliderImgs[currentImgIndex].style.opacity) + opacityChangeSpeed;
  } else {
    // 图片透明度减小
    sliderImgs[currentImgIndex].style.opacity = Number(sliderImgs[currentImgIndex].style.opacity) - opacityChangeSpeed;
  }

  // 判断图片透明度变化是否完成
  if (sliderImgs[currentImgIndex].style.opacity >= 1) {
    // 轮播计数器加1
    slideCount++;
    // 判断轮播计数器是否达到了最大值
    if (slideCount > sliderImgs.length) {
      // 重置轮播计数器为1
      slideCount = 1;
    }
    // 更新当前图片索引
    currentImgIndex = slideCount - 1;
    // 变化方向改变
    direction = 'down';
  } else if (sliderImgs[currentImgIndex].style.opacity <= 0) {
    // 变化方向改变
    direction = 'up';
  }

  // 继续执行轮播函数,形成循环
  setTimeout(slide, intervalTime/100);
}
  1. 在轮播函数中,更新其他图片的透明度为0,保证只有当前图片透明度在变化,如下所示:
// 更新其他图片的透明度为0
for (let i = 0; i < sliderImgs.length; i++) {
  if (i !== currentImgIndex) {
    sliderImgs[i].style.opacity = 0;
  }
}
  1. 在页面加载完成后,调用轮播函数开始轮播,如下所示:
window.onload = function() {
  slide();
}
  1. 完整代码示例:
const slider = document.querySelector('.slider');
const sliderImgs = document.querySelectorAll('.slider img');
const intervalTime = 3000; // 轮播间隔时间为3秒
const opacityChangeSpeed = 0.05; // 图片透明度变化速度为5%
let slideCount = 1; // 轮播计数器
let currentImgIndex = 0; // 当前图片索引
let direction = 'up'; // 变化方向

function slide() {
  if (direction === 'up') {
    sliderImgs[currentImgIndex].style.opacity = Number(sliderImgs[currentImgIndex].style.opacity) + opacityChangeSpeed;
  } else {
    sliderImgs[currentImgIndex].style.opacity = Number(sliderImgs[currentImgIndex].style.opacity) - opacityChangeSpeed;
  }

  if (sliderImgs[currentImgIndex].style.opacity >= 1) {
    slideCount++;
    if (slideCount > sliderImgs.length) {
      slideCount = 1;
    }
    currentImgIndex = slideCount - 1;
    direction = 'down';
  } else if (sliderImgs[currentImgIndex].style.opacity <= 0) {
    direction = 'up';
  }

  for (let i = 0; i < sliderImgs.length; i++) {
    if (i !== currentImgIndex) {
      sliderImgs[i].style.opacity = 0;
    }
  }

  setTimeout(slide, intervalTime/100);
}

window.onload = function() {
  slide();
}

三、示例说明

示例一

页面中有一个轮播容器,包含三张图片,分别为:image1、image2、image3。轮播间隔时间为5秒,透明度变化速度为3%。

<div class="slider">
  <img src="./image1.jpg" alt="image1">
  <img src="./image2.jpg" alt="image2">
  <img src="./image3.jpg" alt="image3">
</div>
.slider {
  width: 800px;
  height: 600px;
  overflow: hidden;
}
const slider = document.querySelector('.slider');
const sliderImgs = document.querySelectorAll('.slider img');
const intervalTime = 5000; // 轮播间隔时间为5秒
const opacityChangeSpeed = 0.03; // 图片透明度变化速度为3%
let slideCount = 1; // 轮播计数器
let currentImgIndex = 0; // 当前图片索引
let direction = 'up'; // 变化方向

function slide() {
  if (direction === 'up') {
    sliderImgs[currentImgIndex].style.opacity = Number(sliderImgs[currentImgIndex].style.opacity) + opacityChangeSpeed;
  } else {
    sliderImgs[currentImgIndex].style.opacity = Number(sliderImgs[currentImgIndex].style.opacity) - opacityChangeSpeed;
  }

  if (sliderImgs[currentImgIndex].style.opacity >= 1) {
    slideCount++;
    if (slideCount > sliderImgs.length) {
      slideCount = 1;
    }
    currentImgIndex = slideCount - 1;
    direction = 'down';
  } else if (sliderImgs[currentImgIndex].style.opacity <= 0) {
    direction = 'up';
  }

  for (let i = 0; i < sliderImgs.length; i++) {
    if (i !== currentImgIndex) {
      sliderImgs[i].style.opacity = 0;
    }
  }

  setTimeout(slide, intervalTime/100);
}

window.onload = function() {
  slide();
}

示例二

页面中有一个轮播容器,包含四张图片,分别为:image1、image2、image3、image4。轮播间隔时间为2秒,透明度变化速度为10%。

<div class="slider">
  <img src="./image1.jpg" alt="image1">
  <img src="./image2.jpg" alt="image2">
  <img src="./image3.jpg" alt="image3">
  <img src="./image4.jpg" alt="image4">
</div>
.slider {
  width: 400px;
  height: 300px;
  overflow: hidden;
}
const slider = document.querySelector('.slider');
const sliderImgs = document.querySelectorAll('.slider img');
const intervalTime = 2000; // 轮播间隔时间为2秒
const opacityChangeSpeed = 0.1; // 图片透明度变化速度为10%
let slideCount = 1; // 轮播计数器
let currentImgIndex = 0; // 当前图片索引
let direction = 'up'; // 变化方向

function slide() {
  if (direction === 'up') {
    sliderImgs[currentImgIndex].style.opacity = Number(sliderImgs[currentImgIndex].style.opacity) + opacityChangeSpeed;
  } else {
    sliderImgs[currentImgIndex].style.opacity = Number(sliderImgs[currentImgIndex].style.opacity) - opacityChangeSpeed;
  }

  if (sliderImgs[currentImgIndex].style.opacity >= 1) {
    slideCount++;
    if (slideCount > sliderImgs.length) {
      slideCount = 1;
    }
    currentImgIndex = slideCount - 1;
    direction = 'down';
  } else if (sliderImgs[currentImgIndex].style.opacity <= 0) {
    direction = 'up';
  }

  for (let i = 0; i < sliderImgs.length; i++) {
    if (i !== currentImgIndex) {
      sliderImgs[i].style.opacity = 0;
    }
  }

  setTimeout(slide, intervalTime/100);
}

window.onload = function() {
  slide();
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生JS改变透明度实现轮播效果 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • React和Vue的props验证示例详解

    关于React和Vue的props验证示例相关的攻略,我可以简要介绍以下内容。 标题 React和Vue的props验证 内容 在React和Vue中,我们可以使用props机制进行组件之间的数据传递,但由于传递的数据经常是不可控的,所以我们需要检查以确保我们接收到我们预期的数据类型和值。这就是所谓的props验证机制,我们可以减少代码块,减少不必要的信息和…

    Vue 2023年5月27日
    00
  • vue实现表单验证功能

    下面是关于“Vue实现表单验证功能”的完整攻略: 一、准备工作 在开始实现表单验证之前,我们需要先引入Vue和 Vue-Resource两个依赖库。在html文件中引入它们的CDN链接 <!– Vue.js –> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js…

    Vue 2023年5月27日
    00
  • Vue编程三部曲之将template编译成AST示例详解

    下面我将详细讲解“Vue编程三部曲之将template编译成AST示例详解”的完整攻略。 1. 什么是AST AST(Abstract Syntax Tree),即抽象语法树,是一种计算机科学中的树状数据结构。在编译原理中,AST是源代码的抽象语法结构的树状表现形式。它生成于解析阶段,通常由解析器创建,并被用作后续编译的基础。 2. 将template编译成…

    Vue 2023年5月27日
    00
  • vue-router重写push方法,解决相同路径跳转报错问题

    在 Vue.js 路由中使用 router.push 方法进行路由导航时,如果跳转的路径和当前路径相同,则会直接报错。为了解决这个问题,我们可以重写 router.push 方法,使其能够处理相同路径跳转的情况。 重写 router.push 方法的具体步骤如下: 手动创建一个新的 push 方法 在新的 push 方法中判断跳转路径是否和当前路径相同 如果…

    Vue 2023年5月28日
    00
  • Vue 3自定义指令开发的相关总结

    Vue 3自定义指令开发的相关总结 Vue 3自定义指令是Vue.js提供的一种扩展语法,可以用于对普通HTML标签的属性进行自定义绑定和操作。Vue 3的自定义指令与Vue 2的自定义指令相比,有较大的变化,需要开发者重新学习和掌握。 Vue 3自定义指令的基本语法 Vue 3中定义自定义指令的方式如下: const directive = { // di…

    Vue 2023年5月27日
    00
  • vue3中的对象时为proxy对象如何获取值(两种方式)

    在Vue3中,数据响应式的实现机制与Vue2中完全不同,采用了ES6中的Proxy对象。Proxy可以拦截对象的读取、赋值、删除等操作,从而使Vue3中的响应式数据更加高效和灵活。 在获取Vue3中的Proxy对象的值时,有两种方式: 1. 直接使用点操作符访问属性 可以和普通的JS对象一样使用点操作符来访问Proxy对象的属性。 const reactiv…

    Vue 2023年5月28日
    00
  • 关于Vue3中defineProps用法图文详解

    什么是 defineProps?defineProps 是 Vue3 中一种新的组件数据传递方式,可以用于在子组件中定义接收哪些父组件的 props。当父组件的 props 发生变化时,子组件也会随之响应。 如何使用 defineProps?在子组件中可以使用 defineProps 声明该组件需要接收的 props,它需要传递一个包含 props 字段的对…

    Vue 2023年5月28日
    00
  • vue如何动态设置class、动态设置style

    我很乐意为您介绍如何在Vue中动态设置class和style。 动态设置class 在Vue中,我们可以使用v-bind指令来动态绑定class。方式是将要绑定的class名以一个对象的形式传入。 例如,我们有一个布尔值isRed,当isRed为true时,我们需要给一个元素添加red这个class名。实现方式如下: <template> &lt…

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