使用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地址传送门

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值