• Vue3文件拖拽上传


    在这里插入图片描述

    <template>
        <div :class="['drag', { 'drag-active': active }]" ref="drag">
            <p class="drag-title">未选择文件/文件夹p>
            <p class="drag-subtile">
                支持拖拽到此区域上传,支持选择多个文件/文件夹
                <br />
                单个文件夹最大支持512GB
            p>
        div>
    template>
    <script setup>
    import { ref, onMounted, onBeforeUnmount } from 'vue'
    const drag = ref(null)
    const active = ref(false)
    onMounted(() => {
        drag.value.addEventListener('drop', handleDrop)
        drag.value.addEventListener('dragleave', (e) => {
            active.value = false
            e.preventDefault()
        })
        drag.value.addEventListener('dragenter', (e) => {
            active.value = true
            e.preventDefault()
        })
        drag.value.addEventListener('dragover', (e) => {
            active.value = true
            e.preventDefault()
        })
    })
    
    onBeforeUnmount(() => {
        drag.value.removeEventListener('drop', handleDrop)
    })
    
    const emit = defineEmits(["file"])
    const handleDrop = (e) => {
        e.preventDefault()
        active.value = false
        emit("file", Array.from(e.dataTransfer.files))
    }
    
    script>
    
    <style lang="scss" scoped>
    .drag {
        height: 220px;
        border: 1px dashed #DEDEDE;
        border-radius: 4px;
        display: flex;
        align-items: center;
        flex-direction: column;
        justify-content: center;
    
        &-active {
            border: 1px dashed #2260FF;
        }
    
        &-title {
            font-size: 14px;
        }
    
        &-subtile {
            font-size: 12px;
            color: #999999;
            margin-top: 30px;
            text-align: center;
            line-height: unset;
        }
    }
    style>
    
    • 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
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
  • 相关阅读:
    牛客刷题记录(常见笔试题)
    期货平盘(期货大单压盘)
    ip_vs 原理解析 (四)hook 后的开始 NF_INET_LOCAL_OUT
    Android Studio compose的简单使用与案例实现
    Android Studio下运行java main 方法
    Python--用户输入与While循环
    理解SpringBoot的自动装配
    YOLOv2解析 | 批归一化 锚 主干网
    Qt 信号与槽
    python学习笔记(3)—— 数据结构
  • 原文地址:https://blog.csdn.net/AK852369/article/details/127532004