• 案例 - 拖拽上传文件,生成缩略图


    直接看效果

    实现代码

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <title>拖拽上传文件title>
    7. <style>
    8. /* 拖拽容器 */
    9. .box-container {
    10. position: relative;
    11. display: flex;
    12. justify-content: center;
    13. align-items: center;
    14. border: 1px dashed black;
    15. border-radius: 7px;
    16. width: 200px;
    17. height: 100px;
    18. }
    19. .box1 {
    20. position: absolute;
    21. width: 10px;
    22. height: 50px;
    23. background: black;
    24. }
    25. .box2 {
    26. position: absolute;
    27. width: 50px;
    28. height: 10px;
    29. background: black;
    30. }
    31. .dropbox {
    32. position: absolute;
    33. opacity: 0;
    34. width: 100%;
    35. height: 100%;
    36. line-height: 100px;
    37. text-align: center;
    38. font-size: 20px;
    39. font-weight: 900;
    40. background: rgb(0, 0, 0, 0.3);
    41. }
    42. /* 图片容器 */
    43. .img-container {
    44. width: 500px;
    45. height: 500px;
    46. border: 1px solid black;
    47. border-radius: 10px;
    48. box-shadow: 2px 2px 20px 3px black;
    49. overflow: auto;
    50. }
    51. .img-item {
    52. float: left;
    53. width: 50px;
    54. height: 50px;
    55. margin: 5px;
    56. border: 1px solid black;
    57. border-radius: 10px;
    58. }
    59. style>
    60. head>
    61. <body>
    62. <div class="box-container">
    63. <div class="box1">div>
    64. <div class="box2">div>
    65. <div class="dropbox">拖拽上传文件div>
    66. div>
    67. <br>
    68. <hr>
    69. <br>
    70. <div class="img-container">div>
    71. body>
    72. <script>
    73. let dropbox = document.querySelector('.dropbox')
    74. dropbox.addEventListener("dragenter", dragenter, false)
    75. dropbox.addEventListener("dragover", dragover, false)
    76. dropbox.addEventListener("drop", drop, false)
    77. dropbox.addEventListener('dragleave', dragleave, false)
    78. function dragenter(e) {
    79. e.stopPropagation();
    80. e.preventDefault();
    81. }
    82. // 进入拖拽容器
    83. function dragover(e) {
    84. e.stopPropagation();
    85. e.preventDefault();
    86. dropbox.style.cssText = `
    87. opacity: 1;`
    88. }
    89. // 离开拖拽容器
    90. function dragleave(e) {
    91. e.stopPropagation();
    92. e.preventDefault();
    93. dropbox.style.cssText = `
    94. opacity: 0;`
    95. }
    96. // 将拖拽标签放在拖拽容器上(鼠标松开)
    97. function drop(e) {
    98. e.stopPropagation();
    99. e.preventDefault();
    100. dropbox.style.cssText = `
    101. opacity: 0;`
    102. const dt = e.dataTransfer;
    103. const files = dt.files;
    104. console.log(dt.files);
    105. handleFiles(files);
    106. }
    107. let imgContainer = document.querySelector('.img-container')
    108. /**
    109. * handleFiles() 处理文件列表
    110. *
    111. * @param files 文件列表
    112. * @return
    113. */
    114. function handleFiles(files) {
    115. for (const file of files) {
    116. if (!file.type.startsWith("image")) {
    117. continue
    118. }
    119. const img = document.createElement('img')
    120. img.classList.add('img-item')
    121. // 读取文件流
    122. const reader = new FileReader()
    123. reader.onload = (e) => {
    124. img.src = e.target.result
    125. imgContainer.appendChild(img)
    126. }
    127. reader.readAsDataURL(file)
    128. }
    129. }
    130. script>
    131. html>

  • 相关阅读:
    vue+vite+ts添加eslint校验和代码提交校验
    计算机缺失d3dcompiler_47.dll解决方案,如何修复电脑缺失d3d文件
    【C++】——类和对象(中)
    MybatisPlus中queryWrapper的or的使用
    06. Nginx进阶-Nginx代理服务
    传统制造业如何进行数据分析?_光点科技
    创建定时任务——crontab的使用
    深度学习入门(五十六)循环神经网络——循环神经网络RNN
    js对三层数组进行数据筛选
    【温故而知新】构建高可用Linux服务器(一)
  • 原文地址:https://blog.csdn.net/Qhx20040819/article/details/134298414