Vue3封装一个轮播图组件

先看效果
在这里插入图片描述

编写组件代码 CarouselChart.vue

<template><div class='img-box'><el-button @click='previousImages' v-if='props.showBtn'></el-button><div class='img'><div style='display: flex;gap: 20px' id='move'><imgclass='img-item' v-for='(item) in props.imgList':key='item.src':src='item.src'alt='' /></div></div><el-button @click='nextImages' v-if='props.showBtn'></el-button><div class='spots' v-if='props.showSpot'><divclass='spot'v-for='(item,index) in props.imgList.length / 2':key='index':class="{'active':index*2 === currentIndex}"@click='setCurIndex(index)'></div></div></div>
</template><script setup>
import { defineProps, defineEmits } from 'vue'const emit = defineEmits(['handlePrev', 'handleNext'])
const props = defineProps({// 图片imgList: {type: Object,required: true,},// 是否显示左右切换按钮showBtn: {type: Boolean,default: true,},// 是否显示小圆点showSpot: {type: Boolean,default: true,},
})const currentIndex = ref(0)const updateVisibleImages = () => {const imgDom = document.querySelector('#move')imgDom.style.transform = `translateX(-${((currentIndex.value * 440) + ((currentIndex.value) * 20))}px)`imgDom.style.transition = `all 0.5s`
}const nextImages = () => {if (currentIndex.value + 2 >= props.imgList.length) returncurrentIndex.value += 2updateVisibleImages()emit('handleNext')
}const previousImages = () => {if (currentIndex.value <= 0) returncurrentIndex.value -= 2updateVisibleImages()emit('handlePrev')
}const setCurIndex = (index) => {currentIndex.value = index * 2updateVisibleImages()
}</script><style scoped lang='scss'>
.img-box {display: flex;align-items: center;justify-content: center;gap: 20px;width: 100%;height: 100%;position: relative;.img {width: 900px;overflow: hidden;transition: all 0.5s;.img-item {width: 440px;img {width: 100%;}}}.spots {position: absolute;left: 50%;margin-top: 20%;transform: translateX(-50%);display: flex;gap: 20px;align-items: center;justify-content: center;.spot {width: 10px;height: 10px;border-radius: 5px;background-color: #1a60ea;transition: all 0.5s;cursor: pointer;&:hover {transform: scale(1.5);}}.active {background-color: #ea1ccc;transform: scale(2);transition: all 0.5s;}}
}
</style>

使用这个组件

<template><div class='h-full w-full flex align-center justify-center'><CarouselChart:img-list='imgList'@handlePrev='handlePrev'@handleNext='handleNext'/></div>
</template>
<script setup>
import { reactive } from 'vue'
import { ElMessage } from 'element-plus'
import img1 from '@/assets/lunbo/01.jpg'
import img2 from '@/assets/lunbo/02.jpg'
import img3 from '@/assets/lunbo/03.jpg'
import img4 from '@/assets/lunbo/04.jpg'
import img5 from '@/assets/lunbo/05.jpg'
import img6 from '@/assets/lunbo/06.jpg'
import img7 from '@/assets/lunbo/07.jpg'
import img8 from '@/assets/lunbo/08.jpg'
import img9 from '@/assets/lunbo/09.jpg'
import img10 from '@/assets/lunbo/10.jpg'let imgList = reactive([{ src: img1 },{ src: img2 },{ src: img3 },{ src: img4 },{ src: img5 },{ src: img6 },{ src: img7 },{ src: img8 },{ src: img9 },{ src: img10 },
])function handleNext() {ElMessage.warning('下一张')
}function handlePrev() {ElMessage.success('上一张')
}</script>

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

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

相关文章

TrustZone之安全虚拟化

在Armv7-A首次引入虚拟化时,它仅在非安全状态中添加。在Armv8.3之前,Armv8也是如此,如下图所示: 如前所述在切换安全状态时,EL3用于托管固件和安全监视器。安全EL0/1托管受信任的执行环境(TEE),由受信任的服务和内核组成。 在安全状态下,没有对多个虚拟机的需…

云计算 云原生

一、引言 云计算需要终端把信息上传到服务器&#xff0c;服务器处理后再返回给终端。在之前人手一台手机的情况下&#xff0c;云计算还是能handle得过来的。但是随着物联网的发展&#xff0c;什么东西都要联网&#xff0c;那数据可就多了去了&#xff0c;服务器处理不过来&…

【docker】常用命令

启动docker服务 systemctl start docker 停止docker服务 systemctl stop docker 重启docker服务 systemctl restart docker 查看docker服务状态 systemctl status docker 设置开机启动docker服务 systemctl enable docker 设置关闭开机启动docker服务 systemctl disable …

设计模式——建造者模式(创建型)

引言 生成器模式是一种创建型设计模式&#xff0c; 使你能够分步骤创建复杂对象。 该模式允许你使用相同的创建代码生成不同类型和形式的对象。 问题 假设有这样一个复杂对象&#xff0c; 在对其进行构造时需要对诸多成员变量和嵌套对象进行繁复的初始化工作。 这些初始化代码…

修改汽车的控制系统实现自动驾驶,基于一个开源的汽车驾驶辅助系统实现全自动驾驶

修改汽车的控制系统实现自动驾驶,基于一个开源的汽车驾驶辅助系统实现全自动驾驶。 自动驾驶汽车依靠人工智能、视觉计算、雷达、监控装置和全球定位系统协同合作,让电脑可以在没有任何人类主动的操作下,自动安全地操作机动车辆。 演示视频: Openpilot :一个开源的汽车驾…

Mac安装DevEco Studio

下载 首先进入鸿蒙开发者官网&#xff0c;顶部导航栏选择开发->DevEco Studio 根据操作系统下载不同版本&#xff0c;其中Mac(X86)为英特尔芯片&#xff0c;Mac(ARM)为M芯片。 安装 下载完毕后&#xff0c;开始安装。 点击Agree 首次使用&#xff0c;请选择Do not impor…

windows10安装MongoDB的入门简易教程【学习自用】

一、下载安装包 下载地址 https://www.mongodb.com/try/download/community 因为我是在windows上安装&#xff0c;所以下载windows版本的压缩包格式 二、下载后解压到要安装的目录里去 我这里在D盘装&#xff0c;所以就解压到D盘中我自己建的的mongoDB文件夹中。 三、在解…

青少年CTF-Misc(持续更新中)

FLAG&#xff1a;当觉得自己很菜的时候&#xff0c;就静下心来学习 专研方向:Web安全&#xff0c;CTF 每日emo&#xff1a;听一千遍反方向的钟&#xff0c;我们能回到过去吗&#xff1f; 1.StegoTXT&#xff1a; 解压缩文件。发现字母中存在覆盖。使用0宽隐写在线解密得到flag…

打包less

接HTML和css之后对less进行打包 1.在之前的文件夹里的src文件夹创建一个less文件 2.打开webpack——>中文文档——>Loader——>less—loader 3.复制下图代码到终端 4.复制下图内容到webpack.config.js脚本 5.在src里的js文件年引入less文件 6.在终端运行 npm run te…

通用的AGI 安全风险

传统安全风险 平台基础设施安全风险 模型与数据层安全风险 应用层安全风险 平台基础设施安全风险 &#xff08;1&#xff09;物理攻击&#xff1a;机房管控不到位 &#xff08;2&#xff09;网络攻击 &#xff08;3&#xff09;计算环境&#xff1a;自身安全漏洞&#xf…

新能源汽车生产污废水需要哪些工艺及设备

新能源汽车的快速发展带来了许多环境问题&#xff0c;其中之一就是生产过程中产生的污废水。由于新能源汽车的生产过程与传统汽车有所不同&#xff0c;因此需要采用特定的工艺和设备来处理和处理这些废水。 首先&#xff0c;新能源汽车生产过程中产生的污废水主要来自洗涤和冷却…

appium安卓app自动化,遇到搜索框无搜索按钮元素时无法搜索的解决方案

如XX头条&#xff0c;搜索框后面有“搜索”按钮&#xff0c;这样实现搜索操作较为方便。 但有些app没有设置该搜索按钮&#xff0c;初学者就要花点时间去学习怎么实现该功能了&#xff0c;如下图。 这时候如果定位搜索框&#xff0c;再点击操作&#xff0c;再输入文本后&#x…