当前位置:首页 > JavaScript

js 实现图片功能

2026-01-30 13:25:31JavaScript

图片加载与显示

在JavaScript中加载并显示图片可以通过Image对象或直接操作DOM实现。创建一个新的Image实例并设置其src属性即可触发图片加载:

const img = new Image();
img.src = 'path/to/image.jpg';
document.body.appendChild(img);

通过DOM操作动态添加<img>标签:

const imgElement = document.createElement('img');
imgElement.src = 'path/to/image.png';
imgElement.alt = 'Description';
document.getElementById('container').appendChild(imgElement);

图片预加载

预加载多张图片可提升用户体验,使用Promise结合Image对象实现批量加载:

function preloadImages(urls) {
  return Promise.all(
    urls.map(url => new Promise((resolve) => {
      const img = new Image();
      img.src = url;
      img.onload = () => resolve(url);
    }))
  );
}

preloadImages(['image1.jpg', 'image2.png']).then(() => {
  console.log('All images loaded');
});

图片懒加载

实现懒加载需结合IntersectionObserver API,当图片进入视口时再加载:

js 实现图片功能

const lazyImages = document.querySelectorAll('img[data-src]');
const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      const img = entry.target;
      img.src = img.dataset.src;
      observer.unobserve(img);
    }
  });
});

lazyImages.forEach(img => observer.observe(img));

HTML中需将实际URL放在data-src属性中:

<img data-src="path/to/lazy-image.jpg" alt="Lazy Loaded">

图片压缩与裁剪

使用Canvas API可实现客户端图片压缩与裁剪。以下示例将图片压缩为指定质量:

js 实现图片功能

function compressImage(file, quality = 0.8) {
  return new Promise((resolve) => {
    const reader = new FileReader();
    reader.onload = (e) => {
      const img = new Image();
      img.onload = () => {
        const canvas = document.createElement('canvas');
        canvas.width = img.width;
        canvas.height = img.height;
        const ctx = canvas.getContext('2d');
        ctx.drawImage(img, 0, 0);
        canvas.toBlob((blob) => resolve(blob), 'image/jpeg', quality);
      };
      img.src = e.target.result;
    };
    reader.readAsDataURL(file);
  });
}

图片滤镜效果

通过Canvas的getImageDataputImageData方法可操作像素数据实现滤镜:

function applyGrayscale(imageElement) {
  const canvas = document.createElement('canvas');
  canvas.width = imageElement.width;
  canvas.height = imageElement.height;
  const ctx = canvas.getContext('2d');
  ctx.drawImage(imageElement, 0, 0);

  const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
  const data = imageData.data;

  for (let i = 0; i < data.length; i += 4) {
    const avg = (data[i] + data[i + 1] + data[i + 2]) / 3;
    data[i] = avg;     // R
    data[i + 1] = avg; // G
    data[i + 2] = avg; // B
  }

  ctx.putImageData(imageData, 0, 0);
  return canvas.toDataURL();
}

图片上传与预览

实现文件上传前的本地预览:

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

  const reader = new FileReader();
  reader.onload = (event) => {
    const preview = document.getElementById('preview');
    preview.src = event.target.result;
  };
  reader.readAsDataURL(file);
});

响应式图片处理

使用window.matchMedia实现响应式图片切换:

function checkScreenSize() {
  const mediaQuery = window.matchMedia('(max-width: 768px)');
  const img = document.getElementById('responsive-img');
  img.src = mediaQuery.matches ? 'mobile.jpg' : 'desktop.jpg';
}

window.addEventListener('resize', checkScreenSize);
checkScreenSize(); // 初始检查

标签: 功能图片
分享给朋友:

相关文章

vue实现分页功能

vue实现分页功能

Vue 分页功能实现 在 Vue 中实现分页功能通常需要结合后端 API 或前端数据分页逻辑。以下是两种常见的实现方式: 前端分页实现 适用于数据量较小的情况,直接在 Vue 组件中处理分页逻辑。…

vue实现图片打点

vue实现图片打点

实现图片打点的基本思路 图片打点功能通常指在图片上添加可交互的标记点,点击或悬停时显示相关信息。Vue实现该功能需要结合DOM操作和事件监听。 核心步骤 准备图片和容器 在Vue组件中设置一个相对…

vue的艾特功能实现

vue的艾特功能实现

Vue 中的 @ 功能实现 Vue 中的 @ 符号是 v-on 指令的简写,用于绑定事件监听器。以下是具体实现方式: 基本语法 <button @click="handleClick">…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

vue 实现图片

vue 实现图片

Vue 实现图片加载与展示的方法 在 Vue 中实现图片加载和展示可以通过多种方式完成,包括静态资源引用、动态绑定、懒加载等。以下是几种常见的方法: 静态资源引用 将图片放在项目的 public 或…

h5实现点击复制功能

h5实现点击复制功能

使用document.execCommand方法(兼容旧浏览器) 通过document.execCommand('copy')实现复制功能,需先选中文本内容。创建一个隐藏的textarea或input…