# useDefaultSpanConfig

import { debounce } from 'lodash-es'
import { useEffect, useState } from 'react'

/**
 * @key 列数
 * @value 对应ant-col-span的值
 */
const spanCol = {
    2: 12,
    3: 8,
    4: 6,
    6: 4
}

/**
 * 屏幕分辨变化时获取窗口宽度
 */
export const useWindowWidth = () => {
    const [windowWidth, setWindowWidth] = useState(window.innerWidth)
    useEffect(() => {
        const handleResize = debounce(() => {
            setWindowWidth(window.innerWidth)
        }, 50)
        window.addEventListener('resize', handleResize)
        return () => {
            window.removeEventListener('resize', handleResize)
        }
    }, [])
    return windowWidth
}

export const useDefaultSpanConfig = () => {
    const windowWidth = useWindowWidth()

    if (windowWidth > 1920) {
        return spanCol[6]
    } else if (windowWidth > 1440) {
        return spanCol[4]
    } else if (windowWidth > 1024) {
        return spanCol[3]
    } else return spanCol[2]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

# 自定义hooks和响应式设计

使用window.innerWidth配合Col的span属性来控制元素排列

import { ref, onMounted, onBeforeUnmount } from 'vue';

/**
 * @key 列数
 * @value 对应ant-col-span的值
 */
const spanCol = {
    2: 12,
    3: 8,
    4: 6,
    6: 4,
};Ï

export const useWindowWidth = () => {
    const windowWidth = ref(window.innerWidth);

    const handleResize = () => {
        windowWidth.value = window.innerWidth;
    };

    onMounted(() => {
        window.addEventListener('resize', handleResize);
    });

    onBeforeUnmount(() => {
        window.removeEventListener('resize', handleResize);
    });

    return windowWidth;
};

export const useDefaultSpanConfig = () => {
    const windowWidth = useWindowWidth();

    const spaonConfig = computed(() => {
        if (windowWidth.value > 1920) {
            return spanCol[6]
        }
        if (windowWidth.value > 1440) {
            return spanCol[4]
        }
        if (windowWidth.value > 1024) {
            return spanCol[3]
        } else {
            return spanCol[2]
        }
    })
    return spaonConfig
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49