Vue 项目实战4-无缝轮播图

server/2024/9/25 1:15:21/

养成好习惯,先赞后看,感谢对作者大大的支持

一、话不多说,直接上效果图:

完整视频展示链接如下:

https://item.taobao.com/item.htm?ft=t&id=833405684191


二、实现思路

HTML结构

  • 文档头部设置:定义了文档的基本元信息,包括字符集、视口和标题,并引入了Vue.js库。
  • 样式链接和图标:链接了外部的CSS样式,并设置了网页的favicon图标。
  • 轮播图容器:使用<div id="app">包裹整个内容,其中包含标题和轮播图的HTML结构。
    • 标题:使用<h1>标签定义了一个居中、黑色的标题。
    • 轮播图:由.carousel类的<div>作为外部容器,内部包括:
      • 图片容器.carousel-images,使用Flex布局显示图片,并通过CSS的transform属性实现图片的平滑切换。
      • 图片:使用v-for指令循环渲染图片数组中的图片。
      • 控制按钮.carousel-controls,包含左右切换按钮,使用:style绑定动态调整样式。

CSS样式

  • 全局样式:定义了页面的背景渐变和字体。
  • 轮播图样式:包括轮播图的尺寸、边框和阴影,以及图片的适应性和控制按钮的样式与动画。

JavaScript逻辑

  • Vue实例
    • 数据绑定
      • images:一个由图片路径组成的数组,用于循环显示。
      • currentIndex:当前显示的图片索引。
    • 方法
      • prev:上一张图片切换逻辑,确保索引在数组范围内循环。
      • next:下一张图片切换逻辑,同样确保索引在数组范围内循环。

功能分析

  • 动态图片切换:通过Vue的响应式系统,currentIndex的变化会触发图片容器的transform属性更新,实现平滑的图片切换。
  • 无缝循环prevnext方法中的逻辑确保了图片可以在数组的首尾无缝循环。

三、涉及Vue.js知识点

1. Vue实例创建与挂载

javascript">const { createApp } = Vue;
createApp({// 组件配置
}).mount('#app');
  • createApp:创建Vue应用实例。
  • mount:挂载到DOM元素。

2. 数据属性

javascript">data() {return {images: Array.from({ length: 75 }, (_, i) => `img/${i + 1}.jpg`),currentIndex: 0};
}
  • data:定义组件的数据属性。
  • images:图片数组,通过Array.from生成。
  • currentIndex:当前显示图片的索引。

3. 计算属性与方法

javascript">methods: {prev() {this.currentIndex = (this.currentIndex - 1 + this.images.length) % this.images.length;},next() {this.currentIndex = (this.currentIndex + 1) % this.images.length;}
}
  • methods:定义组件的方法,用于处理逻辑。
  • prevnext:切换图片的方法,实现了图片的循环切换。

4. 指令与动态绑定

javascript"><div class="carousel-images" :style="{ transform: `translateX(-${currentIndex * 100}%)` }">
  • v-bind:style:style:动态绑定样式,用于平滑切换图片。

5. 条件渲染与循环

javascript"><img v-for="(image, index) in images" :key="index" :src="image" alt="Carousel Image">
  • v-for:循环渲染图片数组中的图片。
  • v-bind:key:key:为每个元素提供唯一标识符。

6. 事件监听

javascript"><button @click="prev">◀</button>
<button @click="next">▶</button>
  • v-on:click@click:绑定事件处理函数。

这些知识点共同作用,使得轮播图组件能够响应用户操作,动态加载和切换图片。


四、全部代码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>无缝轮播图【小匠开发铺】</title><script src="https://unpkg.com/vue@3.2.47/dist/vue.global.js"></script><link rel="icon" type="image/png" href="../img/logo.png"><style>body {font-family: Arial, sans-serif;background: linear-gradient(135deg, #f5f7fa, #c3cfe2);margin: 0;padding: 0;}.title{text-align: center;color: #000000;}.carousel {position: relative;width: 60%;margin: 50px auto;overflow: hidden;border-radius: 20px;box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3);background: #fff;border: 1px solid #ddd;}.carousel-images {display: flex;transition: transform 0.8s ease-in-out;}.carousel-images img {width: 100%;border-radius: 20px;object-fit: cover;}.carousel-controls {position: absolute;top: 50%;width: 100%;display: flex;justify-content: space-between;transform: translateY(-50%);}.carousel-controls button {background: rgba(0, 0, 0, 0.5);border: none;color: white;font-size: 28px;padding: 10px 15px;cursor: pointer;border-radius: 50%;transition: background 0.3s ease, transform 0.3s ease;}.carousel-controls button:hover {background: rgba(0, 0, 0, 0.7);transform: scale(1.1);}</style>
</head>
<body><div id="app"><h1 class="title">无缝轮播图【小匠开发铺】</h1><div class="carousel"><div class="carousel-images" :style="{ transform: `translateX(-${currentIndex * 100}%)` }"><img v-for="(image, index) in images" :key="index" :src="image" alt="Carousel Image"></div><div class="carousel-controls"><button @click="prev">◀</button><button @click="next">▶</button></div></div></div><script>const { createApp } = Vue;createApp({data() {return {images: Array.from({ length: 75 }, (_, i) => `img/${i + 1}.jpg`),currentIndex: 0};},methods: {prev() {this.currentIndex = (this.currentIndex - 1 + this.images.length) % this.images.length;},next() {this.currentIndex = (this.currentIndex + 1) % this.images.length;}}}).mount('#app');</script>
</body>
</html>


http://www.ppmy.cn/server/121585.html

相关文章

Taro多端统一开发解决方案

Taro 文档 Taro | 多端统一开发解决方案 Taro是什么&#xff1f; Taro 是一个开放式跨端跨框架解决方案&#xff0c;支持使用 React/Vue/Nerv 等框架来开发 微信 / 京东 / 百度 / 支付宝 / 字节跳动 / QQ / 飞书 小程序 / H5 / RN 等应用。 现如今市面上端的形态多种多样&a…

Java基础知识扫盲

目录 Arrays.sort的底层实现 BigDecimal(double)和BigDecimal(String)有什么区别 Char可以存储一个汉字吗 Java中的Timer定时调度任务是咋实现的 Java中的序列化机制是咋实现的 Java中的注解是干嘛的 Arrays.sort的底层实现 Arrays.sort是Java中提供的对数组进行排序的…

自动化学习3:日志记录及测试报告的生成--自动化框架搭建

一.日志记录 1.配置文件pytest.ini&#xff1a;将日志写入文件方便日后查询或查看执行信息。 需要将文件处理器&#xff08;文件存放位置/时间/格式等等&#xff09;添加到配置文件中的【日志记录器】 # pytest.ini [pytest] # ---------------日志文件&#xff0c;需要配合…

状态估计算法

目录 前言一、贝叶斯滤波二、卡尔曼滤波2.1 KF简介2.2 基本线性模型2.3 KF公式推导2.3.1 预测值2.3.2 先验误差协方差矩阵2.3.3 卡尔曼增益2.3.4 最优估计值2.3.5 后验误差协方差矩阵 2.4 KF算法使用2.5 MATLAB验证2.5 Python验证 三、扩展卡尔曼滤波3.1 EKF原理3.2 MATLAB实现…

视频格式转为mp4(使用ffmpeg)

1、首先安装ffmpeg&#xff0c;下载链接如下 https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-6.1.1-full_build.7z 安装后确保ffmpeg程序加到PATH路径里&#xff0c;cmd执行ffmpeg -version出现下图内容表示安装成功。 2、粘贴下面的脚本到文本文件中&#xff0c;文件后缀…

Call OpenAI API with Python requests is missing a model parameter

题意&#xff1a;使用 Python requests 调用 OpenAI API 时缺少 model 参数。 问题背景&#xff1a; Im trying to call OpenAI API from Python. I know they have their own openai package, but I want to use a generic solution. I chose the requests package for its f…

VmWare安装虚拟机教程(centos7)

VMWare下载&#xff1a; 下载 VMware Workstation Pro - VMware Customer Connect 安装包&#xff1a;&#xff08;16的版本&#xff09;免费&#xff01;&#xff08;一个赞就行&#xff09; 一直点下一步即可&#xff0c;注意修改一下安装位置就好 二、安装虚拟机 安装虚…

kismet和war driving具体准备(仅供无线安全学习)

war driving准备 一台笔记本 一个最好是双频的网卡&#xff0c;单频搜集信号少 我自己买的是http://e.tb.cn/h.grI4EmkDLOqQXHG?tkKZ5g3RVeH6f 如果经济条件允许可以去买大功率天线&#xff08;我买的车载的 大概40db这样子 范围广&#xff09; http://e.tb.cn/h.grCM0CQ6L…