当前位置:首页 > JavaScript

js实现图片预览

2026-02-28 17:58:49JavaScript

使用 FileReader API 实现图片预览

通过 FileReader 对象读取用户选择的图片文件,转换为 Data URL 后显示在页面上。以下是核心代码示例:

const input = document.getElementById('file-input');
const preview = document.getElementById('preview');

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

  const reader = new FileReader();
  reader.onload = function(e) {
    preview.src = e.target.result;
  };
  reader.readAsDataURL(file);
});

使用 URL.createObjectURL 实现预览

该方法通过创建临时对象 URL 实现更高效的预览,特别适合大文件:

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

  const objectURL = URL.createObjectURL(file);
  preview.src = objectURL;

  // 记得在不需要时释放内存
  // preview.onload = function() {
  //   URL.revokeObjectURL(objectURL);
  // };
});

多图预览实现

通过循环处理多个文件实现批量预览:

const multiInput = document.getElementById('multi-file');
const gallery = document.getElementById('gallery');

multiInput.addEventListener('change', function(e) {
  gallery.innerHTML = '';
  Array.from(e.target.files).forEach(file => {
    if (!file.type.match('image.*')) return;

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

拖拽上传预览

添加拖拽区域的事件监听实现拖放预览:

const dropZone = document.getElementById('drop-zone');

dropZone.addEventListener('dragover', function(e) {
  e.preventDefault();
  dropZone.classList.add('dragover');
});

dropZone.addEventListener('dragleave', function() {
  dropZone.classList.remove('dragover');
});

dropZone.addEventListener('drop', function(e) {
  e.preventDefault();
  dropZone.classList.remove('dragover');

  const file = e.dataTransfer.files[0];
  if (!file.type.match('image.*')) return;

  const reader = new FileReader();
  reader.onload = function(e) {
    preview.src = e.target.result;
  };
  reader.readAsDataURL(file);
});

注意事项

  1. 文件类型验证应同时检查 file.type 和文件扩展名
  2. 移动端可能需要添加 accept="image/*" 属性
  3. 大文件预览建议使用 URL.createObjectURL
  4. 记得清除之前的预览结果或释放对象 URL
  5. 考虑添加加载状态提示和错误处理

完整实现通常需要配合 HTML 结构:

<input type="file" id="file-input" accept="image/*">
<img id="preview" style="max-width: 300px;">

<div id="drop-zone">拖拽图片到此处</div>
<div id="gallery"></div>

js实现图片预览

标签: 图片js
分享给朋友:

相关文章

vue实现图片拖拽

vue实现图片拖拽

实现图片拖拽功能 在Vue中实现图片拖拽功能可以通过HTML5的拖放API结合Vue的事件处理来完成。以下是一个完整的实现方法: 基础拖拽实现 为图片元素添加draggable属性并绑定相关事件…

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置…