当前位置:首页 > 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 实现图片预览的方法 使用 Element UI 的 el-image 组件 Element UI 提供了 el-image 组件,支持图片预览功能。通过设置 preview-src-list…

vue实现答题功能

vue实现答题功能

Vue实现答题功能的基本思路 在Vue中实现答题功能通常需要以下几个核心模块:题目数据管理、用户交互处理、答题状态跟踪和结果计算。通过组件化开发可以更好地组织代码结构。 数据结构设计 答题功能的基础…

网页设计制作css图片

网页设计制作css图片

CSS图片处理基础方法 在网页设计中,CSS可以控制图片的尺寸、位置、边框等样式属性。通过<img>标签或背景图方式引入图片后,使用CSS属性进行调整。 img { width: 1…

vue实现拖动图片验证

vue实现拖动图片验证

Vue 实现拖动图片验证功能 核心思路 拖动图片验证通常需要用户将图片拖动到指定区域或按正确顺序排列。实现时需要处理拖拽事件、验证逻辑和视觉反馈。 实现步骤 1. 基础组件结构 <templ…

php实现留言板功能

php实现留言板功能

PHP 留言板功能实现 数据库设计 创建数据库表 messages,包含以下字段: id:自增主键 name:留言者姓名(VARCHAR) email:留言者邮箱(VARCHAR) content:…

php实现分页功能

php实现分页功能

PHP实现分页功能的方法 数据库查询与分页逻辑 使用SQL的LIMIT和OFFSET实现分页。假设每页显示10条数据,当前页码为$page: $perPage = 10; $page = isset…