原生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-loader教程介绍

    Vue-loader教程介绍 Vue-loader是Vue.js的官方loader,通过webpack将.vue文件转换成Javascript模块的形式。Vue-loader使你可以用单文件组件的方式书写Vue组件,这大大简化了组件的开发和维护。 安装 可以使用npm来安装vue-loader: npm install -D vue-loader vue-t…

    Vue 2023年5月28日
    00
  • Vue配置文件vue.config.js配置前端代理方式

    当我们在开发Vue项目时,有时候需要通过前端代理方式来解决跨域的问题。在Vue项目中实现前端代理的方式有很多种,本文将详细介绍如何通过配置Vue的配置文件vue.config.js实现前端代理方式。 vue.config.js文件 vue.config.js是一个可选的配置文件,如果项目的根目录中存在该文件,则该文件会被@vue/cli-service自动加…

    Vue 2023年5月28日
    00
  • mpvue写一个CPASS小程序的示例

    下面是mpvue写一个CPASS小程序的详细攻略,包含两条示例说明: 一、先决条件 在正式开始编写小程序之前,需要安装好cpass-cli和mpvue框架,并且具有mpvue开发的基础知识。 二、创建项目及配置 2.1 创建项目 使用cpass-cli创建一个mpvue工程: cpass create demo –template mpvue 2.2 配置…

    Vue 2023年5月27日
    00
  • 详解实现vue的数据响应式原理

    下面将详细讲解实现Vue数据响应式原理的完整攻略。内容将按照以下顺序展开: 理解Vue数据响应式原理的基本概念和实现原理 实现一个简单的数据响应式库 使用示例对实现过程进行说明 1. Vue数据响应式原理的基本概念和实现原理 Vue的数据响应式原理是指,当一个Vue组件的数据发生变化时,视图会自动重新渲染。这种自动重新渲染的机制是Vue框架提供的,在我们使用…

    Vue 2023年5月29日
    00
  • Vue请求JSON Server服务器数据的实现方法

    当你使用Vue来开发Web应用时,你需要获取外部数据并在网页应用中展示这些数据。JSON Server是一个快速的、简单的node.js库,可以模拟RESTful APIs,生成假数据,并对数据进行增删改查操作。下面是在Vue中如何实现JSON Server服务器数据请求。 1. 安装JSON Server 首先,你需要安装JSON Server。在命令行中…

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

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

    Vue 2023年5月28日
    00
  • vue-cli 介绍与安装

    Vue-cli 介绍与安装 什么是 Vue-cli? Vue-cli 是 Vue.js 官方提供的一个脚手架工具,可以帮助我们快速的搭建 Vue 项目开发所需要的基础环境。 安装Vue-cli 安装 Vue-cli 要求 Node.js 的版本在 8.9 或更高,NPM 版本在 5.5 或更高。 全局安装 开启终端并输入以下命令即可进行全局安装: npm i…

    Vue 2023年5月28日
    00
  • 解决Vue前后端跨域问题的方式汇总

    解决Vue前后端跨域问题的方式汇总 什么是跨域? 简单来说,跨域就是从一个域名的网页去请求另一个域名的资源,就会产生跨域问题。 例如:当前前端页面的域名是 http://domain-a.com,试图向 http://api.domain-b.com 发送Ajax请求,就会产生跨域问题。 常见跨域问题解决方案 1. 代理 通过后台自建一个代理服务器来转发请求…

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