html大型GLTF文件的离线存储代码使用选择按钮选择文件保存按钮保存文件搜索框搜索并显示文件完整代码
时间: 2024-09-16 19:02:09 浏览: 54
HTML和JavaScript可以结合File API来实现这样的功能,下面是一个简单的示例,展示了如何创建一个HTML页面,包含一个文件输入、选择按钮、保存按钮以及一个搜索框来处理大型GLTF文件的离线存储:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>GLTF File Manager</title>
</head>
<body>
<h1>GLTF File Manager</h1>
<!-- 选择文件 -->
<input type="file" id="gltf-file-input" multiple accept=".gltf" style="display:none;">
<label for="gltf-file-input">Select GLTF files:</label>
<!-- 保存按钮 -->
<button onclick="saveFiles()">Save Selected Files</button>
<!-- 搜索框和结果列表 -->
<input type="text" id="search-box" placeholder="Search...">
<ul id="file-list"></ul>
<script>
function handleFileSelect(e) {
const files = e.target.files;
if (files.length > 0) {
displayFiles(files);
}
}
function saveFiles() {
const selectedFiles = document.querySelectorAll('#file-list li input[type=file]:checked');
// 这里需要将文件转换为Blob或其他合适的格式,并通过下载链接进行离线保存
// 实际代码可能会涉及进度条、错误处理等,此处简化示例
Array.from(selectedFiles).forEach(file => {
const blob = new Blob([file], {type: 'model/gltf-binary'});
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = file.name;
link.click();
});
}
function displayFiles(files) {
const list = document.getElementById('file-list');
list.innerHTML = '';
files.forEach(file => {
const li = document.createElement('li');
const checkbox = document.createElement('input');
checkbox.type = 'checkbox';
checkbox.src = URL.createObjectURL(file);
checkbox.addEventListener('change', () => {
searchBox.value = '';
saveButton.disabled = !checkbox.checked;
});
li.appendChild(checkbox);
const fileName = document.createElement('span');
fileName.textContent = file.name;
li.appendChild(fileName);
list.appendChild(li);
});
// 搜索功能
const searchBox = document.getElementById('search-box');
searchBox.addEventListener('input', () => {
const searchTerm = searchBox.value.toLowerCase();
const filteredItems = list.querySelectorAll('li:not(:contains(\'' + searchTerm + '\'))');
filteredItems.forEach(item => item.style.display = 'none');
const matchingItems = list.querySelectorAll(`li:contains(\'' + searchTerm + '\')`);
matchingItems.forEach(item => item.style.display = '');
});
}
// 初始化文件选择事件监听
document.getElementById('gltf-file-input').addEventListener('change', handleFileSelect);
</script>
</body>
</html>
```
这个示例仅提供基础功能,实际应用中可能需要添加更多的错误处理、用户交互反馈以及文件预览等功能。
阅读全文