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

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

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 } = fullScreen
      const 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 } = fullScreen
      const 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.kler.cn/a/6953.html

相关文章:

  • STM32串口——5个串口的使用方法
  • DHTMLX-gantt组件显示不同的颜色
  • WPF的基础控件详解
  • SpringBoot源码解析(四):解析应用参数args
  • 【MySQL】MySQL数据库入门:构建你的数据基石
  • vue3 如何调用第三方npm包内部的 pinia 状态管理库方法
  • 2023.4.2 卷积到底是个啥?
  • 脂肪酸脂质Myristic acid PEG NHS,Myristic-acid PEG NHS ester,肉豆蔻酸PEG活性酯,具有优异疏水性
  • 项目 TO 的自我修养
  • Centos8中安装Docker
  • Linux SSH失效的几种情况以及排查方法
  • 在线直播源码系统架构设计
  • 战略应对:如何利用TOOM舆情监控预测市场趋势,抢占商机?
  • CMake入门教程【基础篇】2.aux_source_directory添加源文件
  • 如何将独热标签还原为字符串标签?
  • 要不要限制 AI?我们把与 GPT-4 有关的观点收集全了
  • 为什么Elasticsearch7.x把type给干掉了?
  • Chrome扩展程序实现网页翻译
  • Python求解线性方程组
  • DETR代码学习(五)之匈牙利匹配
  • 最大连通块之DFS,BFS
  • hydrus模型1D/2D/3D
  • 华为交换机 STP 协议
  • Hadoop(伪分布式)+Spark(local模式)搭建Hadoop和Spark组合环境
  • MagicBook安装Ubuntu
  • 数字化时代,企业的数据指标管理指南