使用js实现任意元素均可全屏显示的插件,提供vue自定义指令,开箱即用

news/2025/1/17 1:42:32/

cj-toolkit-x-full-screen

给界面上任意元素提供全屏能力的组件;
1.支持多层级逐级打开全屏和取消全屏。
2.提供完善的生命周期监听函数。
3.默认提供vue自定义指令,开箱即用

在这里插入图片描述

配置项

属性名说明类型默认值
targetEl全屏的目标元素HTMLElement非指令方式必填
closeOnEsc按esc 取消全屏booleantrue
closeAllOnEsc按esc 取消所有层级的全屏booleanfalse
hideIcon是否隐藏iconbooleanfalse
autoFullScreen自动全屏booleanfalse
iconContainerClass图标放置的父元素类名string‘full-screen-icon-container’
zIndex全屏后容器的层级string/function自动取值默认从10开始
createIcon自定义创建全屏图标function使用i标签
iconClass图标样式ScreenFullIconClass{class: “full-screen-icon”,full: “full-screen-icon__full”, unFull: “full-screen-icon__un-full”}
actionListeners全屏动作监听器FullScreenActionListenerFullScreenActionListener[]

使用方法

1.安装插件

npm i @cj-toolkit-x/full-screen

2.引入样式

import '@cj-toolkit-x/full-screen/dist/index.css'

3.1自定义使用

import { FullScreen, FullScreenOptions } from '@cj-toolkit-x/full-screen'
let fullScreen: FullScreen
onMounted(() => {const table = document.getElementById('table-data-container')if (table) {const options: FullScreenOptions = {targetEl: table,// 绑定需要被全屏的元素}// 创建全屏实例fullScreen = new FullScreen(options)}
})
onUnmounted(() => {// 销毁全屏实例fullScreen1?.destory();
})

3.2指令方式使用

a.安装vue全局指令

// vue2指令
import { v2FullScreen } from '@cj-toolkit-x/full-screen'
Vue.directive("full-screen", v2FullScreen);// vue3 指令
import { v3FullScreen } from '@cj-toolkit-x/full-screen'
createApp(App).directive('full-screen', v3FullScreen)

b.业务中使用

<!-- 通过指令方式绑定-->
<div class="item table-data-container" v-full-screen="fullScreenOptions"><span class="title">指令方式绑定</span><el-table :data="data" highlight-current-row border><el-table-column label="" prop="province" align="center"></el-table-column><el-table-column label="" prop="city" align="center"></el-table-column><el-table-column label="性别" prop="gender"></el-table-column><el-table-column label="编号" prop="code"></el-table-column><el-table-column label="姓名" prop="cnName"></el-table-column><el-table-column label="年龄" prop="age"></el-table-column></el-table>
</div>
<script lang="ts" setup>// 指令绑定的配置项const fullScreenOptions = {}
</script>

4.监听全屏和取消全屏事件实现动态修改textarea的高度

const fullScreenOptions: FullScreenOptions = {// zIndex: 1000, // 手动指定zIndex// closeAllOnEsc: true, // 按ESC 的时候取消所有的全屏效果actionListeners: {/*** 全屏修改rows*/fullScreen (fullScreen: FullScreen) {const { targetEl } = fullScreenconst children = targetEl.getElementsByTagName('textarea')for (let i = 0; i < children.length; i++) {const child = children[i]const oldRows = child.getAttribute('rows')child.setAttribute('rows', '50')oldRows && child.setAttribute('oldRows', oldRows)}},/*** 取消全屏文本域恢复*/cancelFullScreen (fullScreen: FullScreen) {const { targetEl } = fullScreenconst children = targetEl.getElementsByTagName('textarea')for (let i = 0; i < children.length; i++) {const child = children[i]const oldRows = child.getAttribute('oldRows') || '2'child.removeAttribute('oldRows')oldRows && child.setAttribute('rows', oldRows)}}}
}

5.样式覆盖

样式名称备注
full-screen-container全屏目标容器(自动添加)
full-screen-container__full目标容器进入全屏状态
full-screen-icon全屏图标,可通过options.iconClass.class 设置
full-screen-icon__full全屏图标-全屏,可通过options.iconClass.full 设置
full-screen-icon__un-full全屏图标-取消全屏,可通过options.iconClass.unFull 设置
full-screen-icon-container全屏目标容器,如果全屏元素的子元素中存在此类名,则会以此元素作为全屏图标的父元素

6.常见问题

1.如果全屏后界面显示异常,请先检查是否在元素上设置了zIndex,

源代码地址传送门
demo地址传送门


http://www.ppmy.cn/news/38615.html

相关文章

es在索引中自定义简单的分词器 Analyzer 扩展

es在索引中自定义简单的分词器 Analyzer 扩展 PUT index1 { "settings": { "analysis": { "analyzer": { "ik_max_word_expand": { "type": "custom", "char_filte…

Linux系统之普通用户sudo提权配置

Linux系统之普通用户sudo提权配置一、检查本地系统版本二、创建redhat普通用户1.创建redhat用户2.为redhat用户设置密码3.查询创建用户相关命令的绝对路径三、编辑/etc/sudoers文件四、检查redhat用户权限1.切换到redhat用户2.新建huawei账号3.查看新创建用户4.为huawei账号设置…

手机卡顿、内存不足?360清理大师排忧解难

当下&#xff0c;手机越用越卡已经成为不少用户普遍的困境。然而这些问题的存在并非是手机质量问题&#xff0c;很多时候可能是手机长期没有清理垃圾造成的。所幸&#xff0c;目前市面上已经出现了不少专业的清理软件&#xff0c;如360清理大师就是被更多人推荐的一款。它不仅可…

java代码新增或修改时候的验证字段唯一

java代码新增或修改时候的验证字段唯一 String PLOT_CODE_MSG "地块编码已存在"; //验证plotCode是否唯一&#xff0c;获取id String plotId plotService.getIdByPlotCode(plot.getPlotCode());//新增的时候判断是否存在if (Func.isEmpty(plot.getId())) {if (Fun…

做一个office转pdf的功能

前言: 在实际工作中,有时候我们开发手机app浏览office类型的文件时,开发难度会增加不少,为了减轻开发app同学的负担,这里我使用office类型的文件,统一转换为pdf格式的文件,以减少开发难度。 1、首先导入转换需要的jar 2、在pom文件中引入这几个jar <dependency>…

基于特征模型的全系数自适应控制

摘要&#xff1a; 首先推导了全系数和等于1的证明过程&#xff0c;分析了等效时间常数的概念&#xff0c;然后推导了递推最小二乘公式并用于参数辨识的方法&#xff0c;最后给几个仿真的例子。 全系数之和等于1 被控对象用微分方程 y(n)an−1y(n−1)⋯a0ybn−1u(n−1)⋯b0u(1.…

python 实现简单的KMediod

K-medoids 是 K-means 算法的一种改进算法&#xff0c;可以解决 K-means 中不稳定的问题&#xff0c;是一种基于聚类中心的距离度量方法&#xff0c;因此也被称为 partitioning around medoids &#xff08;PAM&#xff09;。 本篇博客将介绍 K-medoids 算法的原理和实现过程&…

图的遍历-DFS与BFS

图的遍历-DFS与BFS 绪论一.用vector存储图 + dfs二.用数组模拟邻接表存储图 + dfs三.用数组模拟邻接表存储图 + bfs绪论 有个问题:什么时候需要记录该点是否已经遍历过? 1.先说结论: D F S DFS DFS不需要记录该点是否已经遍历过