解决elementplus carousel固定高度问题/ResizeObserverAPI介绍
- "element-plus": "^2.2.26",
- "@vueuse/components": "^9.7.0",
原理: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介绍的更多相关文章
- Vue3解决ElementPlus Drawer或弹出对话框不生效的问题
第一时间检查你是否还在使用 :visible.sync="drawer" 来绑定事件框的隐藏和显示,vue3.0 已经更改为通过 v-model 来绑定事件框的显示与隐藏.
- Android权限管理之Android 6.0运行时权限及解决办法
前言: 今天还是围绕着最近面试的一个热门话题Android 6.0权限适配来总结学习,其实Android 6.0权限适配我们公司是在今年5月份才开始做,算是比较晚的吧,不过现在Android 6.0以 ...
- 介绍Unreal Engine 4中的接口(Interface)使用C++和蓝图
这个教程是从UE4 Wiki上整理而来. 在C++中直接使用Interface大家应该很熟悉.只是简单先定义一个个有虚函数的基类,然后在子类中实现相应的虚函数.像这样的虚函数的基类一般概念上叫接口.那 ...
- 【故障处理】ORA-30012的解决过程
[故障处理]ORA-30012的解决过程 1 BLOG文档结构图 2 前言部分 2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O ...
- struts2漏洞原理及解决办法
1.原理 Struts2的核心是使用的webwork框架,处理action时通过调用底层的getter/setter方法来处理http的参数,它将每个http参数声明为一个ONGL(这里是ONGL的介 ...
- ios固定高度禁止惯性滚动
最近测试pad改H5的项目时,固定高度的div,超出部分滚动,但在ios下滑动特别卡顿,安卓上没问题.搜索找到解决办法 固定高度的div设置超出页面滚动,ios会出现卡顿,非常不爽.通过下面css就可 ...
- 解决Android单个dex文件不能超过65536个方法问题
当我们的项目代码过大时,编译运行时会报Unable to execute dex: method ID not in[0, 0xffff]: 65536)错误.当出现这个错误时说明你本身自己的工程代码 ...
- 解决百度BMR的spark集群开启slaves结点的问题
前言 最近一直忙于和小伙伴倒腾着关于人工智能的比赛,一直都没有时间停下来更新更新我的博客.不过在这一个过程中,遇到了一些问题,我还是记录了下来,等到现在比较空闲了,于是一一整理出来写成博客.希望对于大 ...
- Flex内存泄露解决方法和内存释放优化原则
Flex内存泄露解决方法和内存释放优化原则 你对Flex内存泄露的概念是否了解,这里和大家分享一下Flex内存释放优化原则和Flex内存泄露解决方法,希望本文的介绍能让你有所收获. Flex内存释放优 ...
- 如何解决代码中if…else 过多的问题
前言 if...else 是所有高级编程语言都有的必备功能.但现实中的代码往往存在着过多的 if...else.虽然 if...else 是必须的,但滥用 if...else 会对代码的可读性.可维护 ...
随机推荐
- ubuntu18.04下联想电脑不能打开wifi
一.问题描述: 本人使用联想拯救者14IFI笔记本在安装Ubuntu系统时会出现无线硬件开关关闭的问题,当然也就无法连网(Wi-Fi). (最好先使用 sudo rfkill unblock all) ...
- JZOJ 5062. 【GDOI2017第二轮模拟day1】航海舰队
\(\text{Solution}\) 这还是 [Lydsy2017省队十连测] 的题 不得不说 \(FFT\) 在字符串匹配中的妙啊! 前面做了道一维的题,现在这是二维的 从题目入手,不考虑可不可达 ...
- 在Unity中对森林植被进行优化
https://www.163.com/dy/article/DP6665QP0526E124.html
- 【HTML】HTML特殊字符大全
使用方法:这些字符属于unicode字符集,所以,你的文档需要声明为UTF-8:下面符号列表的后面有两列编号,它们并不太一样,第一列是用于html的,你需要在前面加上&#符号:第二列可以用于C ...
- 【FPGA学习】MATLAB与FPGA实现FIR滤波器
本篇博客记录一下在matlab设计和在FPGA平台实现FIR滤波器的方法,平台是Xilinx的ZYNQ 参考: AMBA AXI-Stream Protocol Specification 使用mat ...
- mybatis动态标签——trim
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...
- Redis入门级简单安装使用
最近突然就想学一下Redis,于是就各种找教程,前两天实际操作了一下,也不是想象中的很难 但是今天想写一个使用Redis的demo,突然就不会使用Redis了,在网上也是查找了半天,还是想起来了点 ...
- NAT模式下Debian无法上网和VIM无法删除字符的处理方法
NAT模式下Debian无法上网的处理方法 处理方法共分为二种 检测 VM 的 NAT 服务有无开启 查看虚拟机的网络信息设置是否正确 检测 VM 的 NAT 服务有无开启 win+R 输入 serv ...
- codeforce D. Concatenated Multiples
http://codeforces.com/contest/1029/problem/D 看C题的第一眼就觉得自己一定能做出来,结果就兴致勃勃地做了一天,最后做出来了.但看到这道题时,第一感觉就是&q ...
- vue 事件传递原始 DOM 事件
vue 事件传递原始 DOM 事件 在事件传参中传递特殊变量 $event @click= "warn('1', $event)"