vue3使用swiper6.7.0写轮播图,按钮在轮播图外面

news2024/11/18 17:45:22

应用场景:需要在header区域,写24小时天气预测轮播,按钮在轮播图外面,默认隐藏左侧按钮,当点击右侧按钮后,左侧按钮显示,当点击到最后一个轮播图的显示时,隐藏右侧按钮。通过获取索引,监听索引的方法实现。

项目里以前使用的是swiper6.7,所以这次写这个轮播还用了6版本,没有升级。

效果:

<template>
  <div class="swiper-container">
    <div class="swiper-wrapper">
      <div class="swiper-slide swiper-no-swiping" v-for="(item, index) in hoursData" :key="item">
        <span class="icon">
          <i class="iconfont iconshijian" style="font-size: 14px;color: #5A5A68;"></i>
        </span>
        <span class="time">
          {{ item.weatherTime }}
        </span>
        <span class="day">
          {{ item.weather }}
        </span>
        <span class="temp">
          {{ item.outTemp }}℃
        </span>
      </div>
    </div>
    <!-- 前进后退按钮 -->
    <span class="swiper-button-prev" id="prev" v-show="showPrevButton" @click="handlePrevClick"></span>
    <span class="swiper-button-next" id="next" v-show="showNextButton" @click="handleNextClick"></span>
  </div>
</template>
<script>
import { Swiper, Navigation } from "swiper";
import "swiper/swiper-bundle.css";
import { onMounted, reactive, nextTick, toRefs, ref, watch } from "vue";
import { getNowAnd24HoursData } from "@/api/RunMonitor/GroupMonitorSystem"
import { getRefreshInterval } from '@/api/sourceMonitor/home.ts';

Swiper.use([Navigation]);

export default {
  props: {
    hoursData: {
      type: Array,
      default: [],
    },
    nextHourIndex: {
      type: Number,
      default: 0,
    }
  },

  setup(props) {

    const state = reactive({
      // data: [
      //   { weatherTime: '00:00', weather: '晴', outTemp: "20.3℃" },
      //   { weatherTime: '01:00', weather: '多云', outTemp: "20.3℃" },
      //   { weatherTime: '02:00', weather: '晴', outTemp: "20.3℃" },
      // ],
      showPrevButton: false, // 控制左按钮的显示和隐藏
      showNextButton: true, // 控制右按钮的显示和隐藏
      index: 0
    });

    let GalleryTop;

    const initGalleryTop = () => {
      GalleryTop = new Swiper(".swiper-container", {
        navigation: {
          nextEl: "#next",
          prevEl: "#prev",
        },
        loop: false, // 禁止循环
        noSwiping: true, // 禁止滑动
        spaceBetween: 1, // 间距
        slidesPerView: 3, // 显示数量
        freeMode: false, // 不开启自由模式
        watchSlidesVisibility: true, // 监视slide的可见性
        watchSlidesProgress: true, // 监视slide的进度
        initialSlide: props.nextHourIndex, // 初始slide的索引值
        virtual: true, //开启虚拟slides
        centeredSlides: false, // 不居中显示slides
      });
    };

    const handlePrevClick = (() => {
      return () => {
        // 在此处处理右按钮点击事件
        // console.log("点击左按钮,当前item:", props.hoursData[state.index], "当前index:", state.index);
        state.index--; // 每次点击右按钮,增加index的值
      };
    })();

    const handleNextClick = (() => {
      return () => {
        // 在此处处理右按钮点击事件
        // console.log("点击右按钮,当前item:", props.hoursData[state.index], "当前index:", state.index);
        state.index++; // 每次点击右按钮,增加index的值
      };
    })();

    watch([() => props.hoursData, () => props.nextHourIndex], () => {
      if (props.hoursData || props.nextHourIndex) {
        nextTick(() => {
          initGalleryTop();
        })
      }
      if (props.hoursData.length < 1) {
        state.showNextButton = false; // 隐藏右按钮
      }
    }, { deep: true })

    watch(() => state.index, (n) => {

      if (n > 0) {
        state.showPrevButton = true; // 显示左按钮
      } else if (n === 0) {
        state.showPrevButton = false; // 隐藏左按钮 
      }

      if (n === props.hoursData.length - 3) {
        state.showNextButton = false; // 隐藏右按钮
      } else {
        state.showNextButton = true; // 显示右按钮
      }
    })

    onMounted(() => {
    });

    return {
      ...toRefs(state),
      handleNextClick,
      handlePrevClick
    };
  },
};
</script>
<style lang="less" scoped>
.swiper-container {
  position: relative;
  width: 520px;
  height: 100%;
  padding: 0 14px;
  --swiper-navigation-size: 13px;
  --swiper-theme-color: var(--gdky-placeholder-tip-color);
  overflow: hidden;
}

.swiper-wrapper {
  position: initial;

}

.swiper-slide {
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: MicrosoftYaHei;
  height: 52px;

  .icon {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 14px;
    height: 14px;
    padding-top: 1px;
  }

  .time {
    color: var(--gdky-placeholder-tip-color);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 14px;

  }

  .temp,
  .day {
    font-size: 14px;
    margin-left: 2px;
    color: var(--gdky-third-content-color);
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
  }
}

.swiper-button-prev::after {
  margin-left: -10px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.swiper-button-next::after {
  margin-left: 12px;
  display: flex;
  align-items: center;
  justify-content: center;
}
</style>

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

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

相关文章

使用REPLACE将数据库某一列字段进行字符串操作

REPLACE可以将表里的数据进行替换操作 如&#xff1a;需要把这一列里面的 # 去掉&#xff0c;经过测试&#xff0c;无论是开头、句中还是结尾都可以删除 UPDATE 表名 SET 字段名 REPLACE(字段名 , #, )

解决容器内deepspeed微调大模型报错

解决容器内deepspeed微调大模型报错&#xff1a;[launch.py:315:sigkill_handler] Killing subprocess 问题描述&#xff1a;解决办法 问题描述&#xff1a; 在容器中用deepspeed微调百川大模型2时&#xff0c;出现上述错误&#xff0c;错误是由于生成容器时&#xff0c;共享内…

2023 年值得关注的软件测试趋势(3)

16.云性能工程对业务连续性的影响 检查和改进基于云的应用程序和服务的性能是云性能工程的主要目标&#xff0c;是各种软件测试趋势中云计算的重要组成部分。云提供了无与伦比的可扩展性、灵活性和成本节约&#xff0c;但如果没有适当的性能工程&#xff0c;组织将面临应用程序…

Spark第一课

从数据处理的方式角度: 流式: 一条数据一条数据的处理 微批量: 一小批一小批的处理 批量: 一批数据一批数据的处理(Spark) 从数据处理的延迟角度 离线: 数据处理的延迟是以小时,天为单位 准(近)实时: 以秒为单位 实时:延迟以毫秒为单位, Spark是一个批量数据处理的离线数据分…

微积分(一) 函数的极限

前言 微积分“以直代曲”的思想就是将整体非线性化为局部线性的一个经典的例子&#xff0c;尽管高等数学在定义微分时并没有用到一点线性代数的内容。许多非线性问题的处理――譬如流形、微分几何等&#xff0c;最后往往转化为线性问题。 函数 定义&#xff1a;设 x x x 和 …

京东手机销售数据:2023年9月京东手机行业TOP10品牌排行榜

鲸参谋监测的京东平台9月份手机市场销售数据已出炉&#xff01; 9月份&#xff0c;手机市场销售整体呈现下滑。鲸参谋数据显示&#xff0c;今年9月&#xff0c;京东平台手机销量为300万&#xff0c;环比下降约20%&#xff0c;同比下降约18%&#xff1b;销售额为92亿&#xff0c…

Python 进阶(九):CSV 文件读写(csv模块)

《Python入门核心技术》专栏总目录・点这里 文章目录 1. CSV文件简介2. 导入csv模块3. 读取CSV文件3.1 打开CSV文件3.2 逐行读取数据3.3 获取每行的字段值 4. 写入CSV文件4.1 打开CSV文件4.2 写入数据行 5. 其他操作5.1 指定分隔符5.2 读取和写入字典格式5.3 自定义引号字符 6.…

树的基本操作(数据结构)

树的创建 //结构结点 typedef struct Node {int data;struct Node *leftchild;struct Node *rightchild; }*Bitree,BitNode;//初始化树 void Create(Bitree &T) {int d;printf("输入结点(按0为空结点):");scanf("%d",&d);if(d!0){T (Bitree)ma…

Python学习笔记——存储容器

食用说明&#xff1a;本笔记适用于有一定编程基础的伙伴们。希望有助于各位&#xff01; 列表 列表类似数组&#xff0c;其中可以包含不同类型的元素&#xff0c;写法如下&#xff1a; list1 [Google, Runoob, 1997, 2000] list2 [1, 2, 3, 4, 5 ] list3 ["a", …

Speech | .flac文件转换为.wav文件,并进行重采样(Python脚本)

把flac结尾的&#xff0c;替换为wav文件&#xff0c;然后对wav文件进行重采样&#xff08;48000->22050&#xff09;&#xff0c;可以更换采样率&#xff0c;运行后保存为新的地址&#xff0c;所有文件都在同一文件夹下&#xff08;保证能运行&#xff09;。 # 把flac结尾的…

java中使用sqlserver调用MySQL数据库的表进行操作

项目场景&#xff1a; 部分需求需要对不同的数据库进行操作,我这里是一个小程序里调用了另一个数据 解决方案&#xff1a; 目前我个人使用了两个方案解决的,看自己觉得哪个方便 方案一: 使用JDBC 新建一个实体类,相当于mapper.xml了,然后在这个实体类里进行数据库的连接操作…

2023年中国气体压缩机市场规模及产量分析[图]

气体压缩机是把机械能转换为气体压力能的一种动力装置&#xff0c;常用于风动工具提供气体动力&#xff0c;在石油化工、钻采、冶金等行业也常用于压送氧、氢、氨、天然气、焦炉煤气、惰性气体等介质。常见的气体压缩机包括离心式压缩机、螺杆式压缩机、往复式压缩机等。 气体…

VUE:可收缩工具栏

作者:CSDN @ _乐多_ 本文记录了一个vue可伸缩工具栏组件,代码即插即用。 只需要新增函数名并且填函数体就可以。 效果如下图所示, 文章目录 一、Vue代码一、Vue代码 <template><div class="ToolBar"><div class=

全球范围内先进封装设备划片机市场将迎来新的发展机遇

随着半导体工艺的不断发展&#xff0c;先进封装技术正在迅速发展&#xff0c;封装设备市场也将迎来新的发展机遇。作为先进封装设备中的关键设备之一&#xff0c;划片机的发展也备受关注。 划片机是用于切割晶圆或芯片的设备&#xff0c;其精度和稳定性直接影响到封装产品的质量…

Vue_组件详解

Vue_组件详解 初识组件组件组成组件的根节点父子组件 组件注册全局注册局部注册 组件间数据传递Props&#xff08;父 ----> 子&#xff09;props声明注意问题 组件间数据传递emit&#xff08;子 ----> 父&#xff09; 初识组件 组件&#xff08;Component&#xff09;&a…

WordPress导航主题蘑菇导航源码

蘑菇导航的列表页有两种风格&#xff0c;分别对应宽屏、窄屏。可以点击 文章。博客查看演示。文章页也是如此&#xff0c;这两种风格可以在后台设置。 本站菜单中的 VIP解析、音乐、图床&#xff0c;是单独的源码&#xff0c;不包含在本次主题中。后期看大家的要求&#xff0c…

Python中的循环语句Cycle学习

二、循环语句 1、什么是循环语句 一般编程语言都有循环语句,为什么呢? 那就问一下自己,我们弄程序是为了干什么? 那肯定是为了方便我们工作,优化我们的工作效率啊。 而计算机和人类不同,计算机不怕苦也不怕累,也不需要休息,可以一直做。 你要知道,计算机最擅长就…

【Java】栈和队列的模拟实现(包括循环队列)

异常为空栈异常&#xff1a; public class EmptyStackException extends RuntimeException {public EmptyStackException(){}public EmptyStackException(String msg){super(msg);}}循环队列&#xff1a; class MyCircularQueue {public int[] elem;public int front;//队…

绿色低碳,数字为先:万应低代码推动能源资产管理优化

10月7日&#xff0c;湘江新区经济发展局发布关于印发《湖南湘江新区推进碳达峰碳中和三年行动工作方案及责任分工&#xff08;2023-2025&#xff09;》的通知&#xff0c;把碳达峰碳中和工作纳入湖南湘江新区经济社会发展和生态文明建设整体布局。 随着科学技术的不断发展&…

10月第2周榜单丨飞瓜数据B站UP主排行榜榜单(B站平台)发布!

飞瓜轻数发布2023年10月9日-10月15日飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数、带货数据等维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营…