基于JavaScript实现焦点图轮播效果

基于JavaScript实现焦点图轮播效果

1. 确定需求和设计方案

在实现焦点图轮播效果前,我们首先需要明确需求和设计方案。这里我们需要实现以下功能:

  • 自动轮播:图片能够自动播放;
  • 点击切换:点击焦点图下方的小圆点,能够切换到对应的图片;
  • 左右切换:点击箭头按钮,能够左右切换到上一张或下一张图片;
  • 动画效果:每次切换图片时,能够有过渡动画效果。

为了实现这些功能,我们需要采用以下技术和工具:

  • HTML: 页面结构的搭建;
  • CSS: 界面样式的设置;
  • JavaScript:实现自动轮播、点击切换和左右切换;
  • Git:版本控制工具。

2. 结构搭建和基本样式设置

在实现轮播效果前,我们需要先搭建页面结构,并对界面进行基本样式设置。这里我们采用HTML和CSS实现。

HTML代码如下所示:

<div class="slideshow">
    <div class="slideshow-inner">
        <div class="slideshow-item active">
            <img src="images/1.jpg" alt="">
        </div>
        <div class="slideshow-item">
            <img src="images/2.jpg" alt="">
        </div>
        <div class="slideshow-item">
            <img src="images/3.jpg" alt="">
        </div>
    </div>
    <div class="slideshow-pagination">
        <ul class="slideshow-pagination-list">
            <li class="slideshow-pagination-item active"></li>
            <li class="slideshow-pagination-item"></li>
            <li class="slideshow-pagination-item"></li>
        </ul>
    </div>
    <div class="slideshow-prev"></div>
    <div class="slideshow-next"></div>
</div>

CSS代码如下所示:

/* 轮播容器 */
.slideshow {
  position: relative;
  width: 100%;
  height: 460px;
  overflow: hidden;
}

/* 轮播图片容器 */
.slideshow-inner {
  position: relative;
  width: 300%;
  height: 100%;
  left: -100%;
  display: flex;
  transition: left .5s ease-in-out;
}

/* 轮播图片项 */
.slideshow-item {
  width: 33.33%;
  height: 100%;
}

/* 轮播小圆点容器 */
.slideshow-pagination {
  position: absolute;
  bottom: 20px;
  left: 50%;
  transform: translateX(-50%);
}

/* 轮播小圆点 */
.slideshow-pagination-list {
  margin: 0;
  padding: 0;
  list-style: none;
  display: flex;
  justify-content: center;
}

.slideshow-pagination-item {
  width: 10px;
  height: 10px;
  margin: 0 10px;
  border-radius: 50%;
  background-color: rgba(255, 255, 255, .5);
  cursor: pointer;
  transition: background-color .5s ease-in-out;
}

.slideshow-pagination-item.active {
  background-color: #fff;
}

/* 左右切换按钮 */
.slideshow-prev,
.slideshow-next {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 50px;
  height: 50px;
  background-color: rgba(0,0,0,.5);
  cursor: pointer;
}

.slideshow-prev {
  left: 20px;
}

.slideshow-next {
  right: 20px;
}

.slideshow-prev:before,
.slideshow-next:before {
  content: "";
  display: block;
  width: 20px;
  height: 20px;
  background-repeat: no-repeat;
  background-image: url(images/icons.png);
  background-position: 0 0;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

.slideshow-next:before {
  background-position: -20px 0;
}

3. 切换图片和自动轮播

在搭建好页面结构和设置好基本样式后,我们开始实现轮播效果。首先,我们需要实现切换图片的功能。实现方法如下:

  • 定义一个变量i来记录当前显示的图片的索引;
  • 点击小圆点进行切换时,改变i的值,并通过CSS动画移动到相应的位置;
  • 点击左右箭头进行切换时,改变i的值,并通过CSS动画移动到相应的位置;
  • 使用定时器实现自动轮播功能。

具体实现代码如下所示:

// 获取元素
var slideshow = document.querySelector('.slideshow');
var slideshowInner = document.querySelector('.slideshow-inner');
var slideshowItems = document.querySelectorAll('.slideshow-item');
var paginationItems = document.querySelectorAll('.slideshow-pagination-item');
var prevBtn = document.querySelector('.slideshow-prev');
var nextBtn = document.querySelector('.slideshow-next');

// 定义变量
var i = 0;
var timer = null;

// 初始化
paginationItems[0].classList.add('active');

// 切换图片
function switchSlide(index) {
  i = index;

  for (var j = 0; j < paginationItems.length; j++) {
    paginationItems[j].classList.remove('active');
  }

  paginationItems[i].classList.add('active');

  slideshowInner.style.left = -(i * 100 / slideshowItems.length) + '%';
}

// 小圆点点击事件
for (var j = 0; j < paginationItems.length; j++) {
  paginationItems[j].index = j;
  paginationItems[j].onclick = function() {
    switchSlide(this.index);
  }
}

// 左右箭头点击事件
prevBtn.onclick = function() {
  i--;
  if (i < 0) {
    i = slideshowItems.length - 1;
  }
  switchSlide(i);
}

nextBtn.onclick = function() {
  i++;
  if (i >= slideshowItems.length) {
    i = 0;
  }
  switchSlide(i);
}

// 自动轮播
timer = setInterval(function() {
  i++;

  if (i >= slideshowItems.length) {
    i = 0;
  }

  switchSlide(i);
}, 3000);

4. 示范说明

示例一

页面上有三幅图片和对应的小圆点和左右箭头按钮。打开页面后,图片开始自动轮播。用户可以点击小圆点或左右箭头按钮手动切换图片,并且每次图片切换时都会有动画效果。

代码演示见:https://codepen.io/w3c/pen/LYNbvXG

示例二

页面上有四幅图片和对应的小圆点和左右箭头按钮。打开页面后,图片开始自动轮播。用户可以点击小圆点或左右箭头按钮手动切换图片,并且每次图片切换时都会有动画效果。

代码演示见:https://codepen.io/w3c/pen/wvqJBrx

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于JavaScript实现焦点图轮播效果 - Python技术站

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

相关文章

  • Ajax请求WebService跨域问题的解决方案

    跨域即浏览器从一个域名的网页,向另一个域名的服务器请求数据,因为同源策略的限制,Ajax请求WebService跨域通常会出现问题。那么如何解决这个问题呢?下面是一种常见的解决方案: 方案一:Jsonp跨域 JSONP(JSON with Padding)是 JSON 的一种“使用模式”,可用于解决跨域问题。JSONP 的原理是通过 标签的 src 属性不受…

    JavaScript 2023年6月11日
    00
  • JS Array创建及concat()split()slice()的使用方法

    JS Array创建及concat()split()slice()的使用方法 1. JS Array创建 JS中创建数组有两种方式:使用数组字面量和使用Array 构造函数。下面是两种方式的定义方法。 1.1 使用数组字面量: var fruits = ["apple", "banana", "orange&…

    JavaScript 2023年5月27日
    00
  • Babylon使用麦克风并处理常见问题解决

    Babylon使用麦克风并处理常见问题解决 使用麦克风是开发语音交互应用程序的基础。Babylon.js提供了一个简单的方法来捕获麦克风的输入,并将其发回服务器处理。本攻略将详细介绍如何在Babylon.js中使用麦克风,并处理常见问题。 检查浏览器支持 在使用麦克风之前,需要先检查浏览器是否支持WebRTC技术。WebRTC简单来说就是一个专为Web浏览器…

    JavaScript 2023年6月11日
    00
  • Js获取当前日期时间及格式化代码

    下面是关于”Js获取当前日期时间及格式化代码”的完整攻略: 获取当前日期时间 在JavaScript中,我们可以使用new Date()来获取当前日期时间对象。 例如,以下代码段可以获取当前日期时间: const now = new Date(); 上述代码中,now就是当前的日期时间对象。 格式化当前日期时间 虽然new Date()可以让我们获取到当前日…

    JavaScript 2023年5月27日
    00
  • JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具

    作为一个网站作者,可使用以下步骤进行JavaScript(JS)压缩/混淆/格式化批处理,以加强效率和文件安全性。 第一步:安装Node.js Node.js是一个基于Chrome JavaScript运行时建立的平台,可运行在多个操作系统上,并具有事件驱动、非阻塞I/O的特点。我们需要使用Node.js环境运行JS压缩/混淆/格式化工具。 在官网下载地址中…

    JavaScript 2023年5月19日
    00
  • Javascript中window.name属性详解

    让我给您详细讲解一下 “Javascript中window.name属性详解”。 什么是window.name属性? 在JavaScript中,window是指向浏览器窗口的全局对象,其中name是window对象的一个属性。window.name属性是一个字符串,通常用于存储窗口名称或标识符,它的值可以跨越页面重载和跨域名保持不变。 window.name…

    JavaScript 2023年6月11日
    00
  • Vue透传Attributes使用解析

    Vue透传Attributes使用解析 在Vue组件开发中,透传Attributes是一个十分实用的功能。它可以将一个有用的属性从组件传递到内部元素中,而不用在每一个内层组件中重新定义该属性。这篇文章将介绍透传Attributes的使用方法,以及两个示例来说明该功能如何在Vue中发挥作用。 什么是透传Attributes 透传Attributes就是把父组件…

    JavaScript 2023年6月10日
    00
  • 判断可拖动div是否重合 重合多少

    判断可拖动div是否重合,需要考虑以下几个步骤: 步骤一:确定两个div的位置、大小 判断两个div是否重合,首要条件是要获取它们的位置以及大小。可以通过jQuery中的offset和width/height方法获取其在页面上的位置和大小。例如: var $div1 = $("#div1"); var $div2 = $("#d…

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