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

好的!原生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日

相关文章

  • 浅谈基于Vue.js的移动组件库cube-ui

    浅谈基于Vue.js的移动组件库cube-ui 介绍 cube-ui是一个基于 Vue.js 的移动端组件库。它提供了很多常用的移动端 UI 组件,可以快速构建高质量的移动应用。cube-ui 在使用上都使用单文件组件,非常适合 Vue.js 开发者。它是由滴滴出行开源的。 安装 先使用npm安装vue-cli,再使用vue-cli构建项目 $ npm in…

    Vue 2023年5月28日
    00
  • 基于vuejs+webpack的日期选择插件

    下面是详细讲解基于vuejs+webpack的日期选择插件的完整攻略: 1. 准备工作 这个插件是基于vuejs和webpack开发的,所以使用前需要先安装这两个工具。 安装vuejs 安装vuejs可以使用npm命令,在终端中输入以下命令: npm install vue 安装webpack 安装webpack同样可以使用npm命令,在终端中输入以下命令:…

    Vue 2023年5月29日
    00
  • vue中SPA单页面应用程序详解

    Vue中SPA单页面应用程序详解 什么是SPA单页面应用程序 SPA全称Single Page Application,意为单页面应用程序。它是一种特殊的网页应用程序,其特点是整个网站只有一个HTML页面,但在页面加载后,所有的页面操作都在该页面上进行,通过Ajax技术实现页面的局部刷新,最终实现不刷新页面的情况下,达到与传统多页面网站相同的用户体验。 Vu…

    Vue 2023年5月27日
    00
  • vue中使用localstorage来存储页面信息

    当使用Vue构建单页应用程序时,使用localStorage来存储页面信息是一种常见的做法。localStorage是一个API,可以将数据永久存储在浏览器中,即使用户关闭了浏览器,数据也不会丢失。以下是Vue中使用localStorage来存储页面信息的完整攻略,包含两条示例说明。 使用localStorage存储数据 要在Vue中使用localStora…

    Vue 2023年5月28日
    00
  • vue3的watch和watchEffect你了解吗

    当我们在使用Vue.js开发应用时,经常需要监听数据的变化并做出相应的响应,在Vue.js中,我们可以使用watch和watchEffect这两个响应式API来实现数据的监听。 watch watch是Vue.js中的一个响应式API,用于监听指定数据的变化并做出相应的响应。在Vue3中,我们可以通过watch函数来创建一个监听器。 watch的基本用法 以…

    Vue 2023年5月27日
    00
  • 关于vue2响应式缺陷的问题

    问题描述: 在Vue2中使用响应式数据,如果一个对象的属性不存在,那么对于该属性的修改并不会触发视图的更新。 解决方法: 1.使用Vue.set()方法手动触发更新 Vue.set()是Vue提供的一种修改响应式对象的方法,可以更新对象的属性并触发视图更新。使用方法如下: Vue.set(vm.someObject, ‘key’, value); 其中,vm…

    Vue 2023年5月29日
    00
  • vue.js入门教程之计算属性

    下面是关于“vue.js入门教程之计算属性”的完整攻略: 什么是计算属性 计算属性是Vue.js的一个重要特性,它能够对绑定的数据进行计算,然后返回一个新的值。 Vue.js官网对计算属性的介绍: 计算属性是基于它们的响应式依赖进行缓存的。只在相关响应式依赖发生改变时它们才会重新求值。这就意味着只要message没有发生改变,多次访问计算属性vm.rever…

    Vue 2023年5月27日
    00
  • 原生javascript实现类似vue的数据绑定功能示例【观察者模式】

    原生 Javascript 实现类似 Vue 的数据绑定功能可以使用观察者模式来实现。 观察者模式简介 观察者模式(Observer Pattern)是一种行为设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象发生改变时,它会通知所有的观察者对象,使它们能够自动更新自己。 在 JavaScript 中,我们可以使用事件…

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