当前位置:首页 > 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绘图。适用于图表、头像生成等场景。

js可以实现的图片效果

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

分享给朋友:

相关文章

vue网页实现拖动效果

vue网页实现拖动效果

Vue 实现拖动效果的方法 使用 HTML5 拖放 API HTML5 提供了原生的拖放 API,可以通过 draggable 属性和相关事件实现拖动效果。 <template> &…

vue实现基金效果

vue实现基金效果

Vue 实现基金效果 在 Vue 中实现基金效果,通常指的是模拟基金的增长、波动或可视化展示。以下是几种常见的实现方式: 数据绑定与动态更新 通过 Vue 的数据绑定特性,可以动态展示基金净值的变化…

vue实现动画效果

vue实现动画效果

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

vue 实现滑动效果

vue 实现滑动效果

Vue 实现滑动效果的方法 使用 CSS Transition 通过 Vue 的 v-if 或 v-show 结合 CSS Transition 实现滑动效果。定义一个 CSS 类,利用 transf…

vue实现日历效果

vue实现日历效果

Vue实现日历效果的方法 使用第三方库 Vue生态中有多个成熟的日历组件库,如v-calendar或vue2-calendar,可以快速实现日历功能。安装后直接引入组件即可使用。 npm insta…

vue实现菜单效果

vue实现菜单效果

Vue实现菜单效果的方法 基础菜单实现 使用Vue的v-for指令和v-show/v-if可以快速实现基础菜单。通过数据驱动的方式渲染菜单项,结合事件处理实现交互。 <template>…