前端框架Vue3项目实战(基于Vue3实现一个小相册)

下面是是对Vue3操作的一个项目实战

下面代码是html的基本骨架(没有任何的功能):

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>相册</title>

    <style>

        .box{

            margin-bottom: 20px;

            padding: 0;

        }

        .img{

            width: 480px;  

            height: 240px;

            border: 1px bisque solid;

        }

    </style>

</head>

<body>

    <div id="app">

        <h2>基于Vue3实现的相册:展示第xx张相片</h2>      

        <img src = "./img_src/logo1.png" class="img" alt="图片加载失败">

        <ul type="none" class="box"></ul>       

        <button>上一张</button>   <button>下一张</button>

    </div>

    <script type="module">

        import { createApp, ref } from './vue.esm-browser.js'

    </script>

</body>

</html>

运行结果:

                ​​​​​​​        ​​​​​​​        ​​​​​​​         

接下来我们将添加代码使其变成一个小相册,运行结果如下图:

         

我们可以点击上一张或下一张来实现图片的跳转,也可以使用按钮1234来实现你想跳转的张数

【实现思路】

1. 利用v-on为切换相片的按钮绑定上一个函数,这个函数负责更改图片路径

2. 利用v-bind绑定图片的路径,使得图片路径可以自动更新

 以下是实现相册的完整代码:

(注:红色代码为上述代码的添加或修改)

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>相册</title>

    <style>

        .clear_ele::after{

            content: "";  /* 这个伪元素的内容属性必须有 */

            display: block;

            clear: both;

        }

        .box{

            margin-bottom: 20px;

            padding: 0;

        }

        .button{

            background-color: bisque;

            width: 20px;

            float: left;  

            text-align: center;

            margin-right: 10px;

            border-radius: 8px;

            cursor: pointer;  

        }

        .img{

            width: 480px;  

            height: 240px;

            border: 1px bisque solid;

        }

    </style>

</head>

<body>

    <div id="app">

        <h2>基于Vue3实现的相册:展示第{{ img.number }}张相片</h2>       

        <img v-bind:src="img.url"   class="img">

        <ul type="none" class="clear_ele box">

            <li v-for="(val, idx) in 4"  @click="jump(val)" class="button"> {{val}} </li>

        </ul>

        <button @click="prev">上一张</button>     <button @click="next">下一张</button>

    </div>

    <script type="module">

        import { createApp,  ref,  reactive } from './vue.esm-browser.js'

        createApp({

            setup() {

                // 【定义数据】

                const img = reactive(

                    {

                        number: 1,

                        url: "./img_src/logo1.png"

                    }

                )

                // 【定义函数】

                //上一张

                const prev = () => {

                    img.number--

                    if (img.number == 0) {

                        img.number = 4

                    }

                    img.url = `./img_src/logo${img.number}.png`                

                }        

       

                //下一张

                const next = () => {

                    img.number++

                    if (img.number == 5) {

                        img.number = 1

                    }

                    img.url = `./img_src/logo${img.number}.png`

                }

                //跳转

                const jump = (val) => {

                    img.number = val

                    img.url = `./img_src/logo${img.number}.png`

                }

                return {img, prev,next,jump}

            }

        }).mount("#app")

    </script>

</body>

</html>

 还有另一种方法也同样可以实现相册的效果,代码如下:

下述代码的弊端就是比较冗长,相对于上一种方法会消耗更长时间,因为它是把每一张照片的使用结果一一敲出来的,可与上面代码比对

(注:橙色代码为最开始代码的添加或修改)

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>相册</title>

    <style>

        .clear_ele::after{

            content: "";  /* 这个伪元素的内容属性必须有 */

            display: block;

            clear: both;  /* 忽略前面盒子浮动带来的影响,解决父盒高度塌陷问题 */

        }

        .button{

            background-color: bisque;

            width: 20px;

            float: left;  

            text-align: center;

            margin-right: 10px;

            border-radius: 8px;

            cursor: pointer;  

        }

        .img{

            width: 480px;  

            height: 240px;

            border: 1px bisque solid;

        }

        .box{

            margin-bottom: 20px;

            padding: 0;

        }

    </style>

</head>

<body>

    <div id="app">

        <h2>基于Vue3实现的相册:展示第{{img.index}}张相片</h2>       

        <img v-bind:src= "img.url" class="img" alt="图片加载失败">

        <ul type="none" class="box clear_ele">

            <li class="button" v-on:click = "show_1_img">1</li>

            <li class="button" v-on:click = "show_2_img">2</li>

            <li class="button" v-on:click = "show_3_img">3</li>

            <li class="button" v-on:click = "show_4_img">4</li>

        </ul>     

        <button v-on:click = "pre">上一张</button>  

        <button v-on:click = "next">下一张</button>

    </div>

    <script type="module">

        import { createApp, reactive } from './vue.esm-browser.js'

        createApp({

            setup() {

                const img = reactive(

                    {

                     

                      index: 1,

                      url:  "./img_src/logo1.png",  //图片路径

                    }  

                )

                const show_1_img = () => {

                    img.index = 1

                    img.url = `./img_src/logo${img.index}.png`

                    console.log(`用户点击第${img.index}张按钮,显示第${img.index}张照片`);

                }

                const show_2_img = () => {

                    img.index = 2

                    img.url = `./img_src/logo${img.index}.png`

                    console.log(`用户点击第${img.index}张按钮,显示第${img.index}张照片`);

                }

                const show_3_img = () => {

                    img.index = 3

                    img.url = `./img_src/logo${img.index}.png`

                    console.log(`用户点击第${img.index}张按钮,显示第${img.index}张照片`);

                }

                const show_4_img = () => {

                    img.index = 4

                    img.url = `./img_src/logo${img.index}.png`

                    console.log(`用户点击第${img.index}张按钮,显示第${img.index}张照片`);

                }            

                const pre = () => {

                    img.index = img.index - 1

                    if(img.index < 1 ){

                        img.index = 4

                    }

                    // 把图片路径存储在响应式数据里,当这个响应式数据改变时,html的图片路径就会自动改变

                    img.url = `./img_src/logo${img.index}.png`

                    console.log(`用户点击了上一张按钮,显示第${img.index}张照片`);

                }

                const next = () => {

                    img.index = img.index + 1

                    if(img.index > 4 ){  // 图片展示完了,回到第一张

                        img.index = 1

                    }

                    // 把图片路径存储在响应式数据里,当这个响应式数据改变时,html的图片路径就会自动改变

                    img.url = `./img_src/logo${img.index}.png`

                    console.log(`用户点击了下一张按钮,显示第${img.index}张照片`);

                }              

                return { img,

                    show_1_img,

                    show_2_img,

                    show_3_img,

                    show_4_img,

                    pre, next }   //把数据(属性), 函数(方法)暴露出来,供HTML模板调用

            }

        }).mount("#app")

    </script>

</body>

</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/481460.html

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

相关文章

【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-39

文件下载与邀请翻译者 学习英特尔开发手册&#xff0c;最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。 讲解下载英特尔开发手册的文章 翻译英特尔开发手册&#xff0c;会是一件耗时费力的工作。如果有愿意和我一起来做这件事的&#xff0c;那么&#xff…

群控系统服务端开发模式-应用开发-前端短信配置开发

一、添加视图 在根目录下src文件夹下views文件夹下param文件夹下sms文件夹下&#xff0c;新建index.vue&#xff0c;代码如下 <template><div class"app-container"><div class"filter-container" style"float:left;"><el…

极致性能:19个Vue 项目的优化手段

前言 在前端开发领域&#xff0c;Vue.js 广泛应用于各种类型的项目中。然而&#xff0c;随着项目规模的扩大和用户需求的增加&#xff0c;性能优化的重要性愈发凸显。优化不仅可以提升用户体验&#xff0c;还能显著减少资源消耗&#xff0c;提高应用的响应速度和稳定性。 本文…

基于Java Springboot个人记账之财来财往微信小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 微信…

【maven-5】Maven 项目构建的生命周期:深入理解与应用

1. 生命周期是什么 ​在Maven出现之前&#xff0c;项目构建的生命周期就已经存在&#xff0c;软件开发人员每天都在对项目进行清理&#xff0c;编译&#xff0c;测试及部署。虽然大家都在不停地做构建工作&#xff0c;但公司和公司间&#xff0c;项目和项目间&#xff0c;往往…

LLamafactory API部署与使用异步方式 API 调用优化大模型推理效率

文章目录 背景介绍第三方大模型API 介绍LLamafactory 部署API大模型 API 调用工具类项目开源 背景介绍 第三方大模型API 目前&#xff0c;市面上有许多第三方大模型 API 服务提供商&#xff0c;通过 API 接口向用户提供多样化的服务。这些平台不仅能提供更多类别和类型的模型…

【Python网络爬虫笔记】6- 网络爬虫中的Requests库

一、概述 Requests 是一个用 Python 语言编写的、简洁且功能强大的 HTTP 库。它允许开发者方便地发送各种 HTTP 请求&#xff0c;如 GET、POST、PUT、DELETE 等&#xff0c;并且可以轻松地处理请求的响应。这个库在 Python 生态系统中被广泛使用&#xff0c;无论是简单的网页数…

【AI技术赋能有限元分析应用实践】Abaqus有限元分析到深度学习方法应用全过程——汽车刹车片热力耦合分析

目录 一、项目实现介绍**项目背景****项目目标****项目流程概述****技术融合****项目价值** 二、实现流程**Step 1: 分析问题构建方法&#xff0c;寻找主要分析目标&#xff0c;确定初步目标****Step 2: 使用 Abaqus 完成有限元仿真&#xff0c;后处理并保存数据为 odb 格式***…

【人工智能-科普】深度森林:传统机器学习与深度学习的创新结合

文章目录 深度森林:传统机器学习与深度学习的创新结合一、什么是深度森林?二、深度森林的工作原理1. **特征提取和转换**2. **多层级训练**3. **最终分类**三、深度森林的关键组成部分1. **森林层(Forest Layer)**2. **级联结构(Cascade Structure)**3. **特征增强(Feat…

Netty的内存池机制怎样设计的?

大家好&#xff0c;我是锋哥。今天分享关于【Netty的内存池机制怎样设计的&#xff1f;】面试题。希望对大家有帮助&#xff1b; Netty的内存池机制怎样设计的&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Netty 的内存池机制设计是为了提高性能&…

Postman设置接口关联,实现参数化

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 postman设置接口关联 在实际的接口测试中&#xff0c;后一个接口经常需要用到前一个接口返回的结果&#xff0c; 从而让后一个接口能正常执行&#xff0c;这…

七牛云成功保存但无法显示和访问{“error“:“download token not specified“}

在使用七牛云存储图片时&#xff0c;前端通过链接访问图片时遇到错误&#xff1a; {"error":"download token not specified"} 具体表现为&#xff1a; 后端通过 access_key 和 secret_key 生成了上传和下载的 Token。前端将域名与 res.key 拼接后生成图…

《实战OpenCV系列》专栏介绍

简介 本专栏由浅入深&#xff0c;详细介绍了使用OpenCV进行图像/视频处理的各方面知识&#xff0c;包括&#xff1a;图像显示、图像的数学运算、图像的裁剪与拼接、图像的像素操作、几何变换、直方图、图像滤波、色彩空间转换、边缘检测、形态学操作、模板匹配、视频处理、图像…

常用函数的使用错题汇总

#include <iostream> #include <fstream> #include <string>int main() {std::ifstream fin("example.txt"); // 创建 ifstream 对象并打开文件// 检查文件是否成功打开if (!fin) {std::cerr << "Error opening file!" << s…

曲面单值化定理

曲面单值化定理&#xff08;Uniformization Theorem&#xff09;是复分析、几何和拓扑学中的一个重要结果。它为紧致黎曼曲面提供了标准化的几何结构&#xff0c;是研究复几何和代数几何的基础。以下是对曲面单值化定理的详细介绍以及其应用场景。 曲面单值化定理的陈述 基本版…

【初阶数据结构和算法】二叉树顺序结构---堆的定义与实现(附源码)

文章目录 一、堆的定义与结构二、堆的实现1.堆的初始化和销毁堆的初始化堆的销毁 2.向上调整算法和入堆向上调整算法入堆 3.向下调整算法和出堆顶数据向下调整算法出堆 4.堆的有效数据个数和判空堆的有效数据个数堆的判空 5.取堆顶数据 三、堆的源码 一、堆的定义与结构 本篇内…

进程的知识

1. 冯诺依曼体系结构 输入设备&#xff1a;键盘&#xff0c;话筒&#xff0c;网卡&#xff0c;磁盘&#xff08;外存&#xff09; 外设&#xff1a; 输出设备&#xff1a;显示器&#xff0c;磁盘&#xff0c;网卡&#xff0c;打印机 CPU运算器控制器 存储器&#xff1a…

创建HTTPS网站

每天&#xff0c;我们都会听到网络上发生身份盗窃和数据侵权的案例&#xff0c;这导致用户对自己访问的网站更加怀疑。他们开始更加了解自己将个人信息放在哪里以及信任哪些类型的网站。了解如何使网站使用HTTPS变得比以往任何时候都更加重要。 解读缩略词&#xff1a;HTTP与HT…

pytest+allure生成报告显示loading和404

pytestallure执行测试脚本后&#xff0c;通常会在电脑的磁盘上建立一个临时文件夹&#xff0c;里面存放allure测试报告&#xff0c;但是这个测试报告index.html文件单独去打开&#xff0c;却显示loading和404, 这个时候就要用一些办法来解决这个报告显示的问题了。 用命令产生…

如何使用ST7789展现图片?[ESP--4]

本节我们继续ESP和ST 7789的话题&#xff0c;这节课我们来学学如何展示图片,话不多说&#xff0c;先上效果 好&#xff0c;教程开始~前情提要&#xff0c;要看懂这篇&#xff0c;建议搭配楼主的前两期文章 使用ESP32驱动LCD-ST7789屏幕[ESP–2] 加速你的LCD-ST7789屏幕&#xf…