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

yizhihongxing

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日

相关文章

  • php提高网站效率的技巧

    当涉及到提高网站效率时,PHP程序员可以采取一些技巧来优化代码,减少响应时间和服务器负载。以下是具体的攻略: 1.使用缓存来减少数据库查询和页面渲染时间 使用缓存可以大大减少服务器负载并显著提高网站效率。针对PHP网站的缓存解决方案有很多。其中最流行的两种是文件缓存和内存缓存。 示例 作为一个例子,我们可以通过缓存数据库查询来加快网站的响应时间,因为对数据库…

    css 2023年6月9日
    00
  • vue-cli脚手架引入弹出层layer插件的几种方法

    让我来详细讲解“vue-cli脚手架引入弹出层layer插件的几种方法”的完整攻略。 1. 安装layer插件 在使用layer插件之前,需要先进行安装,可以通过npm进行安装,执行如下命令: npm install layer 2. 在Vue项目中引入layer插件 在Vue项目中引入layer插件有如下几种方法: 方法1:在Vue组件中引入 在需要使用l…

    css 2023年6月9日
    00
  • border-radius是向元素添加圆角边框的方法

    “border-radius” 是CSS3中的一个属性,用于创建圆角边框,它可以通过半径来指定圆角的大小。 语法 /*为元素添加统一的圆角*/ border-radius: 10px; /*为元素添加统一的椭圆圆角*/ border-radius: 50%; /*为元素添加不同的圆角*/ border-radius: 10px 30px 20px 60px;…

    css 2023年6月10日
    00
  • 详解CSS外边距折叠引发的问题

    下面是详解CSS外边距折叠引发的问题的完整攻略。 什么是外边距折叠? 首先,我们需要了解什么是外边距折叠。外边距折叠,指的是当两个或多个相邻的盒子的外边距(margin)相遇时,会合并成一个外边距,即折叠掉多余的外边距,这种现象也被称为外边距合并。 什么情况下会出现外边距折叠? 外边距折叠只会在一定的情况下出现,主要有以下两种情况: 1. 相邻的兄弟元素之间…

    css 2023年6月9日
    00
  • 手机端页面rem宽度自适应脚本

    下面是关于“手机端页面rem宽度自适应脚本”的完整攻略。 什么是rem? rem是一种可以相对于根元素大小进行调整的单位,它可以用于替代像素作为页面布局的单位。使用rem单位的一个好处是,整个页面的宽度可以根据页面宽度大小进行自动调整,达到适配不同的设备的屏幕。 rem宽度自适应脚本的实现 我们可以通过javascript编写自适应rem脚本,根据设备宽度动…

    css 2023年6月10日
    00
  • 纯CSS绘制三角形箭头效果

    在网页前端开发中,使用纯 CSS 绘制三角形箭头效果是一项非常有用的技能。下面是一个完整的攻略,包含了绘制三角形箭头的过程和两个示例说明。 绘制三角形箭头的过程 1. 创建 HTML 结构 首先,我们需要创建一个 HTML 结构,用于容纳三角形箭头。下面是一个简单的 HTML 结构示例: <div class="arrow">…

    css 2023年5月18日
    00
  • Bootstrap开发实战之第一次接触Bootstrap

    Bootstrap开发实战之第一次接触Bootstrap Bootstrap是一个流行的前端框架,它可以帮助我们快速开发一个美观、响应式的网页。在这篇文章中,我们将介绍如何第一次接触Bootstrap并使用它构建一个简单的网页。 步骤1:下载Bootstrap 首先,我们需要从Bootstrap官网上下载最新版本的Bootstrap。下载之后,我们可以解压缩…

    css 2023年6月11日
    00
  • jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)

    jQuery实现带缩略图的焦点图片切换(自动播放/响应鼠标动作)攻略 1. 准备工作 在实现本攻略前,我们需要准备以下内容: 最新版的jQuery库,在编写代码时建议使用jQuery v3.x 版本; Html页面中,包含用于展示焦点图片切换的元素,例如id为carousel-container的元素用于显示切换的图片; Html页面中,包含用于展示缩略图的…

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