原生javascript实现图片轮播效果代码

下面是完整的攻略:

前置知识

在阅读本攻略前,你需要掌握基本的 HTML 和 CSS 技能,还要熟练掌握 JavaScript 中的 DOM 操作,了解一些简单的 jQuery 使用方法。

实现步骤

第一步:HTML 结构

首先,在页面中准备好需要轮播的图片和圆点标识的 HTML 结构,并设置好对应的 CSS 样式。

以下是一个简单的示例:

<div class="slider-container">
  <div class="slider-wrapper">
    <img src="images/1.jpg" alt="Slide 1" />
    <img src="images/2.jpg" alt="Slide 2" />
    <img src="images/3.jpg" alt="Slide 3" />
  </div>
  <div class="slider-dots">
    <span class="dot"></span>
    <span class="dot"></span>
    <span class="dot"></span>
  </div>
</div>
.slider-container {
  position: relative;
  width: 100%;
  height: 400px;
  overflow: hidden;
}

.slider-wrapper {
  display: flex;
  width: 300%;
  height: 100%;
  position: absolute;
  transition: transform 0.5s ease-in-out;
}

.slider-wrapper img {
  width: 33.33%;
  height: 100%;
}

.slider-dots {
  position: absolute;
  bottom: 20px;
  left: 50%;
  transform: translateX(-50%);
}

.dot {
  display: inline-block;
  margin: 0 5px;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background-color: #ccc;
  cursor: pointer;
}

.active {
  background-color: #f00;
}

第二步:JavaScript 实现轮播

接下来,使用原生 JavaScript 实现轮播效果。以下是基本思路:

  1. 获取需要的 DOM 元素。
  2. 定义一个变量 slideIndex 来记录当前轮播的图片索引。
  3. 定义一个定时器,每隔一定时间自动轮播。
  4. 实现点击圆点标识来切换轮播的图片。
  5. 判断当前是否是最后一张图片,如果是则返回第一张图片。

最终的 JavaScript 代码如下:

// 获取元素
const container = document.querySelector('.slider-container');
const wrapper = document.querySelector('.slider-wrapper');
const dots = document.querySelectorAll('.dot');

// 初始化变量
let slideIndex = 1;
const slideWidth = container.offsetWidth;

// 自动轮播
setInterval(() => {
  slideIndex++;
  if (slideIndex > dots.length) {
    slideIndex = 1;
  }
  moveSlides();
}, 3000);

// 圆点标识点击事件
dots.forEach((dot, index) => {
  dot.addEventListener('click', () => {
    slideIndex = index + 1;
    moveSlides();
  });
});

// 移动轮播图
function moveSlides() {
  wrapper.style.transform = `translateX(-${slideWidth * (slideIndex - 1)}px)`;
  dots.forEach((dot) => {
    dot.classList.remove('active');
  });
  dots[slideIndex - 1].classList.add('active');
}

第三步:实现动态添加轮播图片

最后,我们还可以实现动态添加轮播图片的功能。以下是步骤:

  1. 定义一个数组存储图片路径。
  2. 使用 createElement 方法动态创建图片元素,并使用 appendChild 方法添加到轮播图片容器中。
  3. 更新轮播图片的数量和圆点标识数量。
  4. 更新圆点标识的点击事件。

以下是示例代码:

// 图片路径
const slides = [
  'images/1.jpg',
  'images/2.jpg',
  'images/3.jpg',
  'images/4.jpg',
  'images/5.jpg',
];

// 动态添加图片
slides.forEach((slide) => {
  const img = document.createElement('img');
  img.src = slide;
  img.alt = 'Slide';
  wrapper.appendChild(img);
});

// 更新变量和圆点标识数量
const dotsContainer = document.querySelector('.slider-dots');
const dotsHTML = [...dotsContainer.innerHTML];
for (let i = 0; i < slides.length; i++) {
  const dot = document.createElement('span');
  dot.classList.add('dot');
  dotsContainer.appendChild(dot);
}

// 更新事件
const dots = document.querySelectorAll('.dot');
dots.forEach((dot, index) => {
  dot.addEventListener('click', () => {
    slideIndex = index + 1;
    moveSlides();
  });
});

至此,就完成了原生 JavaScript 实现图片轮播效果代码的攻略。

示例说明

示例一: 实现轮播缩略图

以下是一个有轮播缩略图的完整代码示例:

<div class="slider-container">
  <div class="slider-main">
    <div class="slider-wrapper">
      <img src="images/1.jpg" alt="Slide 1" />
      <img src="images/2.jpg" alt="Slide 2" />
      <img src="images/3.jpg" alt="Slide 3" />
      <img src="images/4.jpg" alt="Slide 4" />
      <img src="images/5.jpg" alt="Slide 5" />
    </div>
    <div class="slider-nav">
      <div class="nav-wrapper">
        <div class="nav-item">
          <img src="images/1.jpg" alt="Slide 1" />
        </div>
        <div class="nav-item">
          <img src="images/2.jpg" alt="Slide 2" />
        </div>
        <div class="nav-item">
          <img src="images/3.jpg" alt="Slide 3" />
        </div>
        <div class="nav-item">
          <img src="images/4.jpg" alt="Slide 4" />
        </div>
        <div class="nav-item">
          <img src="images/5.jpg" alt="Slide 5" />
        </div>
      </div>
    </div>
  </div>
</div>
.slider-container {
  position: relative;
  width: 100%;
  height: 500px;
  overflow: hidden;
}

.slider-main {
  position: relative;
  width: 100%;
  height: 100%;
}

.slider-wrapper {
  display: flex;
  width: 500%;
  height: 100%;
  position: absolute;
  transition: transform 0.5s ease-in-out;
}

.slider-wrapper img {
  width: 20%;
  height: 100%;
}

.slider-nav {
  position: absolute;
  bottom: 10%;
  width: 100%;
}

.nav-wrapper {
  display: flex;
}

.nav-item {
  margin-right: 10px;
  cursor: pointer;
}

.nav-item img {
  width: 50px;
  height: 50px;
}

.active {
  border: 2px solid #f00;
}
// 获取元素
const container = document.querySelector('.slider-container');
const main = document.querySelector('.slider-main');
const wrapper = document.querySelector('.slider-wrapper');
const navItems = document.querySelectorAll('.nav-item');

// 初始化变量
let slideIndex = 1;
const slideWidth = container.offsetWidth;

// 自动轮播
setInterval(() => {
  slideIndex++;
  if (slideIndex > navItems.length) {
    slideIndex = 1;
  }
  moveSlides();
}, 3000);

// 缩略图点击事件
navItems.forEach((navItem, index) => {
  navItem.addEventListener('click', () => {
    slideIndex = index + 1;
    moveSlides();
  });
});

// 移动轮播图
function moveSlides() {
  wrapper.style.transform = `translateX(-${slideWidth * (slideIndex - 1)}px)`;
  navItems.forEach((navItem) => {
    navItem.classList.remove('active');
  });
  navItems[slideIndex - 1].classList.add('active');
}

示例二: 实现响应式图片轮播

以下是一个响应式图片轮播的完整代码示例:

<div class="slider-container">
  <div class="slider-wrapper">
    <img src="images/1.jpg" alt="Slide 1" />
    <img src="images/2.jpg" alt="Slide 2" />
    <img src="images/3.jpg" alt="Slide 3" />
    <img src="images/4.jpg" alt="Slide 4" />
    <img src="images/5.jpg" alt="Slide 5" />
  </div>
  <div class="slider-buttons">
    <button class="slider-prev">Prev</button>
    <button class="slider-next">Next</button>
  </div>
</div>
.slider-container {
  position: relative;
  width: 100%;
  height: 100%;
  overflow: hidden;
}

.slider-wrapper {
  display: flex;
  width: 500%;
  height: 100%;
  position: absolute;
  transition: transform 0.5s ease-in-out;
}

.slider-wrapper img {
  width: calc(100% / 5);
  height: 100%;
  object-fit: cover;
}

.slider-buttons {
  position: absolute;
  top: 50%;
  left: 10px;
  transform: translateY(-50%);
}

.slider-prev,
.slider-next {
  padding: 10px;
  background-color: #f00;
  color: #fff;
  border: none;
  cursor: pointer;
}

.slider-prev {
  margin-right: 10px;
}
// 获取元素
const container = document.querySelector('.slider-container');
const wrapper = document.querySelector('.slider-wrapper');
const prev = document.querySelector('.slider-prev');
const next = document.querySelector('.slider-next');

// 初始化变量
let slideIndex = 1;
const slideWidth = container.offsetWidth;

// 自动轮播
setInterval(() => {
  slideIndex++;
  if (slideIndex > wrapper.children.length) {
    slideIndex = 1;
  }
  moveSlides();
}, 3000);

// 点击事件
prev.addEventListener('click', () => {
  slideIndex--;
  if (slideIndex < 1) {
    slideIndex = wrapper.children.length;
  }
  moveSlides();
});

next.addEventListener('click', () => {
  slideIndex++;
  if (slideIndex > wrapper.children.length) {
    slideIndex = 1;
  }
  moveSlides();
});

// 移动轮播图
function moveSlides() {
  wrapper.style.transform = `translateX(-${slideWidth * (slideIndex - 1)}px)`;
}

以上两个示例分别实现了轮播缩略图和响应式图片轮播,希望对你有帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生javascript实现图片轮播效果代码 - Python技术站

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

相关文章

  • css textarea 高度自适应,无滚动条

    要实现CSS textarea的高度自适应且无滚动条,需要结合CSS的resize属性和JavaScript的代码实现。 1. 使用CSS的resize属性 CSS有一个resize属性,它可以定义元素是否可以被用户缩放,同时也能控制textarea的高度是否可以自适应。我们可以将resize属性应用到textarea元素上,并设置为vertical(垂直方…

    css 2023年6月10日
    00
  • Bootstrap栅格系统的使用详解

    下面我来为您介绍一篇关于Bootstrap栅格系统使用的详细攻略。 1. 什么是Bootstrap栅格系统 Bootstrap 栅格系统是一个响应式、移动设备优先的流式格系统,它用于页面布局,具有以下特性: 支持多种设备(如手机、平板、桌面电脑); 网格布局(12个网格列,通过媒体查询实现不同的排版); 预定义好了多种布局类型(如:嵌套、等宽、偏移、反向布局…

    css 2023年6月10日
    00
  • 一个通俗小故事告诉你溢出隐藏(overflow:hidden)失效的原因

    我来为您详细讲解“一个通俗小故事告诉你溢出隐藏(overflow:hidden)失效的原因”: 什么是溢出隐藏(overflow:hidden)? 在CSS样式中,溢出隐藏(overflow:hidden)通常是用来控制某个元素的内容超出部分是否可见的一种方式。当元素的内容超出了其容器的范围时,溢出隐藏可以将超出部分隐藏起来,以保证网页整体的美观和可用性。 …

    css 2023年6月10日
    00
  • 小程序从零入手之WXSS模版语法汇总

    小程序从零入手之WXSS模版语法汇总 什么是WXSS? WXSS(WeiXin Style Sheets)是小程序的样式语言,类似于 HTML 的 CSS。 WXSS 直接基于 CSS 标准,可以使用大部分 CSS 的特性,同时为了更适合于小程序的开发进行了修改和补充。例如: 在小程序中,可以直接使用尺寸单位 rpx,可以根据屏幕宽度自适应。 可以使用数据绑…

    css 2023年6月10日
    00
  • 发挥火狐浏览器的广告拦截威力(图文教程)

    发挥火狐浏览器的广告拦截威力(图文教程) 广告拦截器是现代浏览器中常见的功能,能够帮助用户过滤广告和恶意网站,提高网页浏览的速度和安全性。本文将针对使用火狐浏览器的用户,介绍如何发挥火狐浏览器的广告拦截威力。 步骤一:启用火狐浏览器的广告拦截器功能 打开火狐浏览器,点击右上角的菜单按钮(三个横线)。 在下拉菜单中选择“选项(Options)”。 在弹出的“选…

    css 2023年6月11日
    00
  • 使用纯 CSS 实现滚动阴影效果

    下面是“使用纯 CSS 实现滚动阴影效果”的完整攻略: 前言 在如今互联网时代,网页设计已成为一项非常重要的艺术,而在网页设计中,阴影效果是一类经常被使用到的效果,而滚动阴影效果则更加符合时下互联网风格,本文将教你如何使用纯 CSS 实现滚动阴影效果。 实现思路 通过 CSS3 中的 box-shadow 属性,结合滚动条的滚动事件,设置元素阴影的位置和大小…

    css 2023年6月13日
    00
  • 什么是SEO SEO新手快速入门技巧

    下面我来为你详细讲解“什么是SEO SEO新手快速入门技巧”的完整攻略。 什么是SEO? SEO是Search Engine Optimization的缩写,即搜索引擎优化。SEO的目的是提高网站在搜索引擎中的排名,从而吸引更多的访问者。通俗来说,通过一系列的技术手段,让搜索引擎更好地识别你的网站,从而提高搜索排名。 SEO新手快速入门技巧 1. 关键词研究…

    css 2023年6月10日
    00
  • React使用emotion写css代码

    当我们使用React来构建Web应用程序时,通常使用CSS来美化和布局页面。而使用emotion可以帮助我们更轻松地编写和管理CSS,并将样式与组件紧密耦合。下面我将为你提供完整的React使用emotion写CSS代码的攻略。 安装emotion 首先,我们需要使用npm或yarn安装emotion: npm install –save @emotion…

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