JavaScript实现PC端横向轮播图

yizhihongxing

下面是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简单设置下拉选择框默认值的方法

    下面是JS简单设置下拉选择框默认值的方法的完整攻略。 确定下拉选择框的id 首先,需要确定下拉选择框的id属性值,以便在JavaScript中选择该元素对象。下拉选择框的id属性值一般通过HTML中的id属性指定。例如: <select id="color"> <option value="red"&…

    JavaScript 2023年6月11日
    00
  • 原生js 封装get ,post, delete 请求的实例

    下面是详细讲解“原生js 封装get ,post, delete 请求的实例”的完整攻略: 一、前置知识 在封装get, post, delete请求之前,我们需要对Http请求的基本知识有一定了解,比如HTTP请求方式、请求头、响应头、状态码等等。同时,我们也需要学习一些JavaScript中Promise对象的知识。 二、实现思路 通过封装get、pos…

    JavaScript 2023年6月11日
    00
  • JavaScript 创建对象

    下面是 JavaScript 创建对象的完整攻略: 1. 对象创建方式 JavaScript 有三种创建对象的方式: 1.1. Object 构造函数方式 使用 Object 构造函数创建对象时,需要通过 new 操作符创建一个对象实例。 let obj = new Object(); obj.name = ‘张三’; obj.age = 18; 1.2. …

    JavaScript 2023年5月27日
    00
  • 微信小程序路由跳转两种方式示例解析

    下面我将为你详细讲解“微信小程序路由跳转两种方式示例解析”的完整攻略。 一、前言 在微信小程序的开发中,跳转页面是非常常见的操作。本文将介绍微信小程序路由跳转的两种方式,分别是 wx.navigateTo 和 wx.redirectTo。 二、 wx.navigateTo wx.navigateTo 是保留当前页面,跳转到应用内的某个页面。该跳转方式支持返回…

    JavaScript 2023年6月11日
    00
  • JavaScript中的设计模式 单例模式

    JavaScript设计模式之单例模式 什么是单例模式 单例模式是一种常用的软件设计模式,用于保证系统中一个类只有一个实例,避免多个实例造成的资源浪费,同时也能够方便对该实例的控制和管理。 在JavaScript中,单例模式通常是通过对象字面量或者构造函数来实现的。 示例1:对象字面量实现单例模式 var Singleton = { obj: null, g…

    JavaScript 2023年6月10日
    00
  • Vue2.x响应式简单讲解及示例

    Vue2.x是一款流行的JavaScript框架,它提供了一套响应式方法,可以使我们的网页和数据变得更加动态化和实时化。以下是本文的完整攻略。 什么是响应式 在Vue中,响应式指的是将数据与UI绑定并保持同步的机制。当数据发生变化时,UI也会相应地更新。这种机制使得我们能够轻松地控制UI的变化,而无需担心数据处理。 Vue响应式的原理 Vue的响应式实现分为…

    JavaScript 2023年6月11日
    00
  • JS实现打字游戏

    JS实现打字游戏可以分为以下几个步骤: 界面设计:需要设计一个游戏界面,包含游戏主体、计分、倒计时等功能。可以使用HTML和CSS实现。 数据源准备:需要准备好游戏需要使用到的文本内容,可以通过数组存储。 代码实现:分为游戏初始化、键盘事件监听、计分等多个功能模块。 详细说明如下: 游戏初始化 游戏初始化需要以下两个步骤: 步骤1:获取游戏需要用到的DOM元…

    JavaScript 2023年5月28日
    00
  • element中的$confirm的使用

    当在Vue项目中使用Element UI组件库时,我们可以利用Element中提供的许多组件和方法,如对话框、表格、表单等。其中,$confirm方法是Element UI提供的一个强大的提示框组件,可以方便地实现弹出二次确认框,并在点击确认/取消按钮后返回用户选择的结果。下面是关于如何使用Element中的$confirm方法的详细攻略: 1. 引入Ele…

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