You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求实现基于图片平均色的CSS投影悬停效果的简易JS库

实现图片平均色投影悬停效果的简易JS库推荐

嘿,这个效果确实质感拉满!我刚好有几个轻量好用的JS库能帮你快速搞定,不用自己从零写颜色提取和动画逻辑:

  • color-thief:这是最经典的图片主色提取库,体积小、API简单,完全能满足你的需求。
    用法示例:

    // 初始化ColorThief实例
    const colorThief = new ColorThief();
    // 获取目标图片元素
    const img = document.querySelector('.portfolio-img');
    
    // 预加载图片后提取平均色(避免跨域问题,建议图片和网站同域或配置CORS)
    img.addEventListener('load', () => {
      const averageColor = colorThief.getColor(img);
      // 把颜色存在元素的data属性里,方便悬停时快速调用
      img.dataset.averageColor = `rgb(${averageColor.join(',')})`;
    });
    
    // 绑定悬停事件
    img.addEventListener('mouseenter', function() {
      this.style.boxShadow = `0 8px 20px ${this.dataset.averageColor}80`;
    });
    
    img.addEventListener('mouseleave', function() {
      this.style.boxShadow = '0 4px 12px rgba(0,0,0,0.1)'; // 还原默认投影
    });
    

    记得给图片元素加上CSS过渡:transition: box-shadow 0.3s ease;,让投影变化更丝滑。

  • fast-average-color:如果你的作品集里有大量高清图,这个库的性能会更好,它支持异步处理、跨域图片(只需配置crossOrigin: true),还能提取不同类型的主色(比如暗色、亮色)。
    用法示例:

    import FastAverageColor from 'fast-average-color';
    
    const fac = new FastAverageColor();
    const img = document.querySelector('.portfolio-img');
    
    // 提取平均色
    fac.getColorAsync(img, { crossOrigin: 'anonymous' })
      .then(color => {
        img.dataset.averageColor = color.rgb;
      });
    
    // 悬停逻辑和上面一致,直接读取data属性应用投影
    

额外小技巧

  • 提前预加载所有图片并提取颜色,存在元素的data属性中,这样用户悬停时不会有延迟,体验更流畅;
  • 可以给投影加一点透明度(比如上面示例中的${color}80),让效果更柔和自然,不会太突兀。

内容的提问来源于stack exchange,提问作者Ruxie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:16:37