当前位置:首页 > JavaScript

js实现图片渐变效果

2026-04-04 10:57:36JavaScript

使用CSS实现图片渐变叠加

通过CSS的linear-gradientradial-gradient结合background-blend-mode属性,可以直接实现图片与渐变的混合效果:

.gradient-overlay {
  background-image: 
    linear-gradient(to right, rgba(255,0,0,0.5), rgba(0,0,255,0.5)),
    url('your-image.jpg');
  background-blend-mode: overlay;
  width: 300px;
  height: 200px;
}

Canvas绘制渐变图片

利用Canvas 2D API可以动态创建渐变效果:

const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
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.globalCompositeOperation = 'multiply';
ctx.fillRect(0, 0, img.width, img.height);

WebGL高级渐变效果

通过WebGL可以实现更复杂的渐变过渡:

const gl = canvas.getContext('webgl');
// 创建着色器程序
const program = createProgram(gl, vertexShader, fragmentShader);
gl.useProgram(program);

// 设置纹理和渐变参数
gl.uniform1i(gl.getUniformLocation(program, 'u_image'), 0);
gl.uniform2f(gl.getUniformLocation(program, 'u_resolution'), width, height);
gl.uniform3f(gl.getUniformLocation(program, 'u_gradientFrom'), 1.0, 0.0, 0.0);
gl.uniform3f(gl.getUniformLocation(program, 'u_gradientTo'), 0.0, 0.0, 1.0);

SVG滤镜实现渐变

使用SVG滤镜可以创建非破坏性的渐变效果:

<svg>
  <defs>
    <filter id="gradientFilter">
      <feColorMatrix type="matrix" values="..."/>
      <feComponentTransfer>
        <feFuncR type="linear" slope="0.5"/>
        <feFuncG type="linear" slope="0.5"/>
      </feComponentTransfer>
    </filter>
  </defs>
  <image xlink:href="image.jpg" filter="url(#gradientFilter)"/>
</svg>

动画渐变过渡效果

结合CSS动画实现动态渐变变化:

@keyframes gradientShift {
  0% { background-color: rgba(255,0,0,0.3); }
  50% { background-color: rgba(0,255,0,0.3); }
  100% { background-color: rgba(0,0,255,0.3); }
}

.animated-gradient {
  animation: gradientShift 5s infinite;
  mix-blend-mode: screen;
}

响应式渐变控制

通过JavaScript动态调整渐变参数:

js实现图片渐变效果

window.addEventListener('scroll', () => {
  const scrollPercent = window.scrollY / document.body.scrollHeight;
  element.style.background = `
    linear-gradient(
      to right,
      rgba(255,0,0,${scrollPercent}),
      rgba(0,0,255,${1-scrollPercent})
    )
  `;
});

每种方法适用于不同场景,CSS方案适合简单静态效果,Canvas适合动态处理,WebGL适合高性能需求,SVG适合矢量场景,而响应式控制可以实现交互效果。

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

相关文章

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

vue 实现图片单选

vue 实现图片单选

Vue 实现图片单选功能 在 Vue 中实现图片单选功能,可以通过结合 v-model 和自定义事件来实现。以下是具体实现方法: 方法一:使用 v-model 和计算属性 创建一个 Vue 组件,包…

vue实现图片切换

vue实现图片切换

实现图片切换的方法 使用v-for和v-bind动态绑定图片 通过v-for循环渲染图片列表,结合v-bind动态绑定图片路径,实现切换效果。 <template> <div&…

js实现图片移动

js实现图片移动

使用CSS和JavaScript实现图片移动 方法一:使用CSS动画结合JavaScript控制 通过CSS定义动画关键帧,JavaScript动态添加或移除动画类。 /* CSS部分 */ .m…

vue实现效果更新

vue实现效果更新

Vue 实现效果更新的方法 Vue 提供了多种方式实现动态效果更新,主要依赖其响应式系统和生命周期钩子。以下是几种常见的方法: 数据绑定与响应式更新 Vue 的核心是数据驱动视图。通过修改数据,视图…

vue实现开关效果

vue实现开关效果

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