mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-05-23 15:09:16 +08:00
chore(Sticky): use tsx
This commit is contained in:
parent
f879b6d77a
commit
c771604dec
@ -9,7 +9,7 @@ import {
|
|||||||
|
|
||||||
// @Experimental
|
// @Experimental
|
||||||
export function useVisibilityChange(
|
export function useVisibilityChange(
|
||||||
target: Ref<Element>,
|
target: Ref<Element | undefined>,
|
||||||
onChange: (visible: boolean) => void
|
onChange: (visible: boolean) => void
|
||||||
) {
|
) {
|
||||||
// compatibility: https://caniuse.com/#feat=intersectionobserver
|
// compatibility: https://caniuse.com/#feat=intersectionobserver
|
||||||
@ -26,11 +26,15 @@ export function useVisibilityChange(
|
|||||||
);
|
);
|
||||||
|
|
||||||
const observe = () => {
|
const observe = () => {
|
||||||
observer.observe(target.value);
|
if (target.value) {
|
||||||
|
observer.observe(target.value);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const unobserve = () => {
|
const unobserve = () => {
|
||||||
observer.unobserve(target.value);
|
if (target.value) {
|
||||||
|
observer.unobserve(target.value);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
onMounted(observe);
|
onMounted(observe);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { ref, reactive, computed } from 'vue';
|
import { ref, reactive, computed, CSSProperties } from 'vue';
|
||||||
|
|
||||||
// Utils
|
// Utils
|
||||||
import {
|
import {
|
||||||
@ -28,7 +28,7 @@ export default createComponent({
|
|||||||
emits: ['scroll'],
|
emits: ['scroll'],
|
||||||
|
|
||||||
setup(props, { emit, slots }) {
|
setup(props, { emit, slots }) {
|
||||||
const root = ref();
|
const root = ref<HTMLElement>();
|
||||||
const scrollParent = useScrollParent(root);
|
const scrollParent = useScrollParent(root);
|
||||||
|
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
@ -39,24 +39,24 @@ export default createComponent({
|
|||||||
|
|
||||||
const offsetTop = computed(() => unitToPx(props.offsetTop));
|
const offsetTop = computed(() => unitToPx(props.offsetTop));
|
||||||
|
|
||||||
const style = computed(() => {
|
const style = computed<CSSProperties | undefined>(() => {
|
||||||
if (!state.fixed) {
|
if (!state.fixed) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const top = offsetTop.value ? `${offsetTop.value}px` : null;
|
const top = offsetTop.value ? `${offsetTop.value}px` : undefined;
|
||||||
const transform = state.transform
|
const transform = state.transform
|
||||||
? `translate3d(0, ${state.transform}px, 0)`
|
? `translate3d(0, ${state.transform}px, 0)`
|
||||||
: null;
|
: undefined;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
top,
|
top,
|
||||||
zIndex: props.zIndex,
|
zIndex: props.zIndex !== undefined ? +props.zIndex : undefined,
|
||||||
transform,
|
transform,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
const emitScrollEvent = (scrollTop) => {
|
const emitScrollEvent = (scrollTop: number) => {
|
||||||
emit('scroll', {
|
emit('scroll', {
|
||||||
scrollTop,
|
scrollTop,
|
||||||
isFixed: state.fixed,
|
isFixed: state.fixed,
|
||||||
@ -64,7 +64,7 @@ export default createComponent({
|
|||||||
};
|
};
|
||||||
|
|
||||||
const onScroll = () => {
|
const onScroll = () => {
|
||||||
if (isHidden(root)) {
|
if (!root.value || isHidden(root)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,13 +104,12 @@ export default createComponent({
|
|||||||
};
|
};
|
||||||
|
|
||||||
useEventListener('scroll', onScroll, { target: scrollParent });
|
useEventListener('scroll', onScroll, { target: scrollParent });
|
||||||
|
|
||||||
useVisibilityChange(root, onScroll);
|
useVisibilityChange(root, onScroll);
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
const { fixed, height } = state;
|
const { fixed, height } = state;
|
||||||
const rootStyle = {
|
const rootStyle: CSSProperties = {
|
||||||
height: fixed ? `${height}px` : null,
|
height: fixed ? `${height}px` : undefined,
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
Loading…
x
Reference in New Issue
Block a user