当前位置:首页 > JavaScript

js可以实现的图片效果

2026-01-31 08:04:45JavaScript

图片滤镜效果

通过Canvas或WebGL实现各种滤镜效果,如灰度、反色、模糊、锐化等。使用getImageData修改像素数据,或直接应用CSS滤镜属性(如filter: grayscale(100%))。

const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
const img = new Image();
img.onload = function() {
  ctx.drawImage(img, 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);
};
img.src = 'image.jpg';

图片懒加载

延迟加载视口外的图片以减少初始页面负载。使用IntersectionObserver检测图片是否进入视口,动态设置src属性。

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或第三方库(如Cropper.js)实现交互式裁剪和缩放。通过绘制部分图像区域或调整drawImage参数实现。

const canvas = document.getElementById('cropCanvas');
const ctx = canvas.getContext('2d');
const img = new Image();
img.onload = function() {
  // 裁剪坐标为(x, y, width, height)
  ctx.drawImage(img, 50, 50, 200, 200, 0, 0, 100, 100);
};
img.src = 'image.jpg';

图片轮播与动画

使用CSS过渡或JavaScript定时器实现幻灯片效果。结合opacitytransform属性实现平滑切换。

let currentIndex = 0;
const slides = document.querySelectorAll('.slide');
function showSlide(index) {
  slides.forEach((slide, i) => {
    slide.style.display = i === index ? 'block' : 'none';
  });
}
setInterval(() => {
  currentIndex = (currentIndex + 1) % slides.length;
  showSlide(currentIndex);
}, 3000);

图片压缩与上传

通过Canvas的toBlob方法调整图片质量,结合FormData实现前端压缩后上传。

function compressImage(file, quality, callback) {
  const reader = new FileReader();
  reader.onload = function(e) {
    const img = new Image();
    img.onload = function() {
      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(callback, 'image/jpeg', quality);
    };
    img.src = e.target.result;
  };
  reader.readAsDataURL(file);
}

图片拖拽与排序

监听dragstartdragoverdrop事件实现图片拖拽排序。更新DOM元素位置或数组顺序反映变化。

const container = document.getElementById('imageContainer');
container.addEventListener('dragover', (e) => {
  e.preventDefault();
});
container.addEventListener('drop', (e) => {
  e.preventDefault();
  const draggedItem = document.querySelector('.dragging');
  const newPosition = e.target.closest('.image-item');
  if (newPosition) {
    container.insertBefore(draggedItem, newPosition);
  }
});

动态生成图片

基于数据动态创建图片元素或Canvas绘图。适用于图表、头像生成等场景。

const data = [30, 50, 80];
const canvas = document.getElementById('chartCanvas');
const ctx = canvas.getContext('2d');
data.forEach((value, index) => {
  ctx.fillStyle = `hsl(${index * 120}, 70%, 50%)`;
  ctx.fillRect(index * 60, 100 - value, 50, value);
});

js可以实现的图片效果

分享给朋友:

相关文章

vue实现突出效果

vue实现突出效果

Vue 实现突出效果的方法 在 Vue 中实现突出效果可以通过多种方式,包括动态样式绑定、过渡动画、第三方库等。以下是几种常见的方法: 动态样式绑定 通过 v-bind:class 或 v-bind…

vue路由可以实现什么

vue路由可以实现什么

Vue 路由的核心功能 Vue Router 是 Vue.js 官方的路由管理器,主要用于构建单页面应用(SPA)。它通过管理 URL 与组件的映射关系,实现页面间的无刷新跳转。 路由的基本实现…

vue实现对话框效果

vue实现对话框效果

Vue 对话框实现方法 使用组件化方式封装对话框 创建一个独立的对话框组件(如Dialog.vue),通过v-model控制显示隐藏: <template> <div clas…

js实现图片滚动效果

js实现图片滚动效果

使用CSS动画实现图片滚动 通过CSS的@keyframes和animation属性实现无缝滚动效果。将图片容器设置为横向排列,通过动画平移位置。 <style> .scroll-c…

uniapp 卡片效果

uniapp 卡片效果

uniapp 实现卡片效果的方法 使用 view 和 CSS 样式 通过 view 组件结合 CSS 样式可以快速实现卡片效果。设置圆角、阴影和边距来增强视觉层次感。 <view cl…

vue实现预览效果

vue实现预览效果

实现预览效果的常见方法 在Vue中实现预览效果可以通过多种方式完成,以下列举几种典型场景和对应的实现方案: 图片/文件预览 使用<input type="file">结合FileRea…