JavaScript实现PC端横向轮播图

下面是JavaScript实现PC端横向轮播图的完整攻略:

准备工作

要实现PC端横向轮播图,需要先准备好以下几点:

  1. HTML结构,即容器元素及其子元素,通常是一个div包裹符合数量的图片(img标签)。
  2. CSS样式,如容器元素宽高、溢出隐藏、子元素浮动、统一宽高等。
  3. JS代码,用来实现轮播图的滑动效果,具体实现方式后面会讲到。

实现步骤

  1. 确认容器元素的宽度和容纳的图片个数,然后设置子元素的宽度为容器宽度的1/n(n为容纳的图片个数),并将子元素浮动,实现横向排列。
.container {
  width: 800px;
  height: 400px;
  overflow: hidden;
}
.slide {
  float: left;
  width: 200px;/* 假设容纳3张图片 */
  height: 400px;
}
  1. JS代码实现轮播图的滑动效果:
  2. 获取相关元素(容器元素、子元素、切换按钮等)。
const container = document.querySelector('.container');
const slider = document.querySelector('.slider');
const slides = document.querySelectorAll('.slider .slide');
const prevBtn = document.querySelector('.prev');
const nextBtn = document.querySelector('.next');
  • 根据轮播图性质,需要在最后一个子元素后面复制一个子元素,实现轮播效果。
slider.appendChild(slides[0].cloneNode(true));
  • 当前显示的图片序号为0,设置一个定时器,在一定时间间隔(如3秒)后自动滑动到下一张图片(即序号+1)。
const interval = 3000; // 时间间隔3秒
let currentSlide = 0; // 当前显示的图片序号

setInterval(() => {
  currentSlide++;
  slider.style.transform = `translateX(${-currentSlide * slides[0].offsetWidth}px)`;
}, interval);
  • 上一张和下一张图片按钮绑定事件,点击后分别切换到对应图片。
prevBtn.addEventListener('click', () => {
  currentSlide--;
  if (currentSlide < 0) {
    currentSlide = slides.length - 2;
    /* 当前为前面复制出来的最后一张图片 */
    slider.style.transition = 'none';
    slider.style.transform = `translateX(${-currentSlide * slides[0].offsetWidth}px)`;
    setTimeout(() => {
      slider.style.transition = 'all 0.3s ease-in-out';
    }, 1);
  }
  slider.style.transform = `translateX(${-currentSlide * slides[0].offsetWidth}px)`;
});

nextBtn.addEventListener('click', () => {
  currentSlide++;
  if (currentSlide > slides.length - 1) {
    currentSlide = 1;
    /* 当前为前面复制出来的第一张图片 */
    slider.style.transition = 'none';
    slider.style.transform = `translateX(${-currentSlide * slides[0].offsetWidth}px)`;
    setTimeout(() => {
      slider.style.transition = 'all 0.3s ease-in-out';
    }, 1);
  }
  slider.style.transform = `translateX(${-currentSlide * slides[0].offsetWidth}px)`;
});

示例说明

下面是两个简易的示例说明:

示例1

<div class="container">
  <div class="slider">
    <div class="slide"><img src="1.jpg" alt=""></div>
    <div class="slide"><img src="2.jpg" alt=""></div>
    <div class="slide"><img src="3.jpg" alt=""></div>
    <div class="slide"><img src="4.jpg" alt=""></div>
    <div class="slide"><img src="5.jpg" alt=""></div>
  </div>
</div>
<button class="prev">上一张</button>
<button class="next">下一张</button>
.container {
  width: 800px;
  height: 400px;
  overflow: hidden;
}
.slide {
  float: left;
  width: 200px;
  height: 400px;
}
const container = document.querySelector('.container');
const slider = document.querySelector('.slider');
const slides = document.querySelectorAll('.slider .slide');
const prevBtn = document.querySelector('.prev');
const nextBtn = document.querySelector('.next');

slider.appendChild(slides[0].cloneNode(true));

const interval = 3000;
let currentSlide = 0;

setInterval(() => {
  currentSlide++;
  slider.style.transform = `translateX(${-currentSlide * slides[0].offsetWidth}px)`;
}, interval);

prevBtn.addEventListener('click', () => {
  currentSlide--;
  if (currentSlide < 0) {
    currentSlide = slides.length - 2;
    slider.style.transition = 'none';
    slider.style.transform = `translateX(${-currentSlide * slides[0].offsetWidth}px)`;
    setTimeout(() => {
      slider.style.transition = 'all 0.3s ease-in-out';
    }, 1);
  }
  slider.style.transform = `translateX(${-currentSlide * slides[0].offsetWidth}px)`;
});

nextBtn.addEventListener('click', () => {
  currentSlide++;
  if (currentSlide > slides.length - 1) {
    currentSlide = 1;
    slider.style.transition = 'none';
    slider.style.transform = `translateX(${-currentSlide * slides[0].offsetWidth}px)`;
    setTimeout(() => {
      slider.style.transition = 'all 0.3s ease-in-out';
    }, 1);
  }
  slider.style.transform = `translateX(${-currentSlide * slides[0].offsetWidth}px)`;
});

示例2

<div class="container">
  <div class="slider">
    <div class="slide"><img src="1.jpg" alt=""></div>
    <div class="slide"><img src="2.jpg" alt=""></div>
    <div class="slide"><img src="3.jpg" alt=""></div>
    <div class="slide"><img src="4.jpg" alt=""></div>
    <div class="slide"><img src="5.jpg" alt=""></div>
  </div>
</div>
<button class="prev">上一张</button>
<button class="next">下一张</button>
.container {
  width: 500px;
  height: 300px;
  overflow: hidden;
}
.slide {
  float: left;
  width: 200px;
  height: 300px;
}
const container = document.querySelector('.container');
const slider = document.querySelector('.slider');
const slides = document.querySelectorAll('.slider .slide');
const prevBtn = document.querySelector('.prev');
const nextBtn = document.querySelector('.next');

slider.appendChild(slides[0].cloneNode(true));

const interval = 2000;
let currentSlide = 0;

setInterval(() => {
  currentSlide++;
  slider.style.transform = `translateX(${-currentSlide * slides[0].offsetWidth}px)`;
}, interval);

prevBtn.addEventListener('click', () => {
  currentSlide--;
  if (currentSlide < 0) {
    currentSlide = slides.length - 2;
    slider.style.transition = 'none';
    slider.style.transform = `translateX(${-currentSlide * slides[0].offsetWidth}px)`;
    setTimeout(() => {
      slider.style.transition = 'all 0.3s ease-in-out';
    }, 1);
  }
  slider.style.transform = `translateX(${-currentSlide * slides[0].offsetWidth}px)`;
});

nextBtn.addEventListener('click', () => {
  currentSlide++;
  if (currentSlide > slides.length - 1) {
    currentSlide = 1;
    slider.style.transition = 'none';
    slider.style.transform = `translateX(${-currentSlide * slides[0].offsetWidth}px)`;
    setTimeout(() => {
      slider.style.transition = 'all 0.3s ease-in-out';
    }, 1);
  }
  slider.style.transform = `translateX(${-currentSlide * slides[0].offsetWidth}px)`;
});

以上就是实现PC端横向轮播图的完整攻略,需要注意的就是CSS样式和JS代码的实现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript实现PC端横向轮播图 - Python技术站

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

相关文章

  • js prototype截取字符串函数

    下面是详细讲解“js prototype截取字符串函数”的攻略: 1.为什么要使用prototype扩展字符串截取函数 在JavaScript中,可以使用String.prototype.substr以及String.prototype.substring两个函数来截取字符串,它们的使用方式和效果基本一致。但是这两个函数有着一些缺陷: substr函数在截取…

    JavaScript 2023年5月28日
    00
  • JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现

    JavaScript高级程序设计 阅读笔记(十四)讲解了JavaScript中的继承机制以及其实现方式。下面是我总结的一个完整攻略: 继承机制的本质 JavaScript采用原型(prototype)继承机制。当访问一个对象的属性时,JavaScript引擎会首先查找该对象自身是否有这个属性。如果存在,则直接返回该属性值;如果不存在,则继续查找该对象的原型对…

    JavaScript 2023年5月27日
    00
  • PHP json格式和js json格式 js跨域调用实现代码

    下面是关于“PHP json格式和js json格式 js跨域调用实现代码”的攻略。 PHP与JSON格式 JSON格式介绍 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,主要用于前后端数据交互。JSON格式由键值对组成,数据之间用逗号分隔,键值对之间用冒号分隔。JSON格式支持数组和嵌套对象的格式,数据类型包括…

    JavaScript 2023年5月27日
    00
  • javascript判断元素存在和判断元素存在于实时的dom中的方法

    判断元素是否存在于DOM中是Javascript中经常遇到的一个问题,特别是在进行DOM操作和事件处理的时候。下面是两种常见的判断元素的方法: 一、使用document.querySelector() 通过使用document.querySelector()方法来查找元素,如果返回值不为null,那么表示找到了该元素,否则表示没有找到该元素。 var ele…

    JavaScript 2023年6月10日
    00
  • JavaScript高级程序设计 阅读笔记(十五) 浏览器中的JavaScript

    JavaScript高级程序设计 阅读笔记(十五) 浏览器中的JavaScript 什么是浏览器中的JavaScript? 浏览器中的JavaScript,简称浏览器端JavaScript,是指使用JavaScript编写的代码在客户端(即浏览器)中运行的过程。 在浏览器中,JavaScript 主要通过以下方式调用: 直接在HTML页面中嵌入JavaScr…

    JavaScript 2023年5月18日
    00
  • 纯js实现div内图片自适应大小(已测试,兼容火狐)

    下面是纯js实现div内图片自适应大小的完整攻略: 目录 实现思路 代码实现 示例一 示例二 实现思路 实现div内图片自适应大小,需要解决以下两个问题: 如何获取图片的宽度和高度? 如何在图片加载完成后将其按照正确的比例缩放到合适的大小? 因此,我们的实现思路是: 使用JS监听图片的load事件,在图片加载完成后获取其宽度和高度。 判断图片的宽高比例与容器…

    JavaScript 2023年6月11日
    00
  • js 格式化时间日期函数小结

    JS 格式化时间日期函数小结 在编写 web 应用程序或者其他应用程序时,日期和时间往往是非常重要的元素。而 JS 提供了许多内置的函数和方法来操作日期和时间,这里提供一些受欢迎的方法,同时会介绍如何使用它们来格式化日期和时间。 定义日期对象 在使用 JS 处理日期和时间时,通常使用内置的 Date 对象。我们可通过以下方式创建一个日期对象: const c…

    JavaScript 2023年5月27日
    00
  • 解读TypeScript与JavaScript的区别

    解读TypeScript与JavaScript的区别 什么是TypeScript? TypeScript 是一种由微软开发和维护的语言,它是JavaScript的超集,在JavaScript的语法基础上,增加了静态类型、接口、类、模块和命名空间等特性,并提供了更完善的工具和编辑器支持,可以让开发者更加高效地编写和调试代码。相比于 JavaScript,Typ…

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