ResizeObserver 和nextTick 的用途

ResizeObserver

简单说下 ResizeObserver 的用法

  1. new ResizeObserver(fn) 接受一个回调函数
  2. 回调函数默认是接受一个数组
  3. 数组第一项就是你传入的需要改变大小dom。
  4. 在回调函数内部改变大小。
  5. 观察者在vue需要 在合适时机打开关闭

例子

ts 复制代码
const observer = new ResizeObserver(entries => {
  for (let entry of entries) {
    console.log('entry:', entry); 
    // 减去导航栏捣鼓   减去卡片高度
    (entry.target as HTMLElement).style.height = (window.innerHeight - 55 - 290) + 'px';
  }
})

onMounted(() => {
  nextTick(() => {
    if (expanded.value.length) {
      observer.observe(domRef.value)
    }
  })
})

onUnmounted(() => {
  observer.disconnect()
})

ResizeObserver:再次大小观察者意思
用途 :用于 js操作大小样式 在dom渲染之后再次改变大小。

获取dom 大小的Api

ts 复制代码
window.innerHeight   视口的大小

获取slot传进来的dom

ts 复制代码
//html
  <div ref="slotContainer" class="slot-container">
        <slot></slot>
  </div>

//ts
// 使用template ref获取slot容器元素
const slotContainer = ref<HTMLElement>()
const getSlotContent = () => {
  return slotContainer.value?.firstElementChild as HTMLElement
}

//  firstElementChild 重点 ,不能把ref直接写到template 和slot上面

nextTick

这里也能发现 vue nextTick 的用途,但不太明显。

比如你要完成先将当前dom移到视口顶部,再在dom后面插入一个div ,这样一个需求。 涉及到一个函数两个ui调整,vue有搜集响应式,最后触发,如果没有nextTick 就会没有中间动画过程。 我们使用nextTick 就可以实现,先插入dom,再滚动到顶部。

ts 复制代码
// 处理点击事件
const handleClick = async () => {
  if (props.isActive) {
    emit('activate', null); // 关闭激活项
    placeholderHeight.value = 0;
    return;
  }

  emit('activate', props.id); // 激活当前项
  placeholderHeight.value = getDetailHeight();

  // 等待 DOM 更新完成
  await nextTick();

  // 滚动到顶部
  const itemEl = itemRef.value;
  if (itemEl) {
    itemEl.scrollIntoView({ behavior: 'smooth', block: 'start' });
  }
};
相关推荐
涛涛ing1 小时前
2026年最值得关注的前端变化,藏在“默认值”里
前端
亿元程序员3 小时前
太牛了!这AI做出来的游戏,居然还能变现!
前端
hellice3 小时前
闪传 FlashDrop 实战:我用 300 行 Node 代码做了个「4 位取件码」临时文件中转站
前端·产品
用户0829773260053 小时前
RTX 5500 MIG 踩坑记录:切分之后模型跑不起来,排错整整一下午
前端
Lank_M3 小时前
AI 放大后的图更清楚,但它不能当原图入库
前端
Swot3 小时前
SvelteKit 数据流研究:`+page.js` 和 `+page.server.js` 到底谁在跑,数据又去了哪儿
前端·后端
用户4147679304153 小时前
Windows 触摸屏上 Swiper 轮播滑不动?可能是内部滚动容器抢走了你的手势
前端
张明君644513 小时前
从一个 Referer 引发的 403,到 SSR 服务失稳:Astro 流式渲染与缓存失效分析
前端
律宏阔3 小时前
微信小程序 + Taro + TDesign 去掉 [&&&],让普通 Tailwind 类接管局部样式
前端·微信小程序·taro
费曼学习法3 小时前
把 3 个内部服务封装成 MCP Server 的工程复盘:进程模型、超时与错误契约
前端