利用 CSS3 实现的无缝轮播功能代码

yizhihongxing

我来详细讲解利用 CSS3 实现的无缝轮播功能代码的完整攻略:

1. 准备工作

1.1 HTML 结构

首先,我们需要准备好需要轮播的图片以及用于显示轮播图片的 HTML 结构。通常情况下,我们会使用 ulli 标签创建图片列表。例如:

<div class="slider">
  <ul>
    <li><img src="image1.jpg" alt="image1"></li>
    <li><img src="image2.jpg" alt="image2"></li>
    <li><img src="image3.jpg" alt="image3"></li>
    <!-- more images -->
  </ul>
</div>

1.2 CSS 样式

接下来,我们需要给图片列表和图片设置样式。例如,我们需要将图片列表设置为横向排列并隐藏溢出部分,为图片设置宽度和高度,以及使图片水平居中等。例如:

.slider {
  width: 100%;
  overflow: hidden;
}
.slider ul {
  list-style: none;
  display: flex;
  width: 300%; /* 将图片总宽度设置为 300% */
  animation: slide 10s linear infinite; /* 添加动画效果 */
}
.slider li {
  width: 33.33%; /* 将每张图片的宽度设置为图片列表总宽度的 1/3 */
  height: 200px;
  text-align: center; /* 让图片水平居中 */
}
.slider li img {
  max-width: 100%;
  max-height: 100%;
}

在上面的代码中,我们定义了一个名为 .slider 的 CSS 类,它用于包装图片列表,让我们可以控制轮播效果。同时,我们还定义了一个名为 slide 的动画效果,将在下一步的内容中进一步讲解。

2. 利用 CSS3 实现的无缝轮播功能

要实现无缝轮播功能,我们需要使用 CSS3 的 animation 属性来定义动画效果,并使用 transform 属性来平滑地移动图片。下面是实现无缝轮播功能的完整 CSS 代码:

.slider ul {
  list-style: none;
  display: flex;
  width: 300%; /* 将图片总宽度设置为 300% */
  animation: slide 10s linear infinite; /* 添加动画效果 */
}

@keyframes slide {
  0% {
    transform: translateX(0%); /* 从 0% 的位置开始移动 */
  }
  33.33% {
    transform: translateX(-100%); /* 移动到第 2 张图片 */
  }
  66.66% {
    transform: translateX(-200%); /* 移动到第 3 张图片 */
  }
  100% {
    transform: translateX(0%); /* 回到第 1 张图片 */
  }
}

在上面的代码中,我们使用了 keyframes 关键字定义了一个名为 slide 的动画效果。在 slide 动画中,我们使用了 transform 属性来平滑地移动图片。其中,translateX 函数用于在水平方向上移动图片, -100% 表示向左移动一个图片的宽度, -200% 表示向左移动两个图片的宽度。

最后,我们将 slide 动画应用到图片列表上,并设置动画的持续时间为 10s,使图片在 10s 的时间内完成一个轮播循环。由于设置了 infinite 参数,所以这个轮播循环将一直持续下去,直到页面被关闭。

3. 示例说明

3.1 示例一

下面是一个简单的无缝轮播示例。我们使用了 4 张图片来进行轮播,并设置了轮播间隔为 3s。同时,我们还添加了左右箭头和圆点指示器来让用户可以手动控制轮播。

<div class="slider">
  <ul>
    <li><img src="image1.jpg" alt="image1"></li>
    <li><img src="image2.jpg" alt="image2"></li>
    <li><img src="image3.jpg" alt="image3"></li>
    <li><img src="image4.jpg" alt="image4"></li>
  </ul>
  <div class="arrows">
    <a href="#" class="prev">&lt;</a>
    <a href="#" class="next">&gt;</a>
  </div>
  <div class="dots">
    <a href="#" class="dot active"></a>
    <a href="#" class="dot"></a>
    <a href="#" class="dot"></a>
    <a href="#" class="dot"></a>
  </div>
</div>

<style>
.slider {
  position: relative;
  width: 100%;
  height: 400px;
  overflow: hidden;
}
.slider ul {
  list-style: none;
  display: flex;
  width: 400%;
  animation: slide 12s linear infinite;
}
.slider li {
  width: 25%;
  height: 100%;
  text-align: center;
}
.slider li img {
  height: 100%;
  max-width: 100%;
}
.arrows {
  position: absolute;
  top: 50%;
  left: 0;
  right: 0;
  transform: translateY(-50%);
  z-index: 1;
  font-size: 30px;
  color: #fff;
  text-decoration: none;
}
.arrows a {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  padding: 10px;
  border-radius: 50%;
  background: rgba(0, 0, 0, 0.5);
  transition: background-color 0.3s ease-in-out;
}
.arrows a:hover {
  background: rgba(0, 0, 0, 0.8);
}
.prev {
  left: 20px;
}
.next {
  right: 20px;
}
.dots {
  position: absolute;
  bottom: 20px;
  left: 0;
  right: 0;
  text-align: center;
  z-index: 1;
}
.dot {
  display: inline-block;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  margin: 0 5px;
  background: rgba(0, 0, 0, 0.3);
  transition: background-color 0.3s ease-in-out;
}
.dot.active {
  background: rgba(0, 0, 0, 0.8);
}
</style>

<script>
var slider = document.querySelector('.slider');
var prev = slider.querySelector('.prev');
var next = slider.querySelector('.next');
var dots = slider.querySelectorAll('.dot');
var ul = slider.querySelector('ul');
var li = slider.querySelectorAll('li');
var index = 1;
var len = li.length;
var interval = 3000;
var timer;

// 上一张图片
function prevImage() {
  index--;
  if (index < 1) {
    index = len - 2;
    ul.style.transition = 'none';
    ul.style.transform = 'translateX(-' + (len - 1) * 25 + '%)';
  }
  setTimeout(() => {
    ul.style.transition = 'transform 0.5s ease-in-out';
    ul.style.transform = 'translateX(-' + (index - 1) * 25 + '%)';
    setActiveDot();
  }, 0);
}

// 下一张图片
function nextImage() {
  index++;
  if (index >= len - 1) {
    index = 1;
    ul.style.transition = 'none';
    ul.style.transform = 'translateX(0)';
  }
  setTimeout(() => {
    ul.style.transition = 'transform 0.5s ease-in-out';
    ul.style.transform = 'translateX(-' + (index - 1) * 25 + '%)';
    setActiveDot();
  }, 0);
}

// 设置当前激活的圆点
function setActiveDot() {
  for (var i = 0; i < dots.length; i++) {
    dots[i].classList.remove('active');
  }
  dots[index - 1].classList.add('active');
}

// 自动轮播
function autoPlay() {
  timer = setInterval(nextImage, interval);
}

autoPlay();

prev.addEventListener('click', function(e) {
  e.preventDefault();
  clearInterval(timer);
  prevImage();
  autoPlay();
});

next.addEventListener('click', function(e) {
  e.preventDefault();
  clearInterval(timer);
  nextImage();
  autoPlay();
});

for (var i = 0; i < dots.length; i++) {
  dots[i].addEventListener('click', function(e) {
    e.preventDefault();
    clearInterval(timer);
    index = Array.from(dots).indexOf(e.target) + 1;
    ul.style.transition = 'transform 0.5s ease-in-out';
    ul.style.transform = 'translateX(-' + (index - 1) * 25 + '%)';
    setActiveDot();
    autoPlay();
  });
}
</script>

在上面的示例中,我们首先定义了一个包含 4 张图片的图片列表,它的 HTML 结构如下:

<div class="slider">
  <ul>
    <li><img src="image1.jpg" alt="image1"></li>
    <li><img src="image2.jpg" alt="image2"></li>
    <li><img src="image3.jpg" alt="image3"></li>
    <li><img src="image4.jpg" alt="image4"></li>
  </ul>
  <!-- arrows and dots -->
</div>

接着,我们使用 CSS3 的 animation 属性定义了一个名为 slide 的动画效果,并应用到了图片列表上。动画效果使用了 translateX 函数来平滑地移动图片,实现了无缝轮播的效果。

在示例中,我们还添加了左右箭头和圆点指示器来让用户可以手动控制轮播。在 JavaScript 代码中,我们为左右箭头和圆点指示器添加了点击事件处理程序,用于控制图片列表的移动和圆点指示器的激活状态。同时,我们还使用了 setInterval 函数来控制轮播间隔。

在上面的示例中,我们使用了比较简单的逻辑来控制图片的移动。如果达到了列表的边界,我们需要切换到第 1 或最后 1 张图片继续播放。具体来说,如果当前图片是第 1 张,则我们需要将图片列表移动到第 4 张,然后使用 translateX 函数将图片第 1 张移动到可视区域。如果当前图片是最后 1 张,则我们需要将图片列表移动到第 1 张,然后使用 translateX 函数将图片第 2 张移动到可视区域。

3.2 示例二

除了使用左右箭头和圆点指示器来控制轮播,我们还可以利用鼠标悬停事件来暂停轮播。下面是一个带有鼠标悬停暂停轮播功能的无缝轮播示例。

<div class="slider">
  <ul>
    <li><img src="image1.jpg" alt="image1"></li>
    <li><img src="image2.jpg" alt="image2"></li>
    <li><img src="image3.jpg" alt="image3"></li>
    <li><img src="image4.jpg" alt="image4"></li>
  </ul>
</div>

<style>
.slider {
  position: relative;
  width: 100%;
  height: 400px;
  overflow: hidden;
}
.slider ul {
  list-style: none;
  display: flex;
  width: 400%;
  animation: slide 12s linear infinite;
}
.slider li {
  width: 25%;
  height: 100%;
  text-align: center;
}
.slider li img {
  height: 100%;
  max-width: 100%;
}
.slider:hover ul {
  animation-play-state: paused;
}
</style>

在上面的示例中,我们使用了 CSS3 的 animation-play-state 属性来控制动画的播放状态。如果鼠标悬停在图片列表上,则我们将 animation-play-state 设置为 paused,使动画停止播放。如果鼠标移出图片列表,则动画继续播放。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用 CSS3 实现的无缝轮播功能代码 - Python技术站

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

相关文章

  • 浅析与CSS3的loading动画加载相关的transition优化

    下面是关于“浅析与CSS3的loading动画加载相关的transition优化”的完整攻略。 什么是CSS3的loading动画加载? CSS3的loading动画加载,顾名思义,是指使用CSS3来实现的页面加载动画。通过对一系列元素的设计,从而达到页面加载时显示动画的效果。这种动画效果可以提高用户等待加载的体验感,从而增加用户对网站的好感度。 trans…

    css 2023年6月10日
    00
  • CSS 实现多彩、智能的阴影效果

    这里是CSS实现多彩、智能的阴影效果的完整攻略。 1. 简介 阴影效果在网页设计中是非常常见的元素之一。CSS 通过 box-shadow 属性可以实现简单的阴影效果,但这种简单的阴影效果并不够多彩、智能。设计师们可以通过 CSS 的高级特性来实现多彩、智能的阴影效果,从而让设计更有活力。 2. 实现多彩阴影 思路:使用 radial-gradient 创建…

    css 2023年6月9日
    00
  • 用<TABLE>语句来实现圆角表格可以省去制作圆角图片之苦!

    实现圆角表格,可以通过CSS的 border-radius 属性来实现。但是在某些情况下,为了兼容性和美观性考虑,我们可以使用HTML的 <table> 标签来代替纯CSS的实现。 下面是具体步骤: 1.在HTML文件中,使用<table>标记来创建表格: <table> <tr> <th>Colu…

    css 2023年6月10日
    00
  • CSS让高度不确定图片垂直居中的几种技巧

    下面是关于CSS让高度不确定的图片垂直居中的几种技巧的完整攻略。 1. 使用Flexbox布局 Flexbox布局是一种非常方便实用的CSS布局方式,可以轻松地实现垂直居中效果。首先,设置容器的display属性为flex,并将justify-content和align-items属性都设置为center,代码如下: .container { display…

    css 2023年6月10日
    00
  • 详解Vue2.x-directive的学习笔记

    首先,在学习Vue2.x-directive之前,我们需要了解一下Vue.js中的指令(Directive)是什么。指令是Vue.js提供的带有v-前缀的特殊属性,它们的职责是当表达式的值改变时,将某些行为应用到DOM元素上。例如,v-bind可以使当前元素的某个属性值与Vue.js数据模型中的属性值绑定在一起,v-show可以根据Vue.js数据模型中的值…

    css 2023年6月9日
    00
  • ExtJs默认的字体大小改变的几种方法(自己整理)

    下面为你详细讲解 ExtJs 默认的字体大小改变的几种方法。 方法一:修改样式文件 进入 ExtJs 样式文件夹 打开 ext-all.css 文件 搜索 font-size,找到对应字体大小的样式 修改字体大小,保存文件 实例:将默认字体大小从 14px 改为 16px .x-panel-body { font-size: 16px; } 方法二:使用 o…

    css 2023年6月9日
    00
  • jquery 图片Silhouette Fadeins渐显效果

    针对“jQuery图片Silhouette Fadeins渐显效果”的实现过程,可以按照以下步骤进行: 步骤1:下载jQuery插件 首先需要下载并引入jQuery插件,可以访问以下链接下载: https://code.jquery.com/jquery-3.2.1.min.js 然后将下载好的jQuery插件文件引入到网站页面中。 示例代码: <he…

    css 2023年6月10日
    00
  • 网络爬虫案例解析

    网络爬虫案例解析 网络爬虫是一种自动化获取互联网信息的技术,可以帮助我们从互联网上获取大量的有用信息。本文将详细讲解网络爬虫的完整攻略,包含以下步骤: 确定爬取目标 分析目标网站结构 编写网络爬虫程序 存储数据 反爬虫处理 确定爬取目标 在开始编写网络爬虫程序之前,需要确定爬取目标。可以选择一些常见的目标,比如新闻网站、电商平台、社交媒体等。也可以选择一些特…

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