<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <style> body { margin: 0; padding: 20px; font-family: Arial, sans-serif; transition: background-color 0.3s ease; } .file-drop { border: 2px dashed #ccc; padding: 20px; text-align: center; cursor: pointer; } .file-drop:hover { background-color: #f0f0f0; } .file-list { margin-top: 20px; } .file-list ul { list-style-type: none; padding: 0; } .file-list li { margin-bottom: 5px; } </style> </head> <body> <div id="app"> <div class="file-drop" v-if="!file"> <p>拖拽单个文件到这里 (仅限 .jpg 和 .png 文件)</p> </div> <div class="file-list" v-else> <ul> <li> {{ file.name }} ({{ file.size }} bytes) </li> </ul> </div> </div> <!-- 引入 Vue 2 CDN --> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/vue@2.6.1-dev.js"></script> <script> new Vue({ el: '#app', data() { return { file: null }; }, methods: { handleDragOver(event) { event.preventDefault(); document.body.style.backgroundColor = '#e0f7fa'; // 拖动时改变背景颜色 }, handleDragLeave() { document.body.style.backgroundColor = ''; // 拖动离开时恢复背景颜色 }, handleDrop(event) { event.preventDefault(); document.body.style.backgroundColor = ''; // 放开时恢复背景颜色 const files = event.dataTransfer.files; if (files.length === 1) { const file = files[0]; const allowedTypes = ['image/jpeg', 'image/png']; if (allowedTypes.includes(file.type)) { this.file = file; } else { alert('只能拖拽 .jpg 和 .png 文件'); } } else { alert('只能拖拽单个文件'); } } }, mounted() { document.body.addEventListener('dragover', this.handleDragOver); document.body.addEventListener('dragleave', this.handleDragLeave); document.body.addEventListener('drop', this.handleDrop); }, beforeDestroy() { document.body.removeEventListener('dragover', this.handleDragOver); document.body.removeEventListener('dragleave', this.handleDragLeave); document.body.removeEventListener('drop', this.handleDrop); } }); </script> </body> </html>
网友回复