JS 相册效果 自动播放[本地整合]

JS 相册效果 自动播放[本地整合]指的是一种通过 JavaScript 实现的相册轮播效果,包含自动播放功能,并且应用的图片等资源都是在本地进行整合的。

要实现这个效果,需要遵循以下步骤:

  1. 创建 HTML 结构

首先,在 HTML 文件中创建相册的结构,可以使用 div 等标签来进行包裹。

<div class="album">
  <div class="album-list">
    <!-- 添加图片展示项,可以使用 a 标签包裹里面添加 img 标签 -->
  </div>
  <div class="album-indicator">
    <!-- 添加图片指示条,可以使用 span 标签来进行包裹 -->
  </div>
</div>
  1. 设置样式

接下来,可以使用 CSS 样式来对相册的样式进行设置,比如相册的大小、背景颜色、圆角等。

.album {
  width: 500px;
  height: 500px;
  position: relative;
  background-color: #eee;
  border-radius: 10px;
}

.album-list {
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0;
  left: 0;
  overflow: hidden;
}

.album-list a {
  width: 100%;
  height: 100%;
  display: block;
}

.album-list img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.album-indicator {
  position: absolute;
  bottom: 10px;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
}

.album-indicator span {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background-color: #ccc;
  margin-right: 10px;
  cursor: pointer;
}

.album-indicator span.active {
  background-color: #333;
}
  1. 编写 JavaScript 代码

最后,编写 JavaScript 代码来实现相册的轮播效果和自动播放功能。

首先,我们需要获取相册列表、指示条和单个指示元素。

const albumList = document.querySelector('.album-list')
const indicator = document.querySelector('.album-indicator')
const items = document.querySelectorAll('.album-list a')

然后,我们需要为相册指示条添加单击事件,以实现点击指示条能够切换到对应的图片。

indicator.addEventListener('click', function(e) {
  const target = e.target
  if (target.tagName.toLowerCase() === 'span') {
    const index = Array.from(target.parentNode.children).indexOf(target)
    setActiveItem(index)
  }
})

上述代码首先为相册指示条添加了一个事件监听器,当用户单击某个指示元素时,会触发事件回调函数。然后,通过获取单击的目标元素来确定用户单击的是哪个指示元素,并通过 setActiveItem 函数将对应的图片设置为当前图片。

function setActiveItem(index) {
  for (let i = 0; i < items.length; i++) {
    items[i].classList.remove('active')
    indicators[i].classList.remove('active')
  }
  items[index].classList.add('active')
  indicators[index].classList.add('active')
}

上述 setActiveItem 函数用于将当前图片设置为指定的目标图片。首先,它会遍历相册列表和指示条中的所有元素,并将它们的 active 类名都移除。然后,将目标图片对应的元素设置为 active 类名,以标示当前显示的图片。

接下来,我们需要实现相册的轮播效果。这里我们可以使用 setInterval 函数来定时切换图片。

let slideIndex = 0
const slideInterval = setInterval(showSlides, 3000)

function showSlides() {
  for (let i = 0; i < items.length; i++) {
    items[i].classList.remove('active')
    indicators[i].classList.remove('active')
  }
  slideIndex++
  if (slideIndex > items.length) {
    slideIndex = 1
  }
  items[slideIndex - 1].classList.add('active')
  indicators[slideIndex - 1].classList.add('active')
}

上述代码中,我们设置了一个 slideIndex 变量来存储当前显示的图片的下标,在定时器中每隔 3 秒调用 showSlides 函数来切换图片。showSlides 函数中,首先将相册列表和指示条中的所有元素的 active 类名都移除。然后将 slideIndex 加 1,如果 slideIndex 大于图片数量,就将其重置为 1。最后,根据 slideIndex 将对应的图片设置为当前显示的图片,并为之添加 active 类名。

完整的示例代码可以参考以下代码片段:

<div class="album">
  <div class="album-list">
    <a><img src="image1.jpg"></a>
    <a><img src="image2.jpg"></a>
    <a><img src="image3.jpg"></a>
    <a><img src="image4.jpg"></a>
  </div>
  <div class="album-indicator">
    <span class="active"></span>
    <span></span>
    <span></span>
    <span></span>
  </div>
</div>

<style>
.album {
  width: 500px;
  height: 500px;
  position: relative;
  background-color: #eee;
  border-radius: 10px;
}

.album-list {
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0;
  left: 0;
  overflow: hidden;
}

.album-list a {
  width: 100%;
  height: 100%;
  display: block;
}

.album-list img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.album-indicator {
  position: absolute;
  bottom: 10px;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
}

.album-indicator span {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background-color: #ccc;
  margin-right: 10px;
  cursor: pointer;
}

.album-indicator span.active {
  background-color: #333;
}
</style>

<script>
const albumList = document.querySelector('.album-list')
const indicator = document.querySelector('.album-indicator')
const items = document.querySelectorAll('.album-list a')
const indicators = document.querySelectorAll('.album-indicator span')

// 给相册指示条添加单击事件
indicator.addEventListener('click', function(e) {
  const target = e.target
  if (target.tagName.toLowerCase() === 'span') {
    const index = Array.from(target.parentNode.children).indexOf(target)
    setActiveItem(index)
  }
})

// 设置自动轮播
let slideIndex = 0
const slideInterval = setInterval(showSlides, 3000)

function showSlides() {
  for (let i = 0; i < items.length; i++) {
    items[i].classList.remove('active')
    indicators[i].classList.remove('active')
  }
  slideIndex++
  if (slideIndex > items.length) {
    slideIndex = 1
  }
  items[slideIndex - 1].classList.add('active')
  indicators[slideIndex - 1].classList.add('active')
}

// 设置当前显示的图片和指示元素
function setActiveItem(index) {
  for (let i = 0; i < items.length; i++) {
    items[i].classList.remove('active')
    indicators[i].classList.remove('active')
  }
  items[index].classList.add('active')
  indicators[index].classList.add('active')
}
</script>

其中,我们可以通过修改定时器的周期来改变轮播速度。同时,还可以通过修改 setActiveItem 函数参数来改变默认的显示图片。

另外,可以通过对相册列表中的每个 a 标签添加 data- 属性来存储额外的信息,比如图片的标题、描述等,以实现更强大的功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS 相册效果 自动播放[本地整合] - Python技术站

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

相关文章

  • CSS 三栏等高布局实现方法

    CSS三栏等高布局实现方法 在Web开发中,三栏等高布局是一种常见的布局方式。本攻略将详细讲解CSS三栏等高布局的实现方法,包括基本原理、使用方法和示例说明。 1. 基本原理 CSS三栏等高布局的基本原理是通过使用CSS的float属性和clear属性来实现。具体来说,可以将三个元素分别设置为左浮动、右浮动和不浮动,并使用clear属性来清除浮动,从而实现三…

    css 2023年5月18日
    00
  • 一些常用的DIV+CSS的网页布局所用的代码段

    那么接下来我就来详细讲解一些常用的DIV+CSS的网页布局所用的代码段。 常用的网页布局方式 普通布局: 普通布局是最简单的布局方式之一,主要利用HTML的块级元素div实现。代码如下: <div class="container"> <div class="header"></div&g…

    css 2023年6月9日
    00
  • CSS定义鼠标经过时鼠标图形的十五种样式整理

    下面将为您详细讲解“CSS定义鼠标经过时鼠标图形的十五种样式整理”的完整攻略。 什么是CSS定义鼠标经过时鼠标图形的样式? CSS定义鼠标经过时鼠标图形的样式,顾名思义,就是在鼠标经过某个元素时改变鼠标的样式。这在网页设计中是非常重要的,能够让用户提高交互性和体验感。 如何定义鼠标经过时鼠标图形的样式? 在CSS中,定义鼠标经过时鼠标图形的样式,可以使用以下…

    css 2023年6月10日
    00
  • Spring Boot开发Web应用详解

    那么我将为您详细讲解Spring Boot开发Web应用的完整攻略,包括如何构建Spring Boot Web应用以及相关的开发技巧和示例。 Spring Boot简介 Spring Boot是一个基于Spring框架的快速开发Web应用的工具。它是Spring Framework的一种快速实现方式,提供了一种快速配置和构建Spring应用的方法。相对于传统…

    css 2023年6月9日
    00
  • vue实现PC端分辨率适配操作

    下面我就为您讲解一下“Vue实现PC端分辨率适配操作”的完整攻略。 一、什么是PC端分辨率适配 在不同的电脑上使用网页时,会因为电脑的屏幕分辨率不同,导致网页的显示效果也会不同。在PC端分辨率适配方面,我们需要考虑不同的屏幕分辨率对网页的影响,以确保在任何分辨率下都可以获得最佳的用户体验。 二、如何实现PC端分辨率适配 Vue中实现PC端分辨率适配,可以通过…

    css 2023年6月10日
    00
  • CSS3制作漂亮的照片墙的实现代码

    下面是CSS3制作漂亮的照片墙的完整攻略: 1.实现原理 照片墙的实现原理主要依赖于CSS3中的一些属性,如column-count、column-gap、transform、transition和box-shadow等,其中: column-count:用于设置元素在多列中进行分布。 column-gap:用于设置列与列之间的间隔。 transform:用…

    css 2023年6月11日
    00
  • Flexible.js可伸缩布局实现方法详解

    Flexible.js可伸缩布局实现方法详解 简介 Flexible.js是一个轻量级的JavaScript库,用于实现Web页面的可伸缩布局,可以自动适应不同的设备尺寸,包括PC、平板、手机等。它基于CSS3的@media查询和JavaScript的媒体查询,实现了根据屏幕宽度自动调整html字体大小的功能,从而达到了页面的自适应布局效果。 使用方法 步骤…

    css 2023年6月11日
    00
  • js实现花俏的转动、旋转之后慢慢张开的窗口特效

    下面我将为你详细讲解“js实现花俏的转动、旋转之后慢慢张开的窗口特效”的完整攻略。 首先,我们需要明确的是该效果涉及到的三个主要特效,分别为旋转、缩小展示、弹性放大展示。因此,我们需要针对这三个特效分别进行设计和实现。 1.旋转特效 对于旋转特效,我们可以使用css3中的transform属性实现。代码如下: .box{ width: 200px; heig…

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