• "element-plus": "^2.2.26",
  • "@vueuse/components": "^9.7.0",
引入 vElementSize 返回响应性的监听值。

原理:ResizeObserver 接口监视 Element 内容盒或边框盒或者 SVGElement 边界尺寸的变化。!!!很棒的API。

例子是指令式的,完整项目

<template>
<div>
<el-carousel :interval="3000" type="card" :height="bannerHeight + 'px'">
<el-carousel-item v-for="(item, index) in banners" :key="index" class="rounded-lg">
<img v-element-size="onResize" :src="item.imageUrl" alt="" />
</el-carousel-item>
</el-carousel>
</div>
</template> <script setup lang="ts">
import { useCommonStore } from '@/stores/common'
import { storeToRefs } from 'pinia';
import { vElementSize } from '@vueuse/components' const commonStore = useCommonStore();
const { banners } = storeToRefs(commonStore)
const { getBanners } = commonStore
const bannerHeight = ref(200) onMounted(async () => {
await getBanners();
})
function onResize({ width, height }: { width: number; height: number }) {
bannerHeight.value = height
}
</script></style>

vElementSize的原理是ResizeObserverAPI,可以监视元素的大小更改,并且每次大小更改时都会向观察者传递通知。

以下是一个简单的例子:

    <style>
* {
box-sizing: border-box;
padding: 0;
margin: 0;
} div {
height: 100px;
width: 100%;
background-color: yellowgreen;
}
</style> <body>
<div></div>
<script lang="ts">
let value = {
width: 0
} function elementSizeObserver(target) {
const resizeObserver = new ResizeObserver(entries => {
for (const entry of entries) {
value = entry.contentRect
}
})
const element = document.querySelector(target)
resizeObserver.observe(element)
}
elementSizeObserver('div')
</script>
</body>

这个API的优点:

  • 响应特定元素的尺寸改变
  • 相较于传统解决方案window.resize(()=>{ Element.getBoundingClientRect... }),不依赖视口改变,不需要多次重新获取元素以得到尺寸信息

用法:(原文)

用法很简单,并且与其他观察者(例如 Performance Observer 或者 Intersection Observer)几乎相同——你可以使用 ResizeObserver() 构造函数创建一个新的 ResizeObserver,然后使用 ResizeObserver.observe() 使其寻找特定元素大小的更改。每次更改大小时,构造函数中设置的回调函数便会运行,从而提供对新尺寸的访问,并允许你根据需要执行任何操作。

解决elementplus carousel固定高度问题/ResizeObserverAPI介绍的更多相关文章

  1. Vue3解决ElementPlus Drawer或弹出对话框不生效的问题

    第一时间检查你是否还在使用 :visible.sync="drawer" 来绑定事件框的隐藏和显示,vue3.0 已经更改为通过 v-model 来绑定事件框的显示与隐藏.

  2. Android权限管理之Android 6.0运行时权限及解决办法

    前言: 今天还是围绕着最近面试的一个热门话题Android 6.0权限适配来总结学习,其实Android 6.0权限适配我们公司是在今年5月份才开始做,算是比较晚的吧,不过现在Android 6.0以 ...

  3. 介绍Unreal Engine 4中的接口(Interface)使用C++和蓝图

    这个教程是从UE4 Wiki上整理而来. 在C++中直接使用Interface大家应该很熟悉.只是简单先定义一个个有虚函数的基类,然后在子类中实现相应的虚函数.像这样的虚函数的基类一般概念上叫接口.那 ...

  4. 【故障处理】ORA-30012的解决过程

    [故障处理]ORA-30012的解决过程 1  BLOG文档结构图 2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O ...

  5. struts2漏洞原理及解决办法

    1.原理 Struts2的核心是使用的webwork框架,处理action时通过调用底层的getter/setter方法来处理http的参数,它将每个http参数声明为一个ONGL(这里是ONGL的介 ...

  6. ios固定高度禁止惯性滚动

    最近测试pad改H5的项目时,固定高度的div,超出部分滚动,但在ios下滑动特别卡顿,安卓上没问题.搜索找到解决办法 固定高度的div设置超出页面滚动,ios会出现卡顿,非常不爽.通过下面css就可 ...

  7. 解决Android单个dex文件不能超过65536个方法问题

    当我们的项目代码过大时,编译运行时会报Unable to execute dex: method ID not in[0, 0xffff]: 65536)错误.当出现这个错误时说明你本身自己的工程代码 ...

  8. 解决百度BMR的spark集群开启slaves结点的问题

    前言 最近一直忙于和小伙伴倒腾着关于人工智能的比赛,一直都没有时间停下来更新更新我的博客.不过在这一个过程中,遇到了一些问题,我还是记录了下来,等到现在比较空闲了,于是一一整理出来写成博客.希望对于大 ...

  9. Flex内存泄露解决方法和内存释放优化原则

    Flex内存泄露解决方法和内存释放优化原则 你对Flex内存泄露的概念是否了解,这里和大家分享一下Flex内存释放优化原则和Flex内存泄露解决方法,希望本文的介绍能让你有所收获. Flex内存释放优 ...

  10. 如何解决代码中if…else 过多的问题

    前言 if...else 是所有高级编程语言都有的必备功能.但现实中的代码往往存在着过多的 if...else.虽然 if...else 是必须的,但滥用 if...else 会对代码的可读性.可维护 ...

随机推荐

  1. Mat数据结构

    1.MAT类: OpenCV从2001年开始发展,在最初使用的是c语言,使用的是IplImage数据结构来存储图像,但是最大的问题需要手动申请释放内从( manual memory managemen ...

  2. 跟着廖雪峰学python 005

    ​ 函数的调用.定义.参数 ​编辑 #######命名关键字参数没完 abs()函数:绝对值 >>> abs(100) 100 >>> abs(-20) 20 ma ...

  3. 进程间通信 —— 管道(Interprocess Communications —— Pipes)

    进程间通信 -- 管道(Interprocess Communications -- Pipes) 管道分为匿名管道(anonymous pipes)和命名管道(named pipes.)两类, 其中 ...

  4. CF1736C1 Good Subarrays (Easy Version)

    题目传送门 思路 给出一种不需要脑子的做法. 首先我们把每个 \(a_i\) 都减去 \(i\),这样原问题就转化为对于每一个左端点 \(i\),寻找一段连续的区间,使得这段区间的最小值加上 \(i- ...

  5. 基于C++的OpenGL 12 之多光源

    1. 引言 本文基于C++语言,描述OpenGL的多光源 前置知识可参考: 基于C++的OpenGL 11 之投光物 - 当时明月在曾照彩云归 - 博客园 (cnblogs.com) 笔者这里不过多描 ...

  6. 基于C++的OpenGL 09 之材质

    1. 引言 本文基于C++语言,描述OpenGL的材质 前置知识可参考: 基于C++的OpenGL 08 之基础光照 - 当时明月在曾照彩云归 - 博客园 (cnblogs.com) 笔者这里不过多描 ...

  7. 基于Python的OpenGL 02 之着色器

    1. 概述 本文基于Python语言,描述OpenGL的着色器 环境搭建以及绘制流程可参考: 基于Python的OpenGL 01 之Hello Triangle - 当时明月在曾照彩云归 - 博客园 ...

  8. 对服务器进行心跳检测 python django

    (由于春节期间连不上服务器,但又不知道是不是服务器关机了,因此写一个心跳检测功能遇到问题时可以排查部分原因) 具体来说分为客户端和服务端,客户端为校园服务器,服务端为我们自己搭建的http服务器.客户 ...

  9. day12_内部类&API

    1.参数传递 1.1 类名作为形参和返回值 类名--方法形参     方法的形参是类名,需要的是该类的对象:实际传递的是该对象的地址值 类名--返回值     方法的返回值是类名,返回的是该类的对象: ...

  10. [版本控制-Git]-git学习总结

    1.如何将本地的文件添加到已经建好的远程分支上: 1.1 本地文件夹内,右键-git bash - 创建新仓 git init 1.2 git remote add origin 远程仓库的githu ...