首屏轮播图使用cdn加载webp图片的代码案例

目标:基于 CDN 加载 WebP 图片,且能自动降级为 PNG/JPG(兼容不支持 WebP 的浏览器)

  1. 第一步:封装 WebP 检测工具,在用户浏览器不支持webp的情况下加载png/jpg图片
js 复制代码
// src/utils/image.ts
let webpSupportCache: boolean | null = null;

/**
 * 检测浏览器是否支持 WebP(带缓存)
 */
export async function checkWebPSupport(): Promise<boolean> {
  if (webpSupportCache !== null) return webpSupportCache;

  return new Promise((resolve) => {
    const img = new Image();
    img.src = 'data:image/webp;base64,UklGRkoAAABXRXJjUgAAABAAAAAQAAABAAAAAQAAABgAAAAEAAAAA==';
    img.onload = () => resolve(img.width === 1);
    img.onerror = () => resolve(false);
  })
}

/**
 * 生成图片 URL(自动切换 WebP/原图)
 * @param cdnBase CDN 基础路径
 * @param imgName 图片名称(不含后缀)
 * @param ext 原图后缀(如 png/jpg)
 */
export function getImageUrl(cdnBase: string, imgName: string, ext: string = 'png'): string {
  if (webpSupportCache) {
    // 支持 WebP 则拼接 webp 后缀
    return `${cdnBase}/${imgName}.webp`;
  }
  // 不支持则用原图后缀
  return `${cdnBase}/${imgName}.${ext}`;
}
  1. 首屏轮播图组件
js 复制代码
相关推荐
伊步沁心9 小时前
深入 useEffect:为什么 cleanup 总比 setup 先跑?顺手手写节流防抖 Hook
前端
小J听不清10 小时前
CSS 字体样式全解析:字体类型 / 大小 / 粗细 / 样式
前端·javascript·css·html·css3
500佰10 小时前
pencil on claude 让设计师和程序员少吵架的一种可能
前端
Jane-lan10 小时前
NVM安装以及可能的坑
前端·node·nvm
幽络源小助理10 小时前
Typecho大前端新闻博客主题源码下载:资讯门户风格模板安装教程 | 幽络源
前端
简离10 小时前
Git 一次性清理已跟踪但应忽略文件
前端·git
清水寺小和尚10 小时前
# 告别魔法:带你彻底搞透 Agent Loop、Skills、Teams 与 MCP 协议
前端
小蜜蜂dry10 小时前
nestjs学习 - 管道(pipe)
前端·nestjs
梦鱼10 小时前
🖥️ 告别 Electron 托盘图标模糊:一套精准的 PNG 生成方案
前端·electron
张元清10 小时前
React Hooks 性能优化:如何避免不必要的重新渲染
前端·javascript·面试