当前位置:首页 > JavaScript

js实现图片渐变效果

2026-03-01 10:14:27JavaScript

使用CSS3实现图片渐变叠加

通过CSS的linear-gradientradial-gradient可以轻松实现图片上的渐变叠加效果。这种方法不需要JavaScript,性能更优:

<div class="gradient-overlay"></div>
.gradient-overlay {
  background-image: 
    linear-gradient(to right, rgba(0,0,0,0.7), rgba(0,0,0,0)),
    url('your-image.jpg');
  width: 100%;
  height: 300px;
  background-size: cover;
}

Canvas绘制渐变效果

通过HTML5 Canvas可以实现更复杂的渐变效果:

const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
const img = new Image();

img.onload = function() {
  canvas.width = img.width;
  canvas.height = img.height;

  // 绘制原始图片
  ctx.drawImage(img, 0, 0);

  // 添加渐变
  const gradient = ctx.createLinearGradient(0, 0, img.width, 0);
  gradient.addColorStop(0, 'rgba(255,0,0,0.5)');
  gradient.addColorStop(1, 'rgba(0,0,255,0.5)');

  ctx.fillStyle = gradient;
  ctx.fillRect(0, 0, img.width, img.height);
};

img.src = 'your-image.jpg';

动态渐变过渡效果

使用JavaScript动态改变CSS变量实现渐变动画:

.image-container {
  --gradient-color: rgba(255,0,0,0.5);
  background-image: 
    linear-gradient(to right, var(--gradient-color), transparent),
    url('your-image.jpg');
  transition: --gradient-color 0.5s ease;
}
const container = document.querySelector('.image-container');
let hue = 0;

function updateGradient() {
  hue = (hue + 1) % 360;
  container.style.setProperty(
    '--gradient-color', 
    `hsla(${hue}, 100%, 50%, 0.5)`
  );
  requestAnimationFrame(updateGradient);
}

updateGradient();

SVG滤镜实现渐变

使用SVG滤镜可以创建更复杂的渐变效果:

<svg width="0" height="0">
  <defs>
    <filter id="gradientFilter" x="0" y="0" width="100%" height="100%">
      <feFlood flood-color="#ff0000" flood-opacity="0.5" result="flood"/>
      <feComposite in="flood" in2="SourceGraphic" operator="over"/>
    </filter>
  </defs>
</svg>

<img src="your-image.jpg" id="filtered-image">
document.getElementById('filtered-image').style.filter = "url('#gradientFilter')";

WebGL高级渐变效果

对于需要高性能、复杂渐变效果的场景,可以使用WebGL:

// 初始化WebGL上下文
const canvas = document.getElementById('webgl-canvas');
const gl = canvas.getContext('webgl');

// 创建着色器程序
const vertexShaderSource = `...`;
const fragmentShaderSource = `
  precision mediump float;
  varying vec2 vTextureCoord;
  uniform sampler2D uSampler;

  void main() {
    vec4 textureColor = texture2D(uSampler, vTextureCoord);
    float gradient = vTextureCoord.x; // 从左到右渐变
    vec4 gradientColor = vec4(1.0, 0.0, 0.0, 0.5) * gradient;
    gl_FragColor = textureColor + gradientColor;
  }
`;

// 编译着色器、创建程序、设置缓冲区等WebGL常规操作
// ...

每种方法适用于不同场景:CSS渐变最简单,Canvas适合动态效果,SVG滤镜支持复杂操作,WebGL提供最高性能。选择时需考虑浏览器兼容性和性能需求。

js实现图片渐变效果

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

相关文章

Vue实现弹幕漂浮效果

Vue实现弹幕漂浮效果

Vue实现弹幕弹幕漂浮效果 核心思路 通过动态生成弹幕DOM元素,利用CSS动画或JavaScript控制其从右向左移动,并通过Vue的数据驱动特性管理弹幕生命周期。 基础实现步骤 创建弹幕组件…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document…

vue 实现图片

vue 实现图片

Vue 实现图片加载与展示的方法 在 Vue 中实现图片加载和展示可以通过多种方式完成,包括静态资源引用、动态绑定、懒加载等。以下是几种常见的方法: 静态资源引用 将图片放在项目的 public 或…

js实现滚动条效果

js实现滚动条效果

实现滚动条效果的方法 使用原生JavaScript实现滚动条 通过监听滚动事件,可以动态调整滚动条的位置和样式。以下是一个基础实现示例: // 获取DOM元素 const container = d…

js实现图片滚动效果

js实现图片滚动效果

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

jquery效果

jquery效果

jQuery 动画效果 jQuery 提供了多种内置动画效果,可用于实现平滑的页面交互。常用的方法包括 show()、hide()、toggle()、fadeIn()、fadeOut()、slideU…