当前位置:首页 > JavaScript

js实现预览

2026-04-03 19:26:46JavaScript

实现图片预览功能

使用FileReader对象读取文件并生成预览URL。以下是基于用户选择文件的预览实现:

const input = document.querySelector('input[type="file"]');
input.addEventListener('change', function(e) {
  const file = e.target.files[0];
  if (!file.type.match('image.*')) return;

  const reader = new FileReader();
  reader.onload = function(event) {
    const img = document.createElement('img');
    img.src = event.target.result;
    document.body.appendChild(img);
  };
  reader.readAsDataURL(file);
});

多文件预览处理

通过循环处理多个文件的选择:

const previewContainer = document.getElementById('preview-container');
document.getElementById('multi-file').addEventListener('change', function(e) {
  previewContainer.innerHTML = '';
  Array.from(e.target.files).forEach(file => {
    if (!file.type.match('image.*')) return;

    const reader = new FileReader();
    reader.onload = function(event) {
      const img = document.createElement('img');
      img.src = event.target.result;
      img.style.maxWidth = '200px';
      previewContainer.appendChild(img);
    };
    reader.readAsDataURL(file);
  });
});

视频预览实现

处理视频文件的预览需要检查视频类型:

const videoInput = document.getElementById('video-upload');
videoInput.addEventListener('change', function(e) {
  const file = e.target.files[0];
  if (!file.type.match('video.*')) return;

  const video = document.createElement('video');
  video.controls = true;
  video.src = URL.createObjectURL(file);
  video.style.maxWidth = '500px';
  document.body.appendChild(video);
});

拖放预览功能

实现拖放区域的预览功能:

const dropArea = document.getElementById('drop-area');
['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => {
  dropArea.addEventListener(eventName, preventDefaults, false);
});

function preventDefaults(e) {
  e.preventDefault();
  e.stopPropagation();
}

dropArea.addEventListener('drop', function(e) {
  const dt = e.dataTransfer;
  const files = dt.files;
  handleFiles(files);
});

function handleFiles(files) {
  Array.from(files).forEach(file => {
    const reader = new FileReader();
    reader.onload = function(event) {
      const preview = document.createElement('div');
      preview.className = 'preview-item';
      preview.innerHTML = `<img src="${event.target.result}" style="max-width: 150px;">`;
      dropArea.appendChild(preview);
    };
    reader.readAsDataURL(file);
  });
}

预览样式优化

为预览元素添加基本样式:

.preview-item {
  display: inline-block;
  margin: 10px;
  position: relative;
}

.preview-item img {
  max-height: 150px;
  border: 1px solid #ddd;
  border-radius: 4px;
  padding: 5px;
}

#drop-area {
  border: 2px dashed #ccc;
  padding: 20px;
  text-align: center;
}

文件类型验证

在预览前验证文件类型:

function isValidFileType(file) {
  const validTypes = ['image/jpeg', 'image/png', 'image/gif', 'video/mp4'];
  return validTypes.includes(file.type);
}

document.getElementById('file-input').addEventListener('change', function(e) {
  const file = e.target.files[0];
  if (!isValidFileType(file)) {
    alert('请选择有效的图片或视频文件');
    return;
  }
  // 处理预览逻辑
});

预览清理功能

添加清除预览的按钮功能:

js实现预览

document.getElementById('clear-preview').addEventListener('click', function() {
  document.getElementById('preview-container').innerHTML = '';
  document.getElementById('file-input').value = '';
});

标签: js
分享给朋友:

相关文章

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…