原生js实现简单轮播图

yizhihongxing

下面是原生JS实现简单轮播图的完整攻略。

1. 准备工作

在HTML文件中,需要定义一个容器作为轮播图的父元素,同时在其中添加轮播图片的子元素。例如,在以下代码中,容器的ID为slider,共有3张轮播图片。

<div id="slider">
  <img src="1.jpg" alt="image1">
  <img src="2.jpg" alt="image2">
  <img src="3.jpg" alt="image3">
</div>

2. 实现轮播图

为了实现轮播功能,我们需要控制图片在父元素内部的位置,即控制轮播容器的left值,在此基础上实现自动轮播和手动轮播两种模式。

2.1 控制容器位置

通过CSS属性position: relative将容器定义为相对定位的元素,该元素的子元素可以使用position: absolute实现相对该元素的定位。

#slider {
  position: relative;
  width: 100%;
  overflow: hidden;
}
#slider > img {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: auto;
  opacity: 0;
}

为了实现图片的切换效果,我们使用opacity属性控制当前图片的透明度,使其渐隐渐现。其中,opacity的值为0时表示该元素完全透明,值为1时表示元素不透明。

2.2 自动轮播

为了实现轮播图的自动播放,我们需要设置一个定时器,在每隔一段时间后将容器位置向左移动一张图片的距离。

var slider = document.getElementById('slider');
var images = slider.getElementsByTagName('img');
var current = 0;

function autoPlay() {
  images[current].style.opacity = 0;
  current = (current + 1) % images.length;
  images[current].style.opacity = 1;
  slider.style.left = '-' + current + '00%';
}

setInterval(autoPlay, 2000);

在上述代码中,我们定义current变量表示当前显示的图片序号,依次将其与images数组中的元素作比较,实现图片的透明度控制并将容器位置向左移动。当current的值到达图片数量的最大值时,需要对其进行取模,保证实现循环轮播的效果。

2.3 手动轮播

为了实现轮播图的手动播放,我们需要监听容器的左右滑动事件,与自动播放相似,将容器位置向左或向右移动一张图片的距离,以实现手动切换图片的效果。

var startX, endX;
slider.addEventListener('touchstart', function(event) {
  startX = event.touches[0].clientX;
});
slider.addEventListener('touchmove', function(event) {
  endX = event.touches[0].clientX;
  event.preventDefault();
});
slider.addEventListener('touchend', function(event) {
  if (endX - startX > 50) {
    images[current].style.opacity = 0;
    current = (current - 1 + images.length) % images.length;
    images[current].style.opacity = 1;
    slider.style.left = '-' + current + '00%';
  } else if (startX - endX > 50) {
    images[current].style.opacity = 0;
    current = (current + 1) % images.length;
    images[current].style.opacity = 1;
    slider.style.left = '-' + current + '00%';
  }
});

在上述代码中,我们定义了startXendX两个变量,分别记录手指接触和移动的位置。当手指完成滑动时,根据startXendX的差值判断轮播方向,如大于50像素则向右移动,小于-50像素则向左移动。

3. 示例说明

3.1 示例一

以下是一个基本的轮播图示例,该示例实现了基础的自动轮播功能。

<div id="slider">
  <img src="1.jpg" alt="image1">
  <img src="2.jpg" alt="image2">
  <img src="3.jpg" alt="image3">
</div>
<script>
var slider = document.getElementById('slider');
var images = slider.getElementsByTagName('img');
var current = 0;

function autoPlay() {
  images[current].style.opacity = 0;
  current = (current + 1) % images.length;
  images[current].style.opacity = 1;
  slider.style.left = '-' + current + '00%';
}

setInterval(autoPlay, 2000);
</script>

3.2 示例二

以下是一个带有手动轮播功能的轮播图示例,该示例实现了基础的自动轮播功能和手动轮播功能。

<div id="slider">
  <img src="1.jpg" alt="image1">
  <img src="2.jpg" alt="image2">
  <img src="3.jpg" alt="image3">
</div>
<script>
var slider = document.getElementById('slider');
var images = slider.getElementsByTagName('img');
var current = 0;
var startX, endX;
slider.addEventListener('touchstart', function(event) {
  startX = event.touches[0].clientX;
});
slider.addEventListener('touchmove', function(event) {
  endX = event.touches[0].clientX;
  event.preventDefault();
});
slider.addEventListener('touchend', function(event) {
  if (endX - startX > 50) {
    images[current].style.opacity = 0;
    current = (current - 1 + images.length) % images.length;
    images[current].style.opacity = 1;
    slider.style.left = '-' + current + '00%';
  } else if (startX - endX > 50) {
    images[current].style.opacity = 0;
    current = (current + 1) % images.length;
    images[current].style.opacity = 1;
    slider.style.left = '-' + current + '00%';
  }
});

function autoPlay() {
  images[current].style.opacity = 0;
  current = (current + 1) % images.length;
  images[current].style.opacity = 1;
  slider.style.left = '-' + current + '00%';
}

setInterval(autoPlay, 2000);
</script>

以上就是原生JS实现简单轮播图的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生js实现简单轮播图 - Python技术站

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

相关文章

  • 微信小程序简洁登录页面的实现(附源码)

    我来为你详细讲解 “微信小程序简洁登录页面的实现(附源码)” 的攻略。本攻略主要包含以下内容: 准备工作 制作登录页面 利用Storage缓存登录状态 一、准备工作 首先我们需要准备好微信小程序的开发环境,包括微信开发者工具和小程序应用ID等。在这里我就不再详细介绍了。 二、制作登录页面 我们首先要制作一个简洁的登录页面。在这里,我提供一个示例代码,供你参考…

    css 2023年6月10日
    00
  • 浅谈vue中慎用style的scoped属性

    在Vue框架中,使用style标签的时候,可以使用scoped属性,这个属性的作用是控制所写样式只作用于当前组件内部,不会污染其他组件的样式,防止样式冲突。但是在使用scoped属性时,有些细节需要注意。 不慎用scoped属性带来的问题 在使用scoped属性时,需要注意,这个属性只能控制当前组件内样式与其他组件的样式之间的影响,但是对于子组件中的样式或全…

    css 2023年6月10日
    00
  • vue中checkbox如何修改为圆形样式

    对于”vue中checkbox如何修改为圆形样式”的问题,我们可以通过以下步骤进行修改: 引入正确的css文件 应该引入一个能够提供样式的css库或文件,并且这个文件中应该提供了相应的checkbox圆形样式。比较常用的库包括Bootstrap、Tailwind CSS、Bulma等,可以根据自己的需求选择其中一个,然后在Vue组件中进行引入。 示例1:使用…

    css 2023年6月11日
    00
  • ahooks useInfiniteScroll源码解析

    就ahooks库中的useInfiniteScroll钩子进行源码分析的过程,我总结了以下完整攻略: 理解useInfiniteScroll的作用 useInfiniteScroll是ahooks库中提供的一个自定义Hooks,可以帮助前端程序员快速实现无限滚动的效果。当用户滚动到页面底部时,自动加载更多数据,从而避免了手动分页加载的繁琐操作。 步骤一:从G…

    css 2023年6月10日
    00
  • DreamWeaver操作技巧大全(16条技能)

    首先是该攻略的完整攻略: DreamWeaver操作技巧大全(16条技能) 前言 DreamWeaver是一款常用于Web开发的集成开发环境。了解并掌握DreamWeaver的操作技巧,可以提高开发效率。本文总结了16条DreamWeaver操作技巧,供开发者参考。 目录 关闭代码自动补全和高亮 调试JavaScript代码 设置代码折叠 代码行间距隙调整 …

    css 2023年6月9日
    00
  • uniapp开发小程序的经验总结

    uni-app开发小程序的经验总结 1. uni-app简介 uni-app 是一个基于 Vue.js 开发跨平台应用的前端框架,支持多端开发(微信小程序、H5、App、支付宝、百度、头条等),无需重复编写代码即可同时发布到各个平台。 2. uni-app开发小程序的经验总结 (1)组件 uni-app里预设了许多组件,使用起来非常方便,如按钮、图标、消息提…

    css 2023年6月10日
    00
  • 玩转jQuery按钮 请告诉我你最喜欢哪些?

    玩转jQuery按钮 当我们开发网站或者应用的时候,按钮是经常使用的UI元素,有时候一个好看而又有趣的按钮能够让用户印象深刻。而使用jQuery可以让我们在按钮方面更加灵活地运用。 常见的jQuery按钮 在jQuery中,有一些常见的按钮样式和功能,包括按钮的hover、active效果、按钮的禁用、表单提交等。 悬停按钮 悬停按钮是一种常见的UI元素,可…

    css 2023年6月10日
    00
  • 一波CSS制作的三角形和圆形小按钮示例

    下面是对“一波CSS制作的三角形和圆形小按钮示例”的完整攻略。 总述 在本次攻略中,我们将学习使用 CSS3 制作三角形和圆形小按钮,以及通过应用伪元素来实现以上效果。我们将讨论两个示例: 通过使用纯 CSS3 制作三角形样式的小按钮 通过使用伪元素制作圆形样式的小按钮 在这两个示例中,我们使用了简单的 HTML 标记结构、CSS3 样式属性和伪元素选择器,…

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