原生JS利用transform实现banner的无限滚动示例代码

让我来讲解一下如何利用原生JS实现banner的无限滚动。

基本思路

首先,我们需要获取到需要滚动的 banner 图片,将它们垂直排列起来,接着用 CSS 的 transform 将整个容器向上移动,直到第一张图片完全消失后,将它的下一张图片放到容器的底部,实现 banner 的无限滚动。

HTML 结构

<div class="banner">
  <div class="banner-wrap">
    <img src="./images/banner1.jpg" alt="banner1">
    <img src="./images/banner2.jpg" alt="banner2">
    <img src="./images/banner3.jpg" alt="banner3">
    <img src="./images/banner4.jpg" alt="banner4">
    <img src="./images/banner5.jpg" alt="banner5">
  </div>
</div>

CSS 样式

.banner {
  width: 100%;
  height: 600px;
  overflow: hidden;
}

.banner-wrap {
  width: 100%;
  height: 3000px;
  position: relative;
  transition: transform 1s;
}
.banner-wrap img {
  width: 100%;
}

JS 代码

// 获取元素
const banner = document.querySelector('.banner');
const bannerWrap = document.querySelector('.banner-wrap');
const bannerImgs = bannerWrap.querySelectorAll('img');

// 定义变量
const bannerHeight = banner.clientHeight; // banner图片宽度
let curIndex = 0; // 当前显示的图片编号

// 自动滚动
function move() {
  curIndex++;
  bannerWrap.style.transform = `translateY(-${bannerHeight * curIndex}px)`;

  // 当滚动到最后一张图片时,重置为第一张图片
  if (curIndex === bannerImgs.length - 1) {
    setTimeout(() => {
      curIndex = 0;
      bannerWrap.style.transform = `translateY(0)`;
    }, 1000);
  }
}

// 每3秒自动滚动图片
setInterval(move, 3000);

以上就是用原生 JS 实现 banner 无限滚动的代码和思路了。其中,通过 clientHeight 获取到了 banner 的高度,并用 setInterval 设置了滚动间隔。同时,通过 transition 属性实现了滚动时的平滑过渡。如果需要增加 banner 的数量,只需在 HTML 结构中增加图片,并修改变量 curIndex 的最大值即可。

示例说明一

如果您的 banner 都是水平排列的,只需将 translateY 改为 translateX 就可以实现横向无限滚动。

示例说明二

如果您需要增加滚动的速度,只需将 setInterval 函数中的 3000 改为更小的数字即可。但是需要注意的是,过快的滚动速度会导致用户体验不佳。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生JS利用transform实现banner的无限滚动示例代码 - Python技术站

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

相关文章

  • 不唐突的JavaScript的七条准则整理收集

    针对“不唐突的JavaScript的七条准则整理收集”的完整攻略,我将按照以下步骤进行讲解: 简介 准则一:使用模块化编程 准则二:避免使用全局变量 准则三:显式声明变量类型 准则四:封装重用的代码 准则五:使用 API 和库 准则六:舍弃 eval() 函数 准则七:使用立即执行函数表达式 示例说明 总结 1. 简介 该攻略旨在探讨如何写出不唐突的 Jav…

    JavaScript 2023年5月18日
    00
  • 使用requestAnimationFrame实现js动画性能好

    使用requestAnimationFrame实现js动画的优点是可以避免过多使用setTimeout或setInterval造成的页面卡顿、CPU过度占用等问题,从而保证动画的流畅度和性能。以下是具体操作步骤: 准备工作 首先需要在代码中声明一个全局变量 requestId 用于记录动画的请求ID。然后编写动画函数,此函数需要接收一个时间参数。 let r…

    JavaScript 2023年6月10日
    00
  • asp.net+js实现批量编码与解码的方法

    以下是“asp.net+js实现批量编码与解码的方法”的完整攻略。 一、背景 在一些网站开发中,可能会遇到需要对一些数据进行批量编码或者批量解码的需求。例如,对于一些包含特殊字符的字符串进行URL编码,或者将经过base64编码的数据进行解码等等。本篇攻略将介绍如何通过asp.net和javascript实现这些功能。 二、URL编码与解码 URL编码 在a…

    JavaScript 2023年5月19日
    00
  • 用js来生成随机彩票号码清单

    生成随机彩票号码清单是在web开发中常遇到的问题,下面按照以下步骤来演示生成彩票号码的完整攻略: 第一步:创建HTML骨架 首先需要在HTML页面中创建一个合适的骨架。可以考虑使用以下HTML代码: <!DOCTYPE html> <html lang="en"> <head> <meta cha…

    JavaScript 2023年6月11日
    00
  • js操作时间(年-月-日 时-分-秒 星期几)

    下面是JS操作时间的完整攻略。 获取当前时间 要获取当前时间,可以使用Date对象。该对象提供的方法可以获取当前时间的年、月、日、时、分、秒等信息。 const now = new Date(); console.log(now); // 输出当前时间的完整信息 const year = now.getFullYear(); // 获取当前年份 const …

    JavaScript 2023年5月27日
    00
  • 基于微信小程序实现人脸数量检测的开发步骤

    下面是详细讲解基于微信小程序实现人脸数量检测的开发步骤的完整攻略。 1. 确定需求和目标 首先需要明确开发的目标,即实现人脸数量检测功能的微信小程序。同时需要明确项目的需求和功能,这里我们需要实现对用户上传的照片进行人脸数量检测,并显示检测结果。为此,我们需要调用微信小程序的API和引入相关的开发工具。 2. 引入开发工具和API 微信小程序提供了一系列AP…

    JavaScript 2023年5月19日
    00
  • javascript的 {} 语句块详解

    让我来详细讲解一下“JavaScript 的 {} 语句块”吧。 什么是 {} 语句块? 在 JavaScript 中,使用 {} 创建一个语句块(statement block),也称代码块(code block)。大括号内可以包含多条语句,每条语句用分号(;)进行分隔。 示例代码: { var x = 1; var y = 2; console.log(…

    JavaScript 2023年5月18日
    00
  • javascript函数的4种调用方式与this的指向

    如下是关于“javascript函数的4种调用方式与this的指向”的完整攻略: 1. 函数调用 在javascript中,最基本的函数调用方式就是函数调用。当一个函数作为普通函数调用时,函数内的this指向全局对象window。例如: function sayHello() { console.log("Hello " + this.n…

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