vue3+element-plus表格自适应高度

10 篇文章 0 订阅
2 篇文章 0 订阅

之前有写到如何通过自定义指令的方式在vue2项目中实现对element-ui表格的自适应高度,在这里不多赘述vue2和vue3自定义指令写法有何不同,直接抛代码,如若有该需求,可直接复制到项目中使用

又是熟悉的adaptive.js文件,具体用法可转至vue element table表格高度自适应查看

import ResizeObserver from "resize-observer-polyfill";

const isServer = typeof window === "undefined";

/* istanbul ignore next */
const resizeHandler = function (entries) {
  for (let entry of entries) {
    const listeners = entry.target.__resizeListeners__ || [];
    if (listeners.length) {
      listeners.forEach((fn) => {
        fn();
      });
    }
  }
};

/* istanbul ignore next */
export const addResizeListener = function (element, fn) {
  if (isServer) {
    return;
  }
  if (!element.__resizeListeners__) {
    element.__resizeListeners__ = [];
    element.__ro__ = new ResizeObserver(resizeHandler);
    element.__ro__.observe(element);
  }
  element.__resizeListeners__.push(fn);
};

/* istanbul ignore next */
export const removeResizeListener = function (element, fn) {
  if (!element || !element.__resizeListeners__) {
    return;
  }
  element.__resizeListeners__.splice(
    element.__resizeListeners__.indexOf(fn),
    1
  );
  if (!element.__resizeListeners__.length) {
    element.__ro__.disconnect();
  }
};
/**
 * How to use
 * <el-table height="100px" v-el-height-adaptive-table="{bottomOffset: 30}">...</el-table>
 * el-table height is must be set
 *  bottomOffset: 30(default)   // The height of the table from the bottom of the page.
 */

const doResize = (el, binding, vnode) => {
  const { el: $table } = vnode;

  const { value } = binding;
  if (!value.fixedHeader) {
    return;
  }
  const bottomOffset = (value && value.bottomOffset) || 70;
  if (!$table) {
    return;
  }

  const layout = document.getElementById("app");
  setTimeout(() => {
    const height =
      window.innerHeight - el.getBoundingClientRect().top - bottomOffset;
    const layoutHeight = layout.clientHeight;
    layoutHeight > 810
      ? (layout.style.minHeight = "810px")
      : (layout.style.minHeight = "auto");
    $table.style.height = height + 'px';
    // $table.doLayout();
  }, 600);
};

export default {
  beforeMount(el, binding, vnode) {
    el.resizeListener = () => {
      doResize(el, binding, vnode);
    };

    addResizeListener(window.document.body, el.resizeListener);
  },
  mounted(el, binding, vnode) {
    doResize(el, binding, vnode);
  },
  unmounted(el) {
    const layout = document.getElementById("app");
    layout.style.minHeight = "810px";
    removeResizeListener(window.document.body, el.resizeListener);
  },
};

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Element Plus Carousel走马灯图片的自适应,你可以使用以下代码作为参考: ``` <template> <el-carousel :interval="5000" arrow="always" :height="bannerHeight + 'px'" style="border: 1px solid red;"> <el-carousel-item v-for="item in 4" :key="item"> <el-row :gutter="12"> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" style="height:340px;margin-bottom: 20px;"> <img ref="bannerHeight" src="../image/banner1.png" alt="" @load="imgLoad" style="width: 100%"> </el-col> </el-row> </el-carousel-item> </el-carousel> <div id="test-div" style="border: 5px solid red;background-color: antiquewhite;">当前高度:{{bannerHeight}}</div> </template> <script> export default { data() { return { bannerHeight: 0, }; }, methods: { imgLoad() { const imgElement = this.$refs.bannerHeight; this.bannerHeight = imgElement.clientHeight; }, }, }; </script> ``` 这段代码中,我们使用`imgLoad`方法监听图片加载事件,通过`this.$refs.bannerHeight`获取图片元素的实际高度,然后将该高度赋值给`bannerHeight`变量。最后,在`el-carousel`的`:height`属性中使用`bannerHeight`作为高度值,实现了图片的自适应效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【最简便方法】element-plus/element-ui走马灯配置图片以及图片自适应](https://blog.csdn.net/m0_62742402/article/details/127837417)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [element-ui走马灯实现图片自适应](https://blog.csdn.net/qq_40976321/article/details/104513316)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值