当前位置:首页 > 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可以动态创建渐变效果:

js实现图片渐变效果

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滤镜可以创建非破坏性的渐变效果:

js实现图片渐变效果

<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动态调整渐变参数:

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适合矢量场景,而响应式控制可以实现交互效果。

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

相关文章

vue实现图片轮播

vue实现图片轮播

Vue 实现图片轮播的方法 使用第三方库(推荐) 安装 vue-awesome-swiper 库,这是基于 Swiper 的 Vue 封装: npm install swiper vue-a…

js实现图片滚动效果

js实现图片滚动效果

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

H5图片实现地图

H5图片实现地图

实现H5图片地图的方法 在H5中实现图片地图功能,可以通过以下方式完成。图片地图允许用户在图片的特定区域点击,触发不同的交互效果。 使用HTML的<map>和<area>标签…

vue实现图片循环

vue实现图片循环

实现图片循环展示 在Vue中实现图片循环展示可以通过v-for指令结合数组数据完成。以下是具体实现方式: 基础循环展示 准备图片数据数组,使用v-for渲染图片列表: <template&g…

vue实现图片单选

vue实现图片单选

Vue 实现图片单选功能 在 Vue 中实现图片单选功能可以通过多种方式完成,以下是两种常见的实现方法: 方法一:使用 v-model 和单选按钮 通过将单选按钮与图片绑定,利用 v-mod…

vue实现吸附效果

vue实现吸附效果

实现吸附效果的基本思路 吸附效果通常指当页面滚动到某个位置时,元素固定在视口的特定位置。Vue中可以通过监听滚动事件结合CSS的position: sticky或动态样式切换实现。 使用CSS的po…