当前位置: 首页 > news >正文

模仿elementUI 中Carousel 走马灯卡片模式 type=“card“ 的自定义轮播组件 图片之间有宽度

模仿elementUI 中Carousel 走马灯卡片模式 type="card" 的自定义轮播组件 图片之间有宽度


elementUI 自带的样式不满足条件 尝试很多方法 无法精准控制样式 于是自己写一套组件使用

效果图如下:
在这里插入图片描述
html代码如下:(代码中的图片自己准备哈)

<div class="core-box"><div class="swiper-box"><!-- 左侧按钮 --><div class="prev-btn" v-show="swiperIndex!=-1" @click="changeSwiper(-1)"><img src="@/assets/image/l-arr.png" alt=""></div><!-- 右侧按钮 --><div class="next-btn" v-show="swiperIndex!=swiperList.length-2" @click="changeSwiper(1)"><img src="@/assets/image/r-arr.png" alt=""></div><!-- 中间圆点 --><div class="dot-box"><div class="dot" :class="[index==(swiperIndex+1)?'active':'']" v-for="(item,index) in swiperList.length" :key="index"@click="dotFun(index)"></div></div><!-- 轮播图 --><div class="swiper-list" :style="{width:((swiperList.length-1)*100+'%'), left: swiperLeft, transition: transition}"><div class="swiper-item" v-for="(item, index) in swiperList" :key="index":style="{'background-image': `url(${item.banner})`}"></div></div></div></div>

css代码如下:

.core-box{margin-top: 30px;padding-bottom: 40px;.swiper-box{height: 770px;position: relative;// overflow: hidden;.swiper-list{display: flex;width: 400%;height: 770px;overflow-x: auto;position: absolute;top: 0;left: -25%;transition: all 0.3s;padding: 0 20px;.swiper-item{display: flex;align-content: center;flex-wrap: wrap;width: 100%;height: 770px;background: url('@/assets/bann2.jpeg') no-repeat center center;background-size: 100% 100%;border-radius: 10px;margin-right: 20px;&:last-child{margin-right: 0;}&.active{opacity: 1;}}}.prev-btn, .next-btn{width: 40px;height: 40px;border-radius: 4px;position: absolute;left: 20px;top: 50%;transform: translateY(-50%);z-index: 9;cursor: pointer;background-color: #fff;display: flex;align-items: center;justify-content: center;img{width: 25px;height:25px;}}.next-btn{left: unset;right: 20px;}.dot-box{height: 40px;position: absolute;left: 50%;bottom: -40px;transform: translateX(-50%);z-index: 9;cursor: pointer;display: flex;align-items: center;justify-content: center;.dot{width: 12px;height: 12px;margin: 0 4px;background-color: #000;border-radius: 50%;opacity: 0.4;}.dot.active{background-color: #000;opacity: 1;}}}
}

js代码如下:

<script setup>
import { ref  } from 'vue';
// 轮播的列表
let swiperList =ref([{ banner: '../src/assets/9.jpg' },{ banner: '../src/assets/1.png' },{ banner: '../src/assets/11.png'},{ banner: '../src/assets/22.jpg' },{ banner: '../src/assets/22.jpg' },
])
let swiperIndex =ref(0)//初始滚动下标
let transition = ref('all 0.3s')
// 计算偏移量 中间显示完全 两边的图片占比大小
let Px  = (((swiperList.value.length-1)/swiperList.value.length)-(1-((swiperList.value.length-1)/swiperList.value.length))/2)*100
//每一张图片占比大小
let PxL  = ((swiperList.value.length-1)/swiperList.value.length)*100  let swiperLeft = ref(`-${Px}%`)//初始移动位置
// 点击左右切换按钮
function changeSwiper(type){// 点击右侧if (type === 1) {swiperIndex.value++// 判断是否是最后一个图片if (swiperIndex.value == swiperList.value.length-2) {swiperLeft.value = -(swiperList.value.length-2)*100+'%'}else{swiperLeft.value = -(PxL*swiperIndex.value*1+Px)+'%'}}else{swiperIndex.value--//判断是否是第一张图片if (swiperIndex.value == -1) {swiperLeft.value = '0%'}else{swiperLeft.value = -(PxL*swiperIndex.value*1+Px)+'%'}}
}
// 点击圆滑点切换图片
function dotFun(val){swiperIndex.value = val-1if (swiperIndex.value == -1) {swiperLeft.value = '0%'}else if(swiperIndex.value == swiperList.value.length-2){swiperLeft.value = -(swiperList.value.length-2)*100+'%'}else{swiperLeft.value = -(PxL*swiperIndex.value*1+Px)+'%'}
}
</script>

ok 这些就可以实现想要的效果 如果想封装组件自己完成哈

http://www.dtcms.com/a/597227.html

相关文章:

  • 公司网站建设哪家正规wordpress 按别名
  • 网站建设安全架构网络购物平台哪个最好
  • 2048——逻辑思维与矩阵合并算法
  • Qt:判断一个sql语句是否是select语句
  • 【题解】洛谷 P2470 [SCOI2007] 压缩
  • Java1111 实现一个方法,获取属性值 返回name
  • 存储核心:EXT文件系统
  • 品牌型网站的特点站长工具seo查询5g5g
  • 量子信息中的QASM
  • 阿里巴巴做网站费用网站功能价格表
  • MongoDB 删除数据库
  • android studio 在终端指定 jdk 1.8 打包 release~ MacOS版
  • 【STM32】HDC2080温湿度计驱动
  • Highcharts 在 AMD 与 CommonJS 环境下的安装与配置指南
  • 阿里云编辑建设好的网站济南网络优化厂家
  • 如何给 MacOS 更新到指定版本系统
  • jEasyUI 合并单元格详解
  • AJAX学习 ---- axios体验
  • 电子商务网站开发基本流程建立链接
  • MySQL第五次作业(触发器,存储过程)
  • HORIBA MEXA-324M:双组分汽车尾气测量仪技术说明
  • C++进阶:(八)基于红黑树泛型封装实现 map 与 set 容器
  • 网站制作资质wordpress用户名密码注册
  • Redis(1)
  • 《中医基础理论》- 2.哲学基础之藏象学说-心系统详解
  • 智慧养老如何托起“有温度的银发未来”?
  • 做网站编程在程序网站被别人做镜像
  • win2008 r2内存爆满导致前端程序崩溃
  • 【OpenCV + VS】 OpenCV图像色彩空间转换: 从BGR到HSV和灰度
  • 郓城住房和城乡建设局网站淘宝关键词优化怎么弄