t-visibility-sensor
VisibilitySensor 可见性传感器
组件介绍
t-visibility-sensor 是用于监听元素是否在可视区域内的组件,当元素进入或离开视口时会触发相应事件,适用于懒加载、埋点统计、动画触发等场景。
平台兼容
| Harmony | H5 | Android | iOS | 小程序 | UTS |
|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
基础用法
基础用法参考 demo/visibility-sensor/visibility-sensor.uvue。
vue
<template>
<view class="visibility-sensor-demo">
<scroll-view scroll-y class="scroll-view" @scroll="onScroll">
<view v-for="i in 20" :key="i" class="item-wrapper">
<t-visibility-sensor
:scrollTop="scrollTop"
:mark="`item-${i}`"
@visible="onVisible"
@change="onChange">
<view class="content-box">
<text>第 {{ i }} 个元素</text>
<image
v-if="visibleItems.includes(`item-${i}`)"
:src="`/static/image-${i}.jpg`"
mode="aspectFill">
</image>
<view v-else class="placeholder">图片加载中...</view>
</view>
</t-visibility-sensor>
</view>
</scroll-view>
</view>
</template>
<script setup>
const scrollTop = ref(0);
const visibleItems = ref([]);
function onScroll(e) {
scrollTop.value = e.detail.scrollTop;
}
function onVisible(visible) {
console.log('元素可见性:', visible);
}
function onChange({ ins, state, mark }) {
console.log('元素状态变化:', mark, state);
if (state && !visibleItems.value.includes(mark)) {
visibleItems.value.push(mark);
}
}
</script>
<style scoped>
.visibility-sensor-demo {
height: 100vh;
}
.scroll-view {
height: 100%;
}
.item-wrapper {
height: 300rpx;
margin: 20rpx;
}
.content-box {
height: 100%;
background: #f5f5f5;
border-radius: 12rpx;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.placeholder {
color: #999;
}
</style>Props
| 属性名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
scrollTop | 滚动组件的 scrollTop 值 | number | 0 |
mark | 组件标记,用于区分不同元素 | string | '' |
path | 点击组件后跳转的页面路径 | string | '' |
hover | 是否启用点击效果 | boolean | false |
type | 组件主题类型 | string | '' |
disabled | 是否禁用 | boolean | false |
effect | 组件显示主题 | string | 'plain' |
size | 组件尺寸 | string | '' |
Events
| 事件名 | 说明 | 回调参数 |
|---|---|---|
visible | 元素可见性变化时触发 | boolean(是否可见) |
change | 元素状态发生变化时触发 | { ins: instance, state: boolean, mark: string } |
transitionend | 动画结束时触发 | event |
插槽
| 插槽名 | 说明 |
|---|---|
default | 需要监听可见性的内容 |