当前位置:首页 > JavaScript

js可以实现的图片效果

2026-04-05 00:03:46JavaScript

图片滤镜效果

通过Canvas API或CSS滤镜属性实现多种图片滤镜效果。常见的滤镜包括灰度、模糊、亮度调整、对比度调整等。CSS滤镜使用filter属性,Canvas通过像素级操作实现更复杂的滤镜。

// CSS滤镜示例
img.style.filter = 'grayscale(50%) blur(2px)';

// Canvas滤镜示例
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0);
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
// 像素处理逻辑
ctx.putImageData(imageData, 0, 0);

图片懒加载

使用Intersection Observer API实现图片懒加载,提升页面性能。当图片进入视口时再加载实际资源,减少初始页面加载时间。

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));

图片裁剪与缩放

通过Canvas实现图片的裁剪、缩放和旋转功能。常用于头像编辑、图片上传预处理等场景。

function cropImage(img, x, y, width, height) {
  const canvas = document.createElement('canvas');
  canvas.width = width;
  canvas.height = height;
  const ctx = canvas.getContext('2d');
  ctx.drawImage(img, x, y, width, height, 0, 0, width, height);
  return canvas.toDataURL();
}

图片瀑布流布局

实现响应式图片瀑布流布局,根据容器宽度自动计算列数和图片位置。常用于图片展示类网站。

function createMasonry(container, images, columnCount) {
  const columnHeights = Array(columnCount).fill(0);
  images.forEach(img => {
    const minHeight = Math.min(...columnHeights);
    const columnIndex = columnHeights.indexOf(minHeight);
    img.style.position = 'absolute';
    img.style.top = `${minHeight}px`;
    img.style.left = `${columnIndex * (container.offsetWidth / columnCount)}px`;
    columnHeights[columnIndex] += img.offsetHeight;
  });
  container.style.height = `${Math.max(...columnHeights)}px`;
}

图片拖拽上传

实现拖拽上传图片功能,支持预览和文件验证。通过HTML5的拖放API和FileReader实现。

const dropArea = document.getElementById('drop-area');
dropArea.addEventListener('drop', (e) => {
  e.preventDefault();
  const files = e.dataTransfer.files;
  if (files.length && files[0].type.match('image.*')) {
    const reader = new FileReader();
    reader.onload = (event) => {
      const img = document.createElement('img');
      img.src = event.target.result;
      dropArea.appendChild(img);
    };
    reader.readAsDataURL(files[0]);
  }
});

图片放大镜效果

创建图片局部放大效果,通过计算鼠标位置和放大区域实现。常用于产品细节展示。

function createMagnifier(img, zoom) {
  const magnifier = document.createElement('div');
  magnifier.style.position = 'absolute';
  img.parentElement.addEventListener('mousemove', (e) => {
    const rect = img.getBoundingClientRect();
    const x = e.clientX - rect.left;
    const y = e.clientY - rect.top;
    magnifier.style.backgroundImage = `url(${img.src})`;
    magnifier.style.backgroundSize = `${img.width * zoom}px ${img.height * zoom}px`;
    magnifier.style.backgroundPosition = `-${x * zoom}px -${y * zoom}px`;
  });
  return magnifier;
}

图片压缩上传

在前端实现图片压缩后再上传,减少服务器负担和带宽消耗。通过Canvas的toDataURL方法调整图片质量。

js可以实现的图片效果

function compressImage(file, quality) {
  return new Promise((resolve) => {
    const reader = new FileReader();
    reader.onload = (event) => {
      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);
        resolve(canvas.toDataURL('image/jpeg', quality));
      };
      img.src = event.target.result;
    };
    reader.readAsDataURL(file);
  });
}

分享给朋友:

相关文章

h5可以实现框架功能么

h5可以实现框架功能么

H5实现框架功能的可行性 HTML5(H5)本身是一组标准的网页技术,包括HTML、CSS和JavaScript。虽然H5不直接提供类似传统前端框架(如React、Vue)的完整功能,但可以通过以下方…

h5页面滑动效果实现

h5页面滑动效果实现

实现H5页面滑动效果的方法 H5页面滑动效果可以通过多种方式实现,包括原生JavaScript、CSS动画或第三方库。以下是几种常见的方法: 使用CSS Scroll Snap CSS Scroll…

vue实现玻璃效果

vue实现玻璃效果

实现玻璃效果的方法 在Vue中实现玻璃效果(毛玻璃或磨砂玻璃)可以通过CSS的backdrop-filter属性结合Vue的动态样式绑定来实现。以下是具体步骤: 使用CSS backdrop-fil…

vue实现开关效果

vue实现开关效果

使用Vue实现开关效果 使用v-model绑定数据 通过v-model绑定一个布尔值来控制开关状态。当用户点击开关时,布尔值会自动更新。 <template> <div cla…

vue 实现动画效果

vue 实现动画效果

Vue 实现动画效果的方法 Vue 提供了多种方式实现动画效果,包括内置的过渡系统、第三方动画库以及 CSS 动画。以下是几种常见的方法: 使用 Vue 内置过渡系统 Vue 的 <trans…

vue实现框选效果

vue实现框选效果

实现框选效果的基本思路 在Vue中实现框选效果,通常需要监听鼠标事件,记录起始和结束位置,动态绘制一个矩形框,并根据框选范围判断哪些元素被选中。以下是具体实现方法: 监听鼠标事件 在Vue组件的模板…