IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> antd+vue——实现按钮始终固定在顶部,且根据权限的不同控制按钮组件的显示与隐藏——技能提升 -> 正文阅读

[JavaScript知识库]antd+vue——实现按钮始终固定在顶部,且根据权限的不同控制按钮组件的显示与隐藏——技能提升

最近在写后台管理系统,遇到一个小功能,就是一个按钮组件集合。

之前写过一篇文章,是关于按钮集合固定到页面顶部的文章。vue——实现页面滚动时,dom固定在顶部——基础积累

原理就是:监听页面的滚动,如果滚动距离超过一定大小,就设置按钮dom的position为fixed固定定位。

下面的内容跟这个一致,只不过是封装成了组件来使用。

1.组件内容——html代码

<template>
  <div>
    <a-card ref="buttonBoxSelf" :class="{ 'button-box-fixed': isFixed }">
      <slot></slot>
    </a-card>
  </div>
</template>

2.组件内容——js代码

<script>
export default {
  name: 'ButtonBox',
  data() {
    return {
      height: 0,
      isFixed: false,
      timer: null,
      btns: 0,
    };
  },
  mounted() {
    const dom = this.$refs.buttonBoxSelf.$el;
    this.height = dom.offsetHeight;
    let offsetTop = dom.offsetTop;
    if (dom.offsetTop == 0) {
      const parent = this.$refs.buttonBoxSelf.$parent.$parent.$el;
      offsetTop = parent.offsetTop;
    }
    this.$bus.$on('scrollTop', (scrollTop) => {
      if (this.timer) {
        clearTimeout(this.timer);
      }
      this.timer = setTimeout(() => {
        if (offsetTop == 0) {
          // 滚动距离为包裹层的高度
          if (scrollTop >= 20) {
            this.isFixed = true;
          } else {
            this.isFixed = false;
          }
          return;
        }
        // 滚动距离为包裹层距离内容层的高度
        if (scrollTop >= offsetTop) {
          this.isFixed = true;
        } else {
          this.isFixed = false;
        }
      }, 10);
    });
  },
  methods: {},
};
</script>

3.组件内容——css代码

<style scoped>
.button-box-fixed {
  position: fixed;
  top: 152px;
  z-index: 3;
  width: calc(100% - 120px);
  box-shadow: 0 6px 12px 0 rgb(0 0 0 / 5%);
}
</style>

4.组件的使用——全局注册——main.js

import ButtonBox from '@/components/customer/ButtonBox';
Vue.component(ButtonBox.name, ButtonBox);

5.组件的使用——页面调用

<ButtonBox>
      <a-space>
        <a-button
          type="primary"
          ghost
          v-if="
            info.status >= 1 &&
            info.status < 40
          "
          >编辑</a-button
        >
         <a-button
            type="primary"
            ghost
            v-if="info.status == 5 || info.status == 15 || info.status == 25"
            >取消</a-button
          >
    </a-space>
</ButtonBox>

上面的按钮中有两个按钮:编辑+取消,而且两个按钮有不同的显示条件,只有当符合条件的时候才会显示出来。

在这里插入图片描述
当一个按钮也没有的时候,就会出现下面这样的情况。
在这里插入图片描述
此时是非常不合适的,这时候就需要用下面的方法来判断了。

6.组件的使用——判断按钮组件的显示与隐藏

6.1 给ButtonBox组件添加buttonBoxClass类名

6.2 给ButtonBox组件添加v-show="btns"

6.3 在页面加载的时候添加以下的内容:

this.$nextTick(() => {
  let btns = document.querySelectorAll('.buttonBoxClass button');
  this.btns = btns.length;
});

原理是:如果符合显示条件,则按钮一定会是button组件,如果不符合显示条件,则按钮只会是个普通的div元素,所以可以通过判断button元素的个数,来判断是否有按钮的存在。

完成!!!多多积累,多多收获。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 10:59:18  更:2022-12-25 10:59:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/11 17:39:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码