原生JS实现简单的无缝自动轮播效果

yizhihongxing

下面是“原生JS实现简单无缝自动轮播效果”的完整攻略。

确定HTML结构

在实现轮播效果之前,我们需要先确定HTML结构。一般来说,轮播图的容器是一个固定宽度的盒子,里面包含多张图片,我们可以使用ul和li标签来实现这个容器和图片的列表。

HTML结构可以如下所示:

<div class="slider">
  <ul>
    <li><img src="img1.jpg"></li>
    <li><img src="img2.jpg"></li>
    <li><img src="img3.jpg"></li>
    ...
  </ul>
</div>

CSS样式设置

接下来,我们需要为轮播图设置CSS样式。主要包括设置轮播图容器的宽度、高度、位置等属性,以及为图片设置宽度、高度、排列方式等属性。

.slider {
  position: relative;
  width: 600px;
  height: 400px;
  overflow: hidden;
}
.slider ul {
  position: absolute;
  left: 0;
  top: 0;
  width: 6000px;
}
.slider li {
  float: left;
  width: 600px;
  height: 400px;
}
.slider img {
  width: 100%;
  height: 100%;
}

JS实现无缝轮播

接下来,我们就可以使用原生JS来实现轮播效果了。具体实现步骤可以分为三步:获取元素、设置定时器、计算位置。

获取元素

首先,我们需要获取轮播图容器、图片列表和图片数量。

var slider = document.querySelector('.slider');
var sliderList = slider.querySelector('ul');
var sliderItems = sliderList.querySelectorAll('li');
var sliderItemWidth = sliderItems[0].offsetWidth;
var sliderLength = sliderItems.length;

设置定时器

然后,我们需要设置一个定时器,每隔一段时间就自动切换到下一张图片。当切换到最后一张图片时,需要将图片列表的left值设置为0,从而实现无缝轮播。

var currentSliderItem = 0;
var timer = setInterval(function() {
  var nextSliderItem = currentSliderItem + 1;
  if (nextSliderItem === sliderLength) {
    sliderList.style.left = 0;
    currentSliderItem = 0;
    nextSliderItem = 1;
  }
  var sliderOffsetLeft = -(nextSliderItem * sliderItemWidth);
  sliderList.style.left = sliderOffsetLeft + 'px';
  currentSliderItem++;
}, 3000);

计算位置

最后,我们需要计算当前要切换到的图片的位置,将列表容器的left值设置为相应的负值即可实现图片的切换。

var nextSliderItem = currentSliderItem + 1;
if (nextSliderItem === sliderLength) {
  sliderList.style.left = 0;
  currentSliderItem = 0;
  nextSliderItem = 1;
}
var sliderOffsetLeft = -(nextSliderItem * sliderItemWidth);
sliderList.style.left = sliderOffsetLeft + 'px';
currentSliderItem++;

示例说明

下面,我们以两个示例说明如何使用原生JS来实现简单的无缝轮播效果。

示例1:

<div class="slider">
  <ul>
    <li><img src="img1.jpg"></li>
    <li><img src="img2.jpg"></li>
    <li><img src="img3.jpg"></li>
    <li><img src="img4.jpg"></li>
    <li><img src="img5.jpg"></li>
  </ul>
</div>
.slider {
  position: relative;
  width: 400px;
  height: 300px;
  overflow: hidden;
}
.slider ul {
  position: absolute;
  left: 0;
  top: 0;
  width: 2000px;
}
.slider li {
  float: left;
  width: 400px;
  height: 300px;
}
.slider img {
  width: 100%;
  height: 100%;
}
var slider = document.querySelector('.slider');
var sliderList = slider.querySelector('ul');
var sliderItems = sliderList.querySelectorAll('li');
var sliderItemWidth = sliderItems[0].offsetWidth;
var sliderLength = sliderItems.length;

var currentSliderItem = 0;
var timer = setInterval(function() {
  var nextSliderItem = currentSliderItem + 1;
  if (nextSliderItem === sliderLength) {
    sliderList.style.left = 0;
    currentSliderItem = 0;
    nextSliderItem = 1;
  }
  var sliderOffsetLeft = -(nextSliderItem * sliderItemWidth);
  sliderList.style.left = sliderOffsetLeft + 'px';
  currentSliderItem++;
}, 3000);

示例2:

<div class="slider">
  <ul>
    <li><img src="img1.jpg"></li>
    <li><img src="img2.jpg"></li>
    <li><img src="img3.jpg"></li>
  </ul>
</div>
.slider {
  position: relative;
  width: 600px;
  height: 400px;
  overflow: hidden;
}
.slider ul {
  position: absolute;
  left: 0;
  top: 0;
  width: 1800px;
}
.slider li {
  float: left;
  width: 600px;
  height: 400px;
}
.slider img {
  width: 100%;
  height: 100%;
}
var slider = document.querySelector('.slider');
var sliderList = slider.querySelector('ul');
var sliderItems = sliderList.querySelectorAll('li');
var sliderItemWidth = sliderItems[0].offsetWidth;
var sliderLength = sliderItems.length;

var currentSliderItem = 0;
var timer = setInterval(function() {
  var nextSliderItem = currentSliderItem + 1;
  if (nextSliderItem === sliderLength) {
    sliderList.style.left = 0;
    currentSliderItem = 0;
    nextSliderItem = 1;
  }
  var sliderOffsetLeft = -(nextSliderItem * sliderItemWidth);
  sliderList.style.left = sliderOffsetLeft + 'px';
  currentSliderItem++;
}, 3000);

以上就是“原生JS实现简单无缝自动轮播效果”的完整攻略,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生JS实现简单的无缝自动轮播效果 - Python技术站

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

相关文章

  • 惰性函数定义模式 使用方法

    惰性函数定义模式指的是,函数在执行时并不会立即返回结果,而是通过一些技巧延迟了函数的执行,让函数具有了更高的灵活性和重复使用性。 下面是使用惰性函数定义模式的方法: 1. 简单的惰性函数定义模式 function addEvent(elem, type, handler) { if (elem.addEventListener) { elem.addEven…

    JavaScript 2023年6月11日
    00
  • gridview 行选添加颜色和事件

    下面是详细讲解“gridview 行选添加颜色和事件”的攻略: 1. 前置条件 在使用 GridView 行选添加颜色和事件之前确认以下条件: GridView 控件应该已经被正确地绑定到数据源。 GridView 控件应该已经在页面中被正确地声明,并且属性设置正确。 2. 行选添加颜色 要为 GridView 控件的行添加颜色,可以通过以下方式实现: 2.…

    JavaScript 2023年6月10日
    00
  • 现代 javscript 编程 资料第2/6页

    我们来详细解析“现代JavaScript编程资料第2/6页”的完整攻略吧。 背景介绍 这份资料是介绍现代 JavaScript 编程的,旨在帮助初学者快速入门并熟练掌握现代 JavaScript 的相关技术和特性。 攻略步骤 以下是学习该资料的详细攻略步骤: 1. 熟悉资料结构 该资料的第2/6页主要介绍了以下内容: ES6 模块化 Promises 迭代器…

    JavaScript 2023年6月10日
    00
  • jQuery使用cookie与json简单实现购物车功能

    下面是详细讲解“jQuery使用cookie与json简单实现购物车功能”的完整攻略: 简介 购物车是电商网站必不可少的功能,通过购物车,用户可以将自己关心的商品加入到购物车中,然后在统一的界面进行管理、筛选、结算等操作。本攻略将讲解如何使用 jQuery、JSON、Cookie 等技术实现购物车功能。 步骤讲解 步骤1:购物车结构设计 首先,我们需要考虑购…

    JavaScript 2023年5月27日
    00
  • JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)

    判断浏览器是否为IE浏览器的方法有很多种,包括通过检测UserAgent(用户代理字符串)、检测浏览器特性、检测IE浏览器独有的属性等方式。以下是一些方法的示例说明。 方法一:检测UserAgent中是否包含”MSIE”或”Trident” function isIE() { const ua = window.navigator.userAgent; co…

    JavaScript 2023年6月10日
    00
  • 服务端预渲染之Nuxt(使用篇)

    服务端预渲染(Server-Side Rendering,SSR)是一种Web应用程序的开发方法,它将初始HTML和渲染的JavaScript发送给客户端,而不是在客户端浏览器中使用JavaScript再进行处理和渲染。 Nuxt.js是一个基于Vue.js的应用框架,它专注于提供一个开箱即用的服务器渲染体验。Nuxt.js 可以帮助我们快速开发、部署 Vu…

    JavaScript 2023年6月11日
    00
  • JavaScript面向对象的程序设计(犯迷糊的小羊)

    好的。首先,JavaScript是一门基于对象的编程语言。它提供了许多面向对象编程的特性,如对象、类、继承等。如果您曾经在其他编程语言中使用过面向对象编程,那么理解JavaScript的面向对象编程会相对轻松些。 一、对象 面向对象编程的基础是对象。JavaScript中的对象是一个键-值对的集合,其中值可以是属性或方法。对象可以通过字面量或构造函数创建。 …

    JavaScript 2023年5月27日
    00
  • ionic进入多级目录后隐藏底部导航栏(tabs)的完美解决方案

    下面是针对“ionic进入多级目录后隐藏底部导航栏(tabs)的完美解决方案”的完整攻略。 问题描述 在使用Ionic开发应用时,当进入多级目录时,底部导航栏(tabs)会一直显示,而不是随着路由进行相应的隐藏和显示。这样会让应用看起来不太美观,也会影响用户体验。 解决方案 要解决这个问题,我们可以通过Ionic官方提供的ion-router-outlet组…

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