当前位置:首页 > JavaScript

js实现图片特效

2026-04-07 08:42:53JavaScript

图片滤镜效果

使用Canvas的getImageDataputImageDataAPI修改像素值实现基础滤镜:

const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
ctx.drawImage(imgElement, 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] = data[i+1] = data[i+2] = avg;
}
ctx.putImageData(imageData, 0, 0);

动态粒子化效果

通过将图片分解为随机运动的粒子:

js实现图片特效

class Particle {
  constructor(x, y, color) {
    this.x = Math.random() * canvas.width;
    this.y = Math.random() * canvas.height;
    this.targetX = x;
    this.targetY = y;
    this.color = color;
  }
  update() {
    this.x += (this.targetX - this.x) * 0.1;
    this.y += (this.targetY - this.y) * 0.1;
  }
}

// 从图片数据创建粒子阵列
const particles = [];
for (let y = 0; y < imageData.height; y += 5) {
  for (let x = 0; x < imageData.width; x += 5) {
    const index = (y * imageData.width + x) * 4;
    particles.push(new Particle(
      x, y, 
      `rgba(${data[index]}, ${data[index+1]}, ${data[index+2]}, ${data[index+3]})`
    ));
  }
}

function animate() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  particles.forEach(p => {
    p.update();
    ctx.fillStyle = p.color;
    ctx.fillRect(p.x, p.y, 3, 3);
  });
  requestAnimationFrame(animate);
}

3D翻转过渡

使用CSS 3D变换实现立体翻转效果:

js实现图片特效

.flip-container {
  perspective: 1000px;
}
.flipper {
  transition: transform 0.8s;
  transform-style: preserve-3d;
}
.flipper.flipped {
  transform: rotateY(180deg);
}
.front, .back {
  backface-visibility: hidden;
  position: absolute;
}
.back {
  transform: rotateY(180deg);
}

图片拖拽变形

通过监听鼠标事件实现橡皮筋拉伸效果:

let isDragging = false;
let startX, startY;

canvas.addEventListener('mousedown', (e) => {
  isDragging = true;
  [startX, startY] = [e.offsetX, e.offsetY];
});

canvas.addEventListener('mousemove', (e) => {
  if (!isDragging) return;
  ctx.globalCompositeOperation = 'source-over';
  ctx.lineWidth = 5;
  ctx.beginPath();
  ctx.moveTo(startX, startY);
  ctx.lineTo(e.offsetX, e.offsetY);
  ctx.stroke();
  [startX, startY] = [e.offsetX, e.offsetY];
});

WebGL高级特效

使用GLSL着色器实现波浪扭曲:

const shaderScript = `
  precision mediump float;
  uniform sampler2D texture;
  uniform float time;
  varying vec2 vUV;

  void main() {
    vec2 uv = vUV;
    uv.x += sin(uv.y * 10.0 + time) * 0.05;
    gl_FragColor = texture2D(texture, uv);
  }
`;

// 初始化WebGL程序后传递时间变量
function render() {
  gl.uniform1f(timeUniform, performance.now() / 1000);
  gl.drawArrays(gl.TRIANGLES, 0, 6);
  requestAnimationFrame(render);
}

标签: 特效图片
分享给朋友:

相关文章

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

vue 实现图片切换

vue 实现图片切换

实现图片切换的基本思路 在Vue中实现图片切换通常涉及数据绑定、事件处理和动态样式。核心是通过维护一个当前图片索引的状态,利用Vue的响应式特性更新显示的图片。 数据准备与绑定 定义一个数组存储图片…

js实现图片滚动

js实现图片滚动

图片滚动的实现方法 使用CSS动画实现 通过CSS的animation和@keyframes可以实现简单的图片滚动效果。这种方法适合静态图片的无缝循环滚动。 <style> .scr…

实现图片旋转js

实现图片旋转js

使用CSS transform属性旋转图片 通过CSS的transform属性可以轻松实现图片旋转。以下是一个简单的示例代码: const image = document.getElement…

js实现保存图片

js实现保存图片

使用Canvas绘制并保存图片 在HTML中创建一个Canvas元素,通过JavaScript绘制内容后转换为图片并保存。Canvas的toDataURL方法可将画布内容转为Base64编码的图片数据…

jquery图片轮播

jquery图片轮播

jQuery图片轮播实现方法 基础HTML结构 创建一个简单的HTML结构,包含轮播容器、图片列表和导航按钮。 <div class="slider"> <div class=…