Vue3 按钮根据屏幕宽度展示折叠按钮

文章目录

  • 一、组件封装
  • 二、使用
  • 三、最终效果(参考)
  • 四、参考

一、组件封装

ButtonFold.vue

1、获取父组件的元素,根据元素创建动态插槽
2、插槽中插入父元素标签。默认效果和初始状态相同。
3、当屏幕宽度缩小时,部分按钮通过 dropdown 的方式展示出来,doropdown 默认按钮使用 ... 图标
4、firstHideBtnIndex 边界值可自定义

<!-- 按钮折叠组件 -->
<template><template v-for="(item, index) in btns"><slot v-if="isShowBtn(index)" :name="`slot${index}`"></slot></template><a-dropdown :trigger="['click']" v-if="isShowMoreBtns()"><a-button type="text"><EllipsisOutlined /></a-button><template #overlay><a-menu><template v-for="(item, index) in btns" :key="index" ><a-menu-item class="ant-pro-drop-down menu"v-if="index >= Number(firstHideBtnIndex)"><slot :name="`slot${index}`"></slot></a-menu-item></template></a-menu></template></a-dropdown>
</template><script lang="ts" setup>
import { throttle } from 'lodash-es';
import {EllipsisOutlined,
} from '@ant-design/icons-vue';
import { useRouter } from 'vue-router';const slots = useSlots();
const router = useRouter();const btns = computed(() => slots.default?.());const firstHideBtnIndex = ref<number>(Number(btns.value?.length));btns.value?.forEach((x: any, i: number) => {Object.assign(slots, { [`slot${i}`]: () => ([x]) });
});const isShowBtn = (i: number) => {return i < Number(firstHideBtnIndex.value);
};const isShowMoreBtns = () => {return Number(firstHideBtnIndex.value) < Number(btns.value?.length);
};const foldResiez = throttle((e: any) => {setFirstBtnIndex();
}, 400);const setFirstBtnIndex = () => {if (document.body.scrollWidth < 1300 ) {firstHideBtnIndex.value = 4;} else {firstHideBtnIndex.value = Number(btns.value?.length);}
};onBeforeUpdate(() => {btns.value?.forEach((x: any, i: number) => {Object.assign(slots, { [`slot${i}`]: () => ([x]) });});setFirstBtnIndex();
});onMounted(() => {window.addEventListener('resize', foldResiez, false);
});onBeforeUnmount(() => {window.removeEventListener('resize', foldResiez, false);
});
</script><style scoped lang="scss"></style>

二、使用

  1. 当按钮较多时,在按钮外部使用 ButtonFold 组件包裹。
  2. 屏幕宽度变化在 ButtonFold 中监测
import ButtonFold from './ButtonFold.vue';<button-fold><button>1</button><button>2</button><button>3</button><button>4</button><button>5</button><button>6</button><button>7</button><button>8</button>
</button-fold>

三、最终效果(参考)

按钮折叠样式

四、参考

  1. 画面宽度发生变化,导致的按钮换行
  2. 插槽 Slots

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

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

相关文章

Sqlmap中文使用手册 - 各个参数介绍(持续更新)

目录 1. 指定输出级别2. 指定目标2.1 直接连接数据库2.2 指定目标URL2.3 从代理日志中解析目标2.4 从远程站点地图文件(.xml)中解析目标2.5 从文本中解析目标2.6 从文件加载HTTP请求2.7 将google搜索结果作为攻击目标2.8 从配置INI文件获取目标 3. 请求3.1 指定HTTP方法3.2 指定…

线程安全的懒加载单例模式

一、什么是单例模式 单例模式是一种设计模式&#xff0c;它确保某个类只有一个实例&#xff0c;并提供一个全局访问点来获取该实例。这种模式在多种编程语言中都有实现&#xff0c;包括Java和C。单例模式的实现可以采取饿汉式或懒汉式两种方式。饿汉式是在类加载时就创建了…

springboot使用测试类报空指针异常

检查了Service注解&#xff0c;还有Autowired注解&#xff0c;还有其他注解&#xff0c;后面放心没能解决问题&#xff0c;最后使用RunWith(SpringRunner.class)解决了问题&#xff01;&#xff01; 真的是✓8了&#xff0c;烦死了这个✓8报错&#xff01;

VSCode连接远程服务器,并用Docker环境开发和调试

1. 连接服务器操作步骤 1.1 在本机安装SSH 由于我们是使用 SSH 连接远程服务器&#xff0c;因此 Windows 需要支持 SSH。可以通过安装 Git 来获取 SSH 功能&#xff0c;如何验证? 使用 Win R &#xff0c;输入 cmd 打开控制窗口&#xff0c;直接输入 ssh&#xff0c;如下提…

C语言 | Leetcode C语言题解之第200题岛屿数量

题目&#xff1a; 题解&#xff1a; void cleanLand(char** grid, int gridSize, int ColSize,int row,int column) {if(grid[row][column] 1){//不等于1则清零grid[row][column] 0;}else{//不等于1则返回return ;}int newRow;int newColumn;//上if(row ! 0) //还能上{ne…

每天五分钟计算机视觉:人体姿势识别

本文重点 人体姿势识别是计算机视觉领域的一个重要研究方向,旨在通过图像或视频数据自动检测并识别出人体的各种姿势和动作。随着深度学习技术的快速发展,基于神经网络的方法在这一领域取得了显著进展。神经网络,特别是卷积神经网络(CNN)和循环神经网络(RNN),因其强大…

基于YOLOv9的PCB板缺陷检测

数据集 PCB缺陷检测&#xff0c;我们直接采用北京大学智能机器人开放实验室数据提供的数据集&#xff0c; 共六类缺陷 漏孔、鼠咬、开路、短路、杂散、杂铜 已经对数据进行了数据增强处理&#xff0c;同时按照YOLO格式配置好&#xff0c;数据内容如下 模型训练 ​ 采用YOLO…

idea乱码问题解决

乱码问题产生的根本原因 数据的编码和解码使用的不是同一个字符集 使用了不支持某个语言文字的字符集 Tomcat控制台乱码 在tomcat10.1.7这个版本中,修改 tomcat/conf/logging.properties中,所有的UTF-8为GBK即可 sout乱码问题,设置JVM加载.class文件时使用UTF-8字符集 设置虚…

Kafka 集群 Topic、消息大小、节点格式上限管控原理

Kafka 集群 Topic、消息大小、节点格式上限管控原理 kafka 集群对创建topic的数量有限制吗,发送的消息内容大小有限制吗,kafka集群节点的个数有限制吗, 如何来合理的设置topic的分区数量和副本数量?Kafka 集群在创建 Topic 的数量、发送的消息内容大小、集群节点的个数方面…

RedisAtomicInteger并发案例

&#x1f370; 个人主页:__Aurora__ &#x1f35e;文章有不合理的地方请各位大佬指正。 &#x1f349;文章不定期持续更新&#xff0c;如果我的文章对你有帮助➡️ 关注&#x1f64f;&#x1f3fb; 点赞&#x1f44d; 收藏⭐️ RedisAtomicInteger 提供了对整数的原子性操作&a…

【SkiaSharp绘图12】SKCanvas方法详解(一)清空、裁切区域设置、连接矩阵、注释、弧与扇形、图集、九宫格绘图、圆

文章目录 SKCanvas 方法Clear 清空ClipPath/ClipRect/ClipRegion/ClipRoundRect 设置裁切区域Concat 连接矩阵DrawAnnotation绘制注释DrawArc绘制椭圆弧、扇形DrawAtlas绘制图集(一个图像、多个区域、多个缩放、一次绘制&#xff09;DrawBitmap绘制图像DrawBitmapNinePatch九宫…

防火墙部署基本方法

防火墙部署基本方法 防火墙部署是确保网络安全的重要步骤&#xff0c;通过合理的部署和配置防火墙&#xff0c;可以有效地保护网络资源&#xff0c;防止未经授权的访问和网络攻击。以下是防火墙部署的基本方法&#xff0c;包括部署步骤、配置建议和常见的部署拓扑。 一、部署…

深度学习评价指标:Precision, Recall, F1-score, mIOU, 和 mDice

在深度学习和机器学习中&#xff0c;评价模型性能是至关重要的一环。本文将详细讲解一些常见的评价指标&#xff0c;包括精确率&#xff08;Precision&#xff09;、召回率&#xff08;Recall&#xff09;、F1-score、平均交并比&#xff08;mIOU&#xff09;和平均Dice系数&am…

Adobe Magento OR Commerce电子商务系统 XXE漏洞复现(CVE-2024-34102)

0x01 产品简介 Magento最初是一个开源的电子商务平台,后来被Adobe公司收购,并更名为Adobe Commerce,是一个功能丰富、灵活且可扩展的电子商务解决方案。Adobe Commerce提供了强大的定制能力,允许商家根据自己的业务需求进行灵活调整。通过人工智能和机器学习技术,为B2B和…

5.6 0-1背包问题

#include<iostream> #include<string> #include<stdlib.h> #include<bits/stdc.h> using namespace std;int c;//背包容纳的重量 int n;//物品数量 int cw;//当前重量 int cv;//当前价值 int bestv;//当前最优价值 int x[100]; int bestx[100]; struct…

Linux 交叉编译工具链格式 sqlite3编译示例

1、交叉编译工具链 1.1 定义 交叉编译工具链是一个由编译器、连接器和解释器组成的综合开发工具集&#xff0c;它允许开发者在一个平台上&#xff08;例如高性能的PC或服务器&#xff09;编译生成另一个平台&#xff08;例如嵌入式系统或不同的操作系统和硬件架构&#xff09…

pyqt 文件浏览列表视图和图标视图

pyqt 文件浏览列表视图和图标视图 目的效果代码 目的 使用pyqt实现文件浏览列表视图和图标视图&#xff0c;像电脑文件浏览一样。如下图所示。 效果 代码 import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QToolBar, QAction, Q…

大数据领域的常用开发语言详解

大数据开发语言主要包括以下几个&#xff0c;以下是它们在大数据开发领域的优缺点和应用场景的详细说明&#xff1a; 1. Java 优点&#xff1a; 跨平台性&#xff1a;Java的“一次编写&#xff0c;到处运行”的特性使得其可以轻松地运行在多个操作系统上。面向对象&#xff…

OpenCV学习之cv2.subtract函数

OpenCV学习之cv2.subtract函数 一、简介 cv2.subtract 是 OpenCV 库中的一个基本函数&#xff0c;用于对两幅图像进行逐像素的减法操作。 二、基本语法 cv2.subtract(src1, src2, dstNone, maskNone, dtypeNone)三、参数说明 src1 (numpy.ndarray): 第一幅输入图像或数组。 …

上海市计算机学会竞赛平台2023年6月月赛丙组差分求和

题目描述 给定一个整数序列&#xff0c;对其中任意两个数&#xff0c;计算后项减前项的差&#xff0c;输出这些差的差。 例如对于 &#x1d44e;1,&#x1d44e;2,&#x1d44e;3,&#x1d44e;4a1​,a2​,a3​,a4​ 来说&#xff0c;输出 (&#x1d44e;2−&#x1d44e;1)…