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

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

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

完整视频展示链接如下:

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实例创建与挂载

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

2. 数据属性

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

3. 计算属性与方法

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. 指令与动态绑定

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

5. 条件渲染与循环

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

6. 事件监听

<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.mzph.cn/news/880412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 委托(Delegate)二

一.委托的多播&#xff08;Multicasting of a Delegate&#xff09;&#xff1a; 委托对象&#xff0c;使用 "" 运算符进行合并&#xff0c;一个合并委托调用它所合并的两个委托。使用"-" 运算符从合并的委托中移除组件委托。 注&#xff1a;只有相同类型…

C语言编译和链接详解(通俗易懂,深入本质)

我们平时所说的程序,是指双击后就可以直接运行的程序,这样的程序被称为可执行程序(Executable Program)。在 Windows 下,可执行程序的后缀有.exe和.com(其中.exe比较常见);在类 UNIX 系统(Linux、Mac OS 等)下,可执行程序没有特定的后缀,系统根据文件的头部信息来判…

小小扑克牌算法

1.定义一个扑克牌类Card&#xff1a; package democard; public class Card {public String suit;//表示花色public int rank;//表示牌点数Overridepublic String toString() {return "{"suit rank"}";}//实例方法&#xff0c;初始化牌的点数和花色public…

Redis篇(初识Redis)

目录 一、数据库 二、NoSQL 三、认识Redis 三、关系数据库与非关系数据库对比 1. 结构化与非结构化 2. 关联和非关联 3. 查询方式 4. 事务 5. 存储方式 6. 扩展性 7. 总结 7.1. 图形梳理 7.2. 表格梳理 7.3. 优缺点 关系型数据库 非关系型数据库 四、再次认识R…

word中的表格全部设置宽度100%

1、背景 我们用工具将数据库或其他的数据导出成word时&#xff0c;表格有的会大于100%&#xff0c;超过了边界。word没有提供全局修改的方法。如果我们想改成100%。 一种方式是通过宏&#xff0c;全局改。一种是手动改。 2、宏修改 如果表格多&#xff0c;可以通过这种方式。…

【Qt】前后端交互---DataCenter类

设计目的 前后端交互系统中&#xff0c;创建并使用数据核心类的目的就是让该类作为客户端的数据中心&#xff0c;也就是说其负责管理客户端的所有数据与服务器的网络通信。 数据持久化 初始化数据文件 该函数设计的目的就是用于检查所需要的文件和目录是否存在&#xff0c;如…

You are not allowed to push code to this project

原因1 用户权限不够。 具体查看用户权限路径&#xff1a; 原因2 vscode之前都能提交代码&#xff0c;但是突然就提交不上了。 表现为:前端代码能拉取&#xff0c;但是不能提交。使用idea进行前端代码的提交&#xff0c;完全没问题。 解决方案&#xff1a;修改TortoiseG…

新160个crackme - 066-Andrnalin.3

运行分析 文字是德语&#xff0c;需要破解Key PE分析 VB程序&#xff0c;32位&#xff0c;无壳 静态分析&动态调试 使用 VB Decompiler 静态分析&#xff0c;发现逻辑如下&#xff1a;1、提取Key每个字符 102、计算后的Key要与"kXy^rO|yXom\kMuOn*"相等 算法分析…

25 基于51单片机的温度电流电压检测系统(压力、电压、温度、电流、LCD1602)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;通过DS18B20检测温度&#xff0c;滑动变阻器连接数模转换器模拟电流、电压&#xff0c;通过LCD1602显示&#xff0c;程序里设置温度阈值为40&#xff0c;电流阈值为60&am…

[大语言模型-论文精读] 以《黑神话:悟空》为研究案例探讨VLMs能否玩动作角色扮演游戏?

1. 论文简介 论文《Can VLMs Play Action Role-Playing Games? Take Black Myth Wukong as a Study Case》是阿里巴巴集团的Peng Chen、Pi Bu、Jun Song和Yuan Gao&#xff0c;在2024.09.19提交到arXiv上的研究论文。 论文: https://arxiv.org/abs/2409.12889代码和数据: h…

openKylin--安装 .net6.0

编辑profile文件 cd .. //切换到根目录 cd /etc //切换到etc目录 vim profile //b编辑profile文件 1. 按→键移动到文件末尾 2. 按Insert键进入编辑模式 3. 按Enter另起一行开始编辑 export DOTNET_ROOT/home/dotnetexport PATH$PATH:/home/dotnet 可以通过右键--粘贴 的…

使用Crawler实例进行网页内容抓取

网页内容抓取的背景 随着互联网的快速发展&#xff0c;网页上的信息量日益庞大。如何从海量的网页中快速、准确地抓取所需信息&#xff0c;成为了一个技术挑战。网页内容抓取技术通过自动化的方式&#xff0c;模拟用户浏览网页的过程&#xff0c;获取网页上的文本、图片、链接…

通信工程学习:什么是FDD频分双工

FDD:频分双工 FDD(频分双工,Frequency Division Duplexing)是一种无线通信技术,它通过将频谱划分为上行和下行两个不重叠的频段来实现同时双向通信。以下是FDD频分双工的详细解释: 一、定义与原理 定义: FDD是一种无线通信系统的工作模式,其中上行链路(从移动…

开源链动 2+1 模式 S2B2C 商城小程序:激活 KOC,开启商业新征程

摘要&#xff1a;本文深入探讨了 KOC 在立体连接中的重要性&#xff0c;以及如何通过开源链动 21 模式 S2B2C 商城小程序发现和找到更多的 KOC。强调了历史积累强关系和快速强化强关系的方法&#xff0c;并阐述了该商城小程序在推动商业发展中的关键作用。 一、引言 在当今竞争…

webpack4 target:“electron-renderer“ 打包加速配置

背景 昨天写得一篇Electron-vue asar 局部打包优化处理方案——绕开每次npm run build 超级慢的打包问题-CSDN博客文章浏览阅读754次&#xff0c;点赞19次&#xff0c;收藏11次。因为组员对于 Electron 打包过程存在比较迷糊的状态&#xff0c;且自己也没主动探索 Electron-vu…

vue初学随笔

Vue基础 Vue基本概念 Vue是什么 Vue是一个渐进式的JavaScript框架&#xff0c;它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。 渐进式&#xff1a;各个特性可以根据项目需要逐渐引入和…

C++ | Leetcode C++题解之第429题N叉树的层序遍历

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<int>> levelOrder(Node* root) {if (!root) {return {};}vector<vector<int>> ans;queue<Node*> q;q.push(root);while (!q.empty()) {int cnt q.size();vector<…

【AI学习】Lilian Weng:Extrinsic Hallucinations in LLMs(LLM 的外在幻觉)

来自OpenAI 的 Lilian Weng的《Extrinsic Hallucinations in LLMs》 Date: July 7, 2024 | Estimated Reading Time: 30 min | Author: Lilian Weng 文章链接&#xff1a;https://lilianweng.github.io/posts/2024-07-07-hallucination/ 大概看了一下&#xff0c;这篇文章的核…

深度学习与应用:行人跟踪

**实验 深度学习与应用&#xff1a;行人跟踪 ** ------ **1、 实验目的** ------ - 了解行人跟踪模型基础处理流程 - 熟悉行人跟踪模型的基本原理 - 掌握 行人跟踪模型的参数微调训练以及推理的能力 - 掌握行人跟踪模型对实际问题的应用能力&#xff0c;了解如何在特定的场景和…

MT6765/MT6762(R/D/M)/MT6761(MT8766)安卓核心板参数比较_MTK联发科4G智能模块

联发科Helio P35 MT6765安卓核心板 MediaTek Helio P35 MT6765是智能手机的主流ARM SoC&#xff0c;于2018年末推出。它在两个集群中集成了8个ARM Cortex-A53内核&#xff08;big.LITTLE&#xff09;。四个性能内核的频率高达2.3GHz。集成显卡为PowerVR GE8320&#xff0c;频率…