前端原生写自定义旋转变换轮播图

news2024/12/28 20:02:06

html部分:

 

<div class="banner_box">
    <div class="swiperWrapper" v-show="bannerList.length>0">
         <div class="swiper-item" :id="`swiperSlide${index}`" :class="{'active':index==0,'next':index==1,'prev':index==2}" @click="swiperChange(item,index)" v-for="(item,index) in bannerList" :key="index">
             <img class="bus_img" style="width:100%;height:auto;max-width: 1200px;" :src="item.img_url">
			 <div class="txt_box txtBox" :class="{'txtBox_active':item.active}" >
                 <p class="f_t_16 desc" v-html="item.desc"></p>
                 <p class="f_t_20 title">{{ item.title }}</p>
             </div>
          </div>
          <div class="dot">
              <i class="el-icon-arrow-left icon-prev" @click="swiperButtonChange('prev')"></i>
              <div v-for="(item,index) in bannerList" :key="index" :class="{'active':item.active}" @click="swiperChange(item,index)"></div>
              <i class="el-icon-arrow-right icon-next" @click="swiperButtonChange('next')"></i>
           </div>
     </div>
</div>

css部分:

/* 自定义轮播图样式 */
.banner_box{    
    width: 1100px;
    height: 856px;
    margin: 100px auto -70px auto;
    position: relative;
    box-sizing: border-box;
}
.swiper-item{
    transition: bottom 1s ease-in-out,left 1s ease-in-out,width 1s ease-in-out,height 1s ease-in-out,z-index 0s linear 1s;
    cursor: pointer;
    position: absolute;
}
.swiperWrapper{
    height: 100%;
}
.swiperWrapper .active{
    bottom: 380px;
    left: 215px;
    z-index: 10;
    width: 883px;
    height: 464px;
}
.swiperWrapper .next{
    bottom: 170px;
    left: 7%;
    z-index: 20;
    width: 386px;
    height: 257px;
}
.swiperWrapper .prev{
    bottom: 360px;
    left: 0%;
    z-index: 30;
    width: 194px;
    height: 130px;
}
.txtBox{
    bottom: 9%;
    line-height: unset;
    width: 36.9%;
    background-color: #FFFFFF;
    position: absolute;
    right: 5%;
    padding: 20px 24px;
    box-sizing: border-box;
    font-size: 24px;
    color: #004388;
    text-align: left;
}
.txtBox{
    opacity: 0;
    visibility: hidden;
    right: 30px;
    bottom: -90px;
    width: 575px;
}
.txtBox_active{
    visibility: visible;
    opacity: 1;
    transition: all .6s ease-in-out 1s;
}
.txtBox .title{
    font-size: 20px;
    font-family: theSans;
    font-weight: 500;
    color: #333333;
 }
.txtBox .desc{
    font-size: 16px;
    font-family: SourceHanSansSC-Medium, SourceHanSansSC;
    font-weight: 500;
    color: #004388;
    margin-bottom: 39px;
 }
.newPointer{
    transform: translate(160px,315px);
}
.dot{
    width: 120px;
    height: 20px;
    position: absolute;
    left: 44%;
    bottom: 220px;
    display: flex;
    justify-content: space-between;
    align-items: center;
}
.dot>div{
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background-color: #004387;
    transition: background-color 0.3s ease-in-out;
    cursor: pointer;
}
.dot>div:hover{
    background-color: #02A6E3;
    transition: background-color 0.3s ease-in-out;
}
.dot .active{
    width: 10px;
    height: 10px;
    background-color: #02A6E3;
    transition: background-color 0.3s ease-in-out;
}

.dot .icon-prev,.dot .icon-next{
    font-weight: bold;
    color: #02A6E3;
    font-size: 18px;
    cursor: pointer;
}

js部分:

data定义bannerList:

// 轮播图列表
bannerList: []

获取轮播图数据:

this.bannerList = res.data.chart;
this.bannerList.forEach((item,index)=>{
    item.active = index == 0;
});

轮播图方法:

/**
 * 轮播图点击
 */
swiperChange(item,index){
   let activeIndex = this.bannerList.findIndex(item => item.active == true);
   // 如果选中的是当前active的无效果
   if (index == activeIndex) return false;
   let swiper0 = document.getElementById(`swiperSlide0`); 
   let swiper1 = document.getElementById(`swiperSlide1`); 
   let swiper2 = document.getElementById(`swiperSlide2`); 
   let swiper = document.getElementById(`swiperSlide${index}`);
   let classList = [...swiper.classList];
   this.bannerList.map(item=>{
       return item.active = false;
   });

   if (index == 0 && classList.includes('next')) {
       swiper0.classList.remove('next');
       swiper0.classList.add('active');
                
       swiper1.classList.remove('prev');
       swiper1.classList.add('next');
                
       swiper2.classList.remove('active');
       swiper2.classList.add('prev');

       this.bannerList[0].active = true;
       this.$set(this.bannerList,0,{ ...this.bannerList[0], active: true });
       this.$set(this.bannerList,1,{ ...this.bannerList[1], active: false });
       this.$set(this.bannerList,2,{ ...this.bannerList[2], active: false });
   } else if (index == 0 && classList.includes('prev')) {
       swiper0.classList.remove('prev');
       swiper0.classList.add('active');
                
       swiper1.classList.remove('active');
       swiper1.classList.add('next');
                
       swiper2.classList.remove('next');
       swiper2.classList.add('prev');

       this.bannerList[0].active = true;
       this.$set(this.bannerList,0,{ ...this.bannerList[0], active: true });
       this.$set(this.bannerList,1,{ ...this.bannerList[1], active: false });
       this.$set(this.bannerList,2,{ ...this.bannerList[2], active: false });
   } else if (index == 1 && classList.includes('next')) {
       swiper0.classList.remove('active');
       swiper0.classList.add('prev');
                
       swiper1.classList.remove('next');
       swiper1.classList.add('active');
                
       swiper2.classList.remove('prev');
       swiper2.classList.add('next');
                    
       this.bannerList[1].active = true;
       this.$set(this.bannerList,0,{ ...this.bannerList[0], active: false });
       this.$set(this.bannerList,1,{ ...this.bannerList[1], active: true });
       this.$set(this.bannerList,2,{ ...this.bannerList[2], active: false });
   } else if (index == 1 && classList.includes('prev')) {
       swiper0.classList.remove('next');
       swiper0.classList.add('prev');
                
       swiper1.classList.remove('prev');
       swiper1.classList.add('active');
                
       swiper2.classList.remove('active');
       swiper2.classList.add('next');
                
       this.bannerList[1].active = true;
       this.$set(this.bannerList,0,{ ...this.bannerList[0], active: false });
       this.$set(this.bannerList,1,{ ...this.bannerList[1], active: true });
       this.$set(this.bannerList,2,{ ...this.bannerList[2], active: false });
   } else if (index == 2 && classList.includes('next')) {
       swiper0.classList.remove('prev');
       swiper0.classList.add('next');
                
       swiper1.classList.remove('active');
       swiper1.classList.add('prev');
                
       swiper2.classList.remove('next');
       swiper2.classList.add('active');
                
       this.bannerList[2].active = true;
       this.$set(this.bannerList,0,{ ...this.bannerList[0], active: false });
       this.$set(this.bannerList,1,{ ...this.bannerList[1], active: false });
       this.$set(this.bannerList,2,{ ...this.bannerList[2], active: true });
   } else if (index == 2 && classList.includes('prev')) {
       swiper0.classList.remove('active');
       swiper0.classList.add('next');
                
       swiper1.classList.remove('next');
       swiper1.classList.add('prev');
                    
       swiper2.classList.remove('prev');
       swiper2.classList.add('active');
                
       this.bannerList[2].active = true;
       this.$set(this.bannerList,0,{ ...this.bannerList[0], active: false });
       this.$set(this.bannerList,1,{ ...this.bannerList[1], active: false });
       this.$set(this.bannerList,2,{ ...this.bannerList[2], active: true });
   }
},
/**
 * 前进和后退点击
 */
swiperButtonChange(type){
   let swiper0 = document.getElementById(`swiperSlide0`); 
   let swiper1 = document.getElementById(`swiperSlide1`); 
   let swiper2 = document.getElementById(`swiperSlide2`); 
   let classList = [...swiper0.classList];
   this.bannerList.map(item=>{
       return item.active = false;
   });
   // 以第一张图片为基准判断
   if (type == 'prev') {
      if (classList.includes('active')) {
         swiper0.classList.remove('active');
         swiper0.classList.add('next');
                    
         swiper1.classList.remove('next');
         swiper1.classList.add('prev');
                    
         swiper2.classList.remove('prev');
         swiper2.classList.add('active');
                
         this.bannerList[2].active = true;
         this.$set(this.bannerList,0,{ ...this.bannerList[0], active: false });
         this.$set(this.bannerList,1,{ ...this.bannerList[1], active: false });
         this.$set(this.bannerList,2,{ ...this.bannerList[2], active: true });
      } else if (classList.includes('next')) {
         swiper0.classList.remove('next');
         swiper0.classList.add('prev');
                        
         swiper1.classList.remove('prev');
         swiper1.classList.add('active');
                    
         swiper2.classList.remove('active');
         swiper2.classList.add('next');
                
         this.bannerList[1].active = true;
         this.$set(this.bannerList,0,{ ...this.bannerList[0], active: false });
         this.$set(this.bannerList,1,{ ...this.bannerList[1], active: true });
         this.$set(this.bannerList,2,{ ...this.bannerList[2], active: false });
      } else if (classList.includes('prev')) {
         swiper0.classList.remove('prev');
         swiper0.classList.add('active');
                        
         swiper1.classList.remove('active');
         swiper1.classList.add('next');
                            
         swiper2.classList.remove('next');
         swiper2.classList.add('prev');
                
         this.bannerList[0].active = true;
         this.$set(this.bannerList,0,{ ...this.bannerList[0], active: true });
         this.$set(this.bannerList,1,{ ...this.bannerList[1], active: false });
         this.$set(this.bannerList,2,{ ...this.bannerList[2], active: false });
      }
   } else if (type == 'next') {
      if (classList.includes('active')) {
         swiper0.classList.remove('active');
         swiper0.classList.add('prev');
                    
         swiper1.classList.remove('next');
         swiper1.classList.add('active');
                    
         swiper2.classList.remove('prev');
         swiper2.classList.add('next');
                
         this.bannerList[1].active = true;
         this.$set(this.bannerList,0,{ ...this.bannerList[0], active: false });
         this.$set(this.bannerList,1,{ ...this.bannerList[1], active: true });
         this.$set(this.bannerList,2,{ ...this.bannerList[2], active: false });
      } else if (classList.includes('next')) {
         swiper0.classList.remove('next');
         swiper0.classList.add('active');
                    
         swiper1.classList.remove('prev');
         swiper1.classList.add('next');
                    
         swiper2.classList.remove('active');
         swiper2.classList.add('prev');
                
         this.bannerList[0].active = true;
         this.$set(this.bannerList,0,{ ...this.bannerList[0], active: true });
         this.$set(this.bannerList,1,{ ...this.bannerList[1], active: false });
         this.$set(this.bannerList,2,{ ...this.bannerList[2], active: false });
      } else if (classList.includes('prev')) {
         swiper0.classList.remove('prev');
         swiper0.classList.add('next');
                    
         swiper1.classList.remove('active');
         swiper1.classList.add('prev');
                    
         swiper2.classList.remove('next');
         swiper2.classList.add('active');
                
         this.bannerList[2].active = true;
         this.$set(this.bannerList,0,{ ...this.bannerList[0], active: false });
         this.$set(this.bannerList,1,{ ...this.bannerList[1], active: false });
         this.$set(this.bannerList,2,{ ...this.bannerList[2], active: true });
       }
   }
}

 轮播图数据结构:

[
    {
        "id": 44,
        "title": "李刚,班组长",
        "img_url": "http://cdn.juplus.cn/FhR4NNaOEHIsn2Uz-KePR3I1A4No",
        "desc": "“在科德宝工作意味着拥有自由并设定可持续发展足迹。”",
        "subtitle": null,
        "video_url": null,
        "subtitle1": null,
        "type": 3,
        "create_time": "2023-08-11 09:14:59",
        "sort": 1,
        "active": true
    },
    {
        "id": 43,
        "title": "利里奥(Lirio),销售主管",
        "img_url": "http://cdn.juplus.cn/FhLtUKcYxOLwQrabkylp5jV2RGap",
        "desc": "“我为在这里工作感到自豪,因为我在职业生涯中有很多发展机会。”",
        "subtitle": null,
        "video_url": null,
        "subtitle1": null,
        "type": 3,
        "create_time": "2023-08-11 09:14:20",
        "sort": 2,
        "active": false
    },
    {
        "id": 56,
        "title": "达伦(Darren),销售主管",
        "img_url": "http://cdn.juplus.cn/Fls4sM6DPjgV0gxbHc59torADFZD",
        "desc": "“科德宝一直求才若渴,我们理想的人才求知欲强,积极主动,希望获得成长和发展个人技能。”",
        "subtitle": null,
        "video_url": null,
        "subtitle1": null,
        "type": 3,
        "create_time": "2023-08-17 13:31:55",
        "sort": 3,
        "active": false
    }
]

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

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

相关文章

耗资170亿美元?三星电子在得克萨斯州建设新的半导体工厂

据报道&#xff0c;三星电子在得克萨斯州泰勒市建设的新的半导体工厂预计将于2024年下半年投入运营。这座工厂将成为三星电子在美国的第二座芯片代工厂&#xff0c;与位于得克萨斯州奥斯汀市的第一座工厂相距不远。 此次投资将耗资约170亿美元&#xff0c;显示了三星电子在半导…

Linux驱动之利用ioctl函数和字符设备驱动对象分布注册点亮小灯

实验结果 头文件代码 #ifndef __HEAD_H__ #define __HEAD_H__ typedef struct{unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int ODR; }gpio_t; #define PHY_LED1_ADDR 0X50006000 #define PHY_LED2_ADDR 0X5…

激活函数总结(十一):激活函数补充(Absolute、Bipolar、Bipolar Sigmoid)

激活函数总结&#xff08;十一&#xff09;&#xff1a;激活函数补充 1 引言2 激活函数2.1 Absolute激活函数2.2 Bipolar激活函数2.3 Bipolar Sigmoid激活函数 3. 总结 1 引言 在前面的文章中已经介绍了介绍了一系列激活函数 (Sigmoid、Tanh、ReLU、Leaky ReLU、PReLU、Swish、…

多维时序 | MATLAB实现PSO-CNN-BiLSTM多变量时间序列预测

多维时序 | MATLAB实现PSO-CNN-BiLSTM多变量时间序列预测 目录 多维时序 | MATLAB实现PSO-CNN-BiLSTM多变量时间序列预测基本介绍模型特点程序设计参考资料 基本介绍 本次运行测试环境MATLAB2021b&#xff0c;MATLAB实现PSO-CNN-BiLSTM多变量时间序列预测。代码说明&#xff1a…

掌握渗透测试,从Web漏洞靶场搭建开始

渗透测试切忌纸上谈兵&#xff0c;学习渗透测试知识的过程中&#xff0c;我们通常需要一个包含漏洞的测试环境来进行训练。而在非授权情况下&#xff0c;对于网站进行渗透测试攻击&#xff0c;是触及法律法规的&#xff0c;所以我们常常需要自己搭建一个漏洞靶场&#xff0c;避…

【CUDA】学习记录(4)-线程束的执行

线程模型 block&#xff1a;同一个block内共享内存&#xff0c;同一block中的thread可以彼此进行通信。 block&#xff1a;block-local synchronization。同一个块内的线程可以同步。 线程&#xff0c;可以根据blockIdx和threadIdx唯一的指定。 作者&#xff1a;不会code的程序…

02-前端基础第二天-HTML5

01-HTML标签&#xff08;下&#xff09;导读 目标&#xff1a; 能够书写表格能够写出无序列表能够写出3~4个常用input表单类型能够写出下拉列表表单能够使用表单元素实现注册页面能够独立查阅W3C文档 目录&#xff1a; 表格标签列表标签表单标签综合案例查阅文档 02-表格标…

pygame第6课——贪吃蛇小游戏

今天我们开始Pygame的第六课&#xff0c;前几节课的内容在这里【点我】&#xff0c;欢迎大家前去考古&#xff1a; 今天我们一起来学习制作一个小游戏【贪吃蛇】&#xff0c;这是一个非常经典的小游戏&#xff0c;那么我们一起开始吧 1、游戏准备工作 import pygame, random,o…

常用激活函数及其优缺点的总结与比较

文章目录 1、sigmoid2、Tanh3、ReLU4、Leaky ReLU5、Softmax 1、sigmoid 优点&#xff1a;将很大范围内的输入特征值压缩到0~1之间&#xff0c;适用于将预测概率作为输出的模型&#xff1b; 缺点&#xff1a; 1&#xff09;当输入非常大或非常小的时候&#xff0c;容易导致梯度…

Hadoop的DataNode无法启动的解决方案

Hadoop重启一次&#xff0c;里面的数据需要重新导入&#xff0c;发现无法导入数据&#xff0c;查看jps发现是DataNode没有启动&#xff0c;重新启动发现也无法启动&#xff0c;原因是前面重新启动NameNode&#xff0c;里面的文件格式化一次&#xff0c;DataNode的文件不一致&am…

jmeter监听器大家都会用,但我这个妙招能让你提早一小时下班!

使用过 jmeter 的同学&#xff0c;应该都会使用监听器&#xff0c;在每个监听器中&#xff0c;都会有一个“所有数据写入一个文件”的功能&#xff0c;那这个功能应该怎么用呢&#xff1f;今天&#xff0c;我们就来讲讲这个功能的使用。 几乎所有的监听器都有这样一个功能。 那…

LTD239次升级 | 可答题获取优惠券 • 官微中心菜单可折叠• 分享页表单客户可显示分享来源

1、新增答题获取优惠券应用 2、官微中心支持左侧菜单折叠、批量上传可设置排序值 3、分享页表单客户可显示分享来源 4、iOS App支持设置名片卡片图片 5、新增一款产品列表展示模块 01 网站应用 新增答题获取优惠券应用 本次升级中&#xff0c;新增了一款答题获取优惠券的小程序…

MAC钓鱼并Root权限上线CS并权限维持,以及所有的坑如何解决

本文转载于&#xff1a;https://www.freebuf.com/articles/web/350592.html 作者&#xff1a;文鸯涂鸦智能安全实验室 制作MAC 一、下载工具 首先从github上下载CrossC2。链接&#xff1a;https://github.com/gloxec/CrossC2/releases/tag/v3.1.0。 根据你CS客户端的操作系统选…

基于 BEM 规范实现简单的 全局 scss

前言 BEM 是 css 常用的命名规范BEM &#xff1a;block(块)、 element(元素)、 modify(修饰符)以 namespace-block__element、namespace-block---modify 格式为例&#xff08;namespace 一般是 ui 库的前缀&#xff0c;如 element-ui 的 el 前缀&#xff09;scss 的使用请参考…

计算机竞赛 Yolov安全帽佩戴检测 危险区域进入检测 - 深度学习 opencv

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; Yolov安全帽佩戴检测 危险区域进入检测 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 该项目较为新颖&am…

驱动 day4

通过字符设备驱动分步注册方式编写LED灯的驱动&#xff0c;应用程序使用ioctl函数编写硬件控制 mycdev.c #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/cdev.h> #include <linux/device.h> #inc…

【中文竞技场】大模型深度体验与测评

简介&#xff1a;本次&#xff0c;我深入体验了中文竞技场中的大语言模型&#xff0c;尝试了写作创作、代码编写和中文游戏三个领域&#xff0c;以下是我详细的评测报告。 一、开篇 在科技日新月异的今天&#xff0c;中文竞技场提供了一系列大模型供我们体验。涉及的领域包括写…

HLS实现FIR低通滤波器+System Generator仿真

硬件&#xff1a;ZYNQ7010 软件&#xff1a;MATLAB 2019b、Vivado 2017.4、HLS 2017.4、System Generator 2017.4 1、MATLAB设计低通滤波器 FPGA系统时钟 50MHz&#xff0c;也是采样频率。用 MATLAB 生成 1MHz 和 10MHz 的正弦波叠加的信号&#xff0c;并量化为 14bit 整数。把…

也许你正处于《孤注一掷》中的“团队”,要留心了

看完这部电影&#xff0c;心情久久不能平静&#xff0c;想了很多&#xff0c;倒不是担心自己哪天也成为“消失的yaozi”&#xff0c;而是在想&#xff0c;我们每天所赖以生存的工作&#xff0c;跟电影里他们的工作比&#xff0c;差别在哪里呢&#xff1f; 目录 1. 产品的本质…

【UniApp开发小程序】商品详情展示+评论、评论展示、评论点赞+商品收藏【后端基于若依管理系统开发】

文章目录 界面效果界面实现工具js页面日期格式化 后端收藏ControllerServicemapper 评论ControllerServiceMapper 商品Controller 阅读Service 界面效果 【说明】 界面中商品的图片来源于闲鱼&#xff0c;若侵权请联系删除 【商品详情】 【评论】 界面实现 工具js 该工…