javascript - 将EventListener添加到元素clientWidth vue 3
问题描述
嗨,当组件调整大小时,我正在尝试侦听组件 clientWidth。我想使用喜欢
const myEl = document.querySelector('#myID')
并在 myEl.clientWidth 更改时传递该 myEl 以进行监视。Idk 我找到了一个可组合的功能,当整个屏幕调整大小时我可以看到它,但是当元素大小改变时我不会改变屏幕大小。Idk 如果调整大小有效,或者在使用元素时它是如何工作的。这是一个有效的屏幕调整大小
import { onMounted, onUnmounted, ref } from "vue"
export default function () {
let width = ref(window.innerWidth)
const onWidthChange = () => width.value = window.innerWidth
onMounted(() => window.addEventListener('resize', onWidthChange))
onUnmounted(() => window.removeEventListener('resize', onWidthChange))
return { width }
}
我正在尝试类似的东西
import { onMounted, onUnmounted, ref } from "vue"
export default function (el) {
let elWidth = ref(null)
function onWidthChange(){
console.log('HERE')
elWidth.value = el.clientWidth
}
onMounted(() => el.addEventListener('resize', onWidthChange))
onUnmounted(() => el.removeEventListener('resize', onWidthChange))
return { elWidth }
}
并使用它在组件中传递 myEl
const myEl = ref(null)
onMounted(() => {
myEl.value = document.querySelector("#myEl")
const { elWidth } = useElementWidth(myEl.value)
watch(() => elWidth.value,
(wid) => {
if(wid){
console.log('widEL', wid )
}
},
})
})
也不需要可组合。如果我能看到这个 clientWidth 那就太好了
解决方案
我不是 resizeObsever 方面的专家,但我认为这样的组件对我有用。不声称完美,但它为我的目的工作..随时改进它。并且 idk 如果在每个浏览器中都可以使用,或者如果在 chrome 中可以使用,那么对我来说很好,但没有测试一切
import { onUnmounted, ref } from "vue"
export default function () {
const elWidth = ref(0)
const theEl = ref(null)
const useElID = ref(null)
function mountObserver(elID){
useElID.value = elID
console.log('elWidtMounted', elID)
theEl.value = document.querySelector(elID)
ro.observe(theEl.value);
}
onUnmounted(() => {
console.log('elWidtUnMounted', useElID.value)
ro.unobserve(theEl.value)
})
const ro = new ResizeObserver(entries => {
console.log('Size changed', entries);
for (let entry of entries) {
console.log('Size changed e', entry);
const width = entry.contentRect.width
elWidth.value = width
}
});
return { elWidth, mountObserver }
}
推荐阅读
- python - 如何在计算验证指标之前编写自定义 Keras 验证以对多个图像切片进行平均预测
- angular - NGX-MQTT | 蚊子
- java - Maven(exec plugin) 不使用“/”字符解析项目路径
- ssis - 添加新的转换列失败
- database - 使用 MongoDB Compass 克隆 MongoDB 数据库
- gluon-mobile - Gluon Afterburner Presenter.initialize() 未调用
- java - 获取当前时间前后 12 小时
- nuxt.js - 如何在 Nuxt 路由器中间件中添加重定向?
- r - 给给定 sd 值的多个 geom_point 变量添加误差线
- python - 更新 manjaro 后 gcloud 无法正常工作