当前位置:首页 > JavaScript

js实现图片预览

2026-01-12 13:31:50JavaScript

使用FileReader API实现图片预览

通过FileReader对象读取用户选择的图片文件并显示预览:

const input = document.getElementById('imageInput');
const preview = document.getElementById('imagePreview');

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

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

使用URL.createObjectURL实现预览

对于临时预览需求,可以使用更高效的URL.createObjectURL方法:

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

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

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

多图片预览实现

处理多文件选择并生成预览:

const multiInput = document.getElementById('multiImageInput');
const previewContainer = document.getElementById('previewContainer');

multiInput.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.height = '100px';
      previewContainer.appendChild(img);
    };
    reader.readAsDataURL(file);
  });
});

拖放图片预览实现

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

const dropArea = document.getElementById('dropArea');

dropArea.addEventListener('dragover', (e) => {
  e.preventDefault();
  dropArea.classList.add('dragover');
});

dropArea.addEventListener('dragleave', () => {
  dropArea.classList.remove('dragover');
});

dropArea.addEventListener('drop', (e) => {
  e.preventDefault();
  dropArea.classList.remove('dragover');

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

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

预览时限制图片尺寸

在上传前检查图片尺寸:

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

  const img = new Image();
  img.onload = function() {
    if (this.width > 2000 || this.height > 2000) {
      alert('图片尺寸过大');
      return;
    }
    preview.src = URL.createObjectURL(file);
  };
  img.src = URL.createObjectURL(file);
});

添加预览样式优化

为预览图片添加基础样式:

js实现图片预览

#imagePreview {
  max-width: 100%;
  max-height: 300px;
  object-fit: contain;
  border: 1px dashed #ccc;
  margin-top: 10px;
}

#previewContainer img {
  margin: 5px;
  border: 1px solid #eee;
}

兼容性注意事项

FileReader API兼容大多数现代浏览器,但对于IE10以下版本需要polyfill。URL.createObjectURL方法在IE10+中可用。实际应用中应添加适当的错误处理代码,检查文件类型是否为图像,并处理读取失败的情况。

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

相关文章

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现换肤

js实现换肤

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

H5图片实现地图

H5图片实现地图

实现H5图片地图的方法 在H5中实现图片地图功能,可以通过以下方式完成。图片地图允许用户在图片的特定区域点击,触发不同的交互效果。 使用HTML的<map>和<area>标签…

vue实现图片查看

vue实现图片查看

实现图片查看功能 在Vue中实现图片查看功能可以通过多种方式完成,常见的有使用原生HTML5的<dialog>元素、第三方组件库(如Element UI、Vant等)或专用插件(如view…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <di…