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日

相关文章

  • jQuery基于ajax实现带动画效果无刷新柱状图投票代码

    使用jQuery基于ajax实现带动画效果无刷新柱状图投票,需要以下步骤: 步骤1:编写HTML代码 首先,需要在HTML中创建一个div,将其作为投票结果的容器。然后,在该div中再创建若干个div,每个div表示投票选项,同时添加一个input元素,用于存储选项对应的投票数。 以下是一个示例HTML代码: <div id="vote_re…

    css 2023年6月11日
    00
  • jQuery计算文本框字数及限制文本框字数的方法

    当我们需要在网页中嵌入文本框,为了能够更好地管理用户输入的内容,经常需要对输入的字符个数进行计数,并限制输入字符的数量。而使用jQuery可以轻松实现这样的效果。 下面是具体的jQuery计算文本框字数及限制文本框字数的方法: 计算文本框字数 1. 绑定事件 用keyup事件来监控文本框中的字符输入。 $(‘textarea’).keyup(function…

    css 2023年6月10日
    00
  • java中的快捷键小结

    我很愿意为您提供关于Java中的快捷键的完整攻略。下面是我的讲解: 什么是Java中的快捷键? 快捷键是指在编程过程中一些可以快速执行特定操作的快速键盘键组合。使用快捷键常常可以帮助程序员提高代码编写效率。而Java中也提供了一些常用的快捷键,接下来是针对Java里的快捷键做的一些整理和归纳。 Java中的快捷键列表 Ctrl + Shift + T 搜索类…

    css 2023年6月10日
    00
  • css3圆角边框和边框阴影示例

    下面是关于“CSS3圆角边框和边框阴影示例”的完整攻略: 圆角边框 首先,我们来看圆角边框的写法。可以使用border-radius属性来设置元素的边框圆角。这个属性可以取一个或多个长度或百分数值,表示四个角的圆角半径,和box-shadow属性一样,可以用逗号隔开。例如: div { border-radius: 10px; } 上面的代码会将一个div元…

    css 2023年6月10日
    00
  • css3实现背景图片拉伸效果像桌面壁纸一样

    要实现背景图片拉伸效果像桌面壁纸一样,我们可以使用CSS3中的background-size属性。该属性可以改变背景图片的大小。 在使用background-size属性之前,需要先确定背景图片需要覆盖的区域。可以使用背景图片的URL属性指定图片的路径,并用background-repeat属性指定不用重复平铺该背景图片。 具体操作如下: 首先,在CSS文件…

    css 2023年6月9日
    00
  • 浅谈CSS响应式图片运用中的srcset属性

    下面是详细讲解关于“浅谈CSS响应式图片运用中的srcset属性”的完整攻略以及两个示例说明。 什么是响应式图片 响应式图片是指在不同设备上,自动调整图片大小以适应不同的屏幕和分辨率,从而提高用户体验和页面性能。网站设计师和开发人员可以使用响应式图片来根据设备屏幕大小和分辨率的不同,为不同的用户提供可视化的体验。 srcset 属性的运用 srcset 属性…

    css 2023年6月10日
    00
  • css3实现冲击波效果的示例代码

    要实现CSS3冲击波效果,我们可以使用伪元素来实现。下面是实现冲击波效果的完整攻略: 1. HTML代码 首先,我们需要一个HTML元素,在这个元素中添加伪元素来实现冲击波效果。我们可以用div元素来代表这个元素。 <div class="wave"></div> 2. CSS代码 接下来,我们需要用CSS样式来定…

    css 2023年6月10日
    00
  • 用CSS3实现背景渐变的方法

    下面是用CSS3实现背景渐变的方法的完整攻略。 一、CSS3背景渐变简介 CSS3中的背景渐变可以通过 background-image 属性实现。使用 linear-gradient(线性渐变)和 radial-gradient(径向渐变)函数,可以实现多种渐变效果。 调用线性渐变函数时,需要给出至少两种颜色值,这些颜色会沿着线性方向从一种颜色过渡到另一种…

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