当前位置:首页 > JavaScript

js实现文件夹效果

2026-04-05 01:12:07JavaScript

使用HTML和CSS创建文件夹结构

通过HTML的<ul><li>元素模拟文件夹层级结构,配合CSS实现展开/折叠效果:

<div class="folder-structure">
  <ul>
    <li class="folder">Documents
      <ul>
        <li class="file">report.pdf</li>
        <li class="folder">Projects
          <ul>
            <li class="file">project1.js</li>
          </ul>
        </li>
      </ul>
    </li>
  </ul>
</div>

<style>
.folder { cursor: pointer; position: relative; }
.folder::before { content: '📁 '; }
.folder.collapsed::before { content: '📂 '; }
.file::before { content: '📄 '; }
ul { padding-left: 20px; list-style: none; }
.collapsed > ul { display: none; }
</style>

<script>
document.querySelectorAll('.folder').forEach(folder => {
  folder.addEventListener('click', (e) => {
    e.stopPropagation();
    folder.classList.toggle('collapsed');
  });
});
</script>

使用第三方库实现高级效果

对于更复杂的需求,可以考虑使用以下JavaScript库:

  1. jsTree:提供完整的树形结构功能

    $('#container').jstree({
    'core' : {
     'data' : [
       { "text" : "Root", "children" : [
         { "text" : "Folder 1" },
         { "text" : "Folder 2" }
       ]}
     ]
    }
    });
  2. FancyTree:支持懒加载和多种交互方式

    $("#tree").fancytree({
    source: [
     {title: "Documents", folder: true, children: [
       {title: "Project1", folder: true},
       {title: "Project2", folder: true}
     ]}
    ]
    });

文件系统API交互

使用浏览器File System Access API实现真实文件操作:

async function openFolder() {
  const dirHandle = await window.showDirectoryPicker();
  for await (const entry of dirHandle.values()) {
    console.log(entry.kind === 'directory' ? '📁' : '📄', entry.name);
  }
}

虚拟文件系统实现

创建内存中的虚拟文件系统:

class VirtualFileSystem {
  constructor() {
    this.fs = { '/': { type: 'dir', children: {} } };
  }

  mkdir(path) {
    const parts = path.split('/').filter(Boolean);
    let current = this.fs['/'];
    parts.forEach(part => {
      if (!current.children[part]) {
        current.children[part] = { type: 'dir', children: {} };
      }
      current = current.children[part];
    });
  }
}

const vfs = new VirtualFileSystem();
vfs.mkdir('/documents/projects');

可视化拖放功能

实现文件夹和文件的拖放排序:

js实现文件夹效果

document.addEventListener('DOMContentLoaded', () => {
  const folders = document.querySelectorAll('.folder');
  folders.forEach(folder => {
    folder.draggable = true;
    folder.addEventListener('dragstart', (e) => {
      e.dataTransfer.setData('text/plain', folder.textContent);
    });
    folder.addEventListener('dragover', (e) => {
      e.preventDefault();
      e.target.classList.add('drag-over');
    });
    folder.addEventListener('drop', (e) => {
      e.preventDefault();
      const data = e.dataTransfer.getData('text/plain');
      console.log(`Dropped ${data} into ${e.target.textContent}`);
    });
  });
});

标签: 文件夹效果
分享给朋友:

相关文章

css3制作立体效果

css3制作立体效果

使用 transform 属性实现立体旋转 通过 transform-style: preserve-3d 和 rotateX/Y/Z 实现 3D 空间变换: .container { tr…

jquery效果

jquery效果

jQuery 动画效果 jQuery 提供了多种内置动画效果,可用于实现平滑的页面交互。常用的方法包括 show()、hide()、toggle()、fadeIn()、fadeOut()、slideU…

vue实现翻书效果

vue实现翻书效果

Vue实现翻书效果的方法 翻书效果可以通过CSS动画和Vue的动态绑定实现,以下是几种常见的实现方式: 使用CSS transform和transition 通过CSS的transform属性实现翻…

react如何添加效果

react如何添加效果

React 添加动画效果的方法 使用 CSS 过渡动画 在 React 组件中直接通过 className 或 style 属性应用 CSS 过渡效果。定义 CSS 类包含 transition 属性…

vue实现翻牌效果

vue实现翻牌效果

实现翻牌效果的基本思路 翻牌效果通常指卡片正面和背面的翻转动画,可以通过CSS 3D变换和Vue的过渡系统实现。核心是利用transform-style: preserve-3d和rotateY旋转完…

vue实现筛选效果

vue实现筛选效果

Vue 实现筛选效果的方法 基于计算属性的筛选 在 Vue 中可以通过计算属性实现数据的动态筛选。定义一个计算属性,根据用户输入的筛选条件返回过滤后的数据列表。 <template>…