关于 image-zoom-360
用于在电商商品页实现更丰富媒体体验的技能,涵盖图片缩放、360 度旋转展示和视频。为商家及店面开发者提供平台配置与自定义图库实现指导。
主要功能
- 01高分辨率图片缩放
- 02移动端捏合缩放指导
- 03360 度旋转查看器
- 04图库内播放商品视频
- 05媒体加载性能优化
适用场景
- 01为服装或电子产品页添加细节查看
- 02用照片序列展示商品旋转效果
- 03在商品图库中呈现视频
- 04改善商品页媒体加载
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ finsilabs/ awesome-ecommerce-skills --skill image-zoom-360安装后在 Claude Code 中输入/image-zoom-360确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
tile.jsonevals/360-degree-spin-viewer/criteria.jsontask.mdevals/css-lens-zoom-component/criteria.jsontask.mdevals/video-integration-and-cdn-image-optimiza/criteria.jsontask.md详细介绍
图像缩放与 360 度视图
概述
打造丰富的商品媒体体验,包括悬停时高清缩放、移动设备上的原生触控双指缩放、通过一组图像实现 360 度旋转视图,以及内嵌视频播放。对于时尚、珠宝、电子产品及其他注重细节的品类,丰富的媒体展示与较低的退货率和较高的转化率相关。
何时使用此技能
- 商品退货率较高,更多视觉细节有助于降低退货率时
- 为时尚、珠宝、电子产品或其他注重细节的品类实现商品详情页时
- 从单张静态图片升级为完整的媒体图库时
- 集成包含 360 度旋转素材的商品摄影工作流时
- 商品视频需要以内嵌方式显示在 PDP 上时
核心说明
步骤 1:确定商家的平台并选择合适的方案
| 平台 | 推荐方案 | 原因 |
|---|---|---|
| Shopify | 使用 OS2.0 主题(Dawn、Sense)内置的媒体支持 + Magic Zoom Plus 应用或用于 360 度视图的 Swiper Gallery | Dawn 原生支持在媒体图库中显示商品图片、视频和 3D 模型;Magic Zoom Plus(一次性收费 $69)无需修改主题即可添加悬停缩放和 360 度旋转 |
| WooCommerce | 安装 WooCommerce Product Gallery Slider 或 YITH WooCommerce Zoom Magnifier(免费/高级版) | WooCommerce 自带基础图库;YITH Zoom Magnifier 可添加悬停缩放和灯箱;Product Gallery Slider 可添加滑动、缩略图和视频支持 |
| BigCommerce | 使用 Cornerstone 主题内置的缩放功能(默认启用悬停缩放)+ 安装 Magic 360 或 Sirv 应用以显示旋转视图 | Cornerstone 提供原生缩放;Sirv(每月 $20 起)通过 Stencil 小组件提供托管式 360 度旋转和缩放 CDN |
| 自定义 / 无头架构 | 使用 CSS transform 缩放、Pointer Events API 双指缩放和基于帧的旋转查看器,构建自定义图库组件 | 完全掌控性能和用户体验;参见下方实现 |
步骤 2:设置商品图库
Shopify
内置媒体图库(无需应用):
- 在商品管理后台(Products → [product] → Media)上传图片、添加 YouTube/Vimeo 视频 URL,并上传
.glb文件作为 3D 模型 - Shopify OS2.0 主题(Dawn、Sense、Craft)会自动在图库中显示所有媒体类型——图片、视频和 3D 模型
- 在 Online Store → Themes → Customize 中,前往商品页面模板并找到 Product media 区域:
- 启用 Image zoom(悬停时显示放大镜)
- 将 Media size 设为 Large 或 Extra Large,以获得更好的缩放效果
- 为商品视频启用 Video looping
- 对于特定款式的图片:在 Products → [product] → Variants → [variant] → Image 中为款式指定图片——买家选择相应款式时,图库会自动切换到该款式图片
360 度旋转视图——Magic Zoom Plus(一次性收费 $69):
- 从 Shopify App Store 安装
- 将旋转序列图片上传为带编号的文件(例如,
product-001.jpg到product-036.jpg) - 此应用会创建一个嵌入商品页面的旋转查看器小组件,无需修改主题代码
WooCommerce
内置缩放(无需插件):
WooCommerce 默认在商品页面提供基础图片缩放功能(由 Zoom.js 提供支持)。配置方法:
- 前往 WooCommerce → Settings → Products → Display
- 在 Product Images 下设置 Zoom 行为:启用、禁用或内部缩放
- 上传高分辨率图片(至少 1000×1000px)——缩放功能会使用完整的上传图片
YITH WooCommerce Zoom Magnifier(免费 + 高级版):
- 从 WordPress.org 安装
- 前往 YITH → Zoom Magnifier → Settings
- 配置缩放类型:Inner(在图片容器内放大)、Outer(在图片旁显示放大面板)或 Lens(圆形放大镜随光标移动)
- 启用灯箱,以便点击后全屏缩放
Product Gallery Slider(免费 — WooCommerce.com):
- 安装并启用
- 为内置 WooCommerce 图库添加滑动支持、缩略图条和全屏灯箱
- 支持在图库中使用视频缩略图(YouTube/Vimeo)
**360 度视图:**使用 WooCommerce 360° Image 插件(免费,wordpress.org)——将编号后的旋转帧作为商品图片上传,并在文件名前加上 360_ 前缀,插件便会创建可拖动旋转的查看器。
BigCommerce
内置缩放(Cornerstone 主题):
- 前往 Storefront → My Themes → Customize
- 在 Product Page → Image 下启用 Image zoom(默认启用悬停缩放)
- 将 Image size 设为 Large,以获得更好的缩放画质 — BigCommerce 会自动以多种尺寸提供图片
Sirv(托管式 360 度旋转 + 缩放 CDN):
- 从 BigCommerce App Marketplace 安装 Sirv
- 将旋转序列图片上传到 Sirv 的 CDN — 它会自动检测编号序列
- 将 Sirv 嵌入代码粘贴到商品描述中,或使用 Sirv BigCommerce 小组件
- Sirv 还会通过其 CDN 提供所有商品图片,并自动转换为 WebP 格式
商品视频:
- 在 BigCommerce 商品管理后台的媒体区域中,点击 Add Video 并粘贴 YouTube 或 Vimeo URL
- 视频会自动作为缩略图条目显示在商品图库中
自定义 / 无头架构
CSS 悬停缩放(无需 JavaScript 加载图片):
// ZoomImage.jsx
import { useState, useRef } from 'react';
export function ZoomImage({ src, alt }) {
const [zoom, setZoom] = useState(null);
const containerRef = useRef(null);
function handleMouseMove(e) {
const rect = containerRef.current.getBoundingClientRect();
const x = ((e.clientX - rect.left) / rect.width) * 100;
const y = ((e.clientY - rect.top) / rect.height) * 100;
setZoom({ x, y });
}
return (
<div
ref={containerRef}
className="zoom-container"
onMouseMove={handleMouseMove}
onMouseLeave={() => setZoom(null)}
>
<img
src={src}
alt={alt}
className="zoom-image"
style={zoom ? {
transformOrigin: `${zoom.x}% ${zoom.y}%`,
transform: 'scale(2.5)',
} : {}}
draggable={false}
/>
</div>
);
}
.zoom-container { overflow: hidden; cursor: crosshair; aspect-ratio: 1/1; }
.zoom-image { width: 100%; height: 100%; object-fit: cover; transition: transform 0.05s linear; will-change: transform; }
360 度旋转查看器:
// SpinViewer.jsx — preloads all frames, switches on drag
export function SpinViewer({ frames, productName = 'Product' }) {
const [frameIndex, setFrameIndex] = useState(0);
const [loaded, setLoaded] = useState(false);
const dragStart = useRef(null);
useEffect(() => {
let count = 0;
frames.forEach(src => {
const img = new Image();
img.src = src;
img.onload = () => { if (++count === frames.length) setLoaded(true); };
});
}, [frames]);
function handleDragStart(e) { dragStart.current = e.clientX ?? e.touches?.[0]?.clientX; }
function handleDragMove(e) {
if (dragStart.current === null) return;
const clientX = e.clientX ?? e.touches?.[0]?.clientX;
const delta = Math.round((clientX - dragStart.current) / 8);
if (delta !== 0) {
setFrameIndex(i => ((i + delta) % frames.length + frames.length) % frames.length);
dragStart.current = clientX;
}
}
function handleDragEnd() { dragStart.current = null; }
if (!loaded) return <div aria-label="Loading 360 view">Loading...</div>;
return (
<div
onMouseDown={handleDragStart} onMouseMove={handleDragMove}
onMouseUp={handleDragEnd} onMouseLeave={handleDragEnd}
onTouchStart={handleDragStart} onTouchMove={handleDragMove} onTouchEnd={handleDragEnd}
aria-label="360 degree product view — drag to rotate"
role="img" style={{ cursor: 'ew-resize' }}
>
<img src={frames[frameIndex]} alt={`${productName}, frame ${frameIndex + 1} of ${frames.length}`} draggable={false} />
<span aria-hidden="true" style={{ fontSize: '0.75rem', color: '#666' }}>Drag to rotate</span>
</div>
);
}
第 3 步:优化媒体性能
无论使用哪个平台,都请遵循以下媒体指南:
- 主视觉图片:为保证缩放画质,上传最长边至少为 2000px 的图片;平台会自动缩小图片以生成缩略图
- 格式:如果平台支持,请上传 WebP 图片 — Shopify、BigCommerce 和 Sirv 会自动转换;对于 WooCommerce,请使用 Imagify 或 ShortPixel 插件
- 360 度旋转帧:24-36 帧最为合适;按每帧 30 KB(优化后的 JPEG)计算,完整序列总大小不到 1 MB
- 视频:将 MP4 直接上传到 Shopify/BigCommerce,或嵌入 YouTube/Vimeo 以降低托管成本;务必包含海报图片
- LCP(最大内容绘制):主商品图片几乎总是 LCP 元素 — 确保以高优先级加载
最佳实践
- 图片显示尺寸应为渲染尺寸的 2 倍,以适配 Retina 屏幕,但不要更大 — 400px 的容器需要 800px 的图片,而不是 2000px
- 使用 WebP 或 AVIF 格式 — 在画质相当的情况下,比 JPEG 小 30-50%
- 预加载主视觉图片 — 为第一张商品图片添加
fetchpriority="high"和loading="eager" - 延迟加载非主视觉媒体 — 缩略图、360 度旋转帧 2–N 和视频应在首次交互后加载
- 为 360 度视图显示加载状态 — 预加载 36 帧在移动设备上可能需要几秒钟;请显示进度指示器
- 为拖动交互提供键盘替代操作 — 360 度旋转除了支持鼠标拖动外,还应支持左右方向键
- 避免自动播放声音 — 静音自动播放可以接受;大多数浏览器会阻止音频自动播放
常见问题
| 问题 | 解决方案 |
|---|---|
| Zoom CSS transform 导致布局偏移 | 在容器上使用 will-change: transform 和 overflow: hidden,避免缩放后的图像导致相邻元素重新排版 |
| 360 度旋转在移动设备上卡顿 | 将帧更新节流至每次 requestAnimationFrame 更新一次;不要在每个 touchmove 事件中调用 setState |
| 视频在 iOS 上无法自动播放 | 添加 playsInline 和 muted 属性;iOS 要求同时设置这两个属性,才能在没有用户手势的情况下自动播放 |
| 主视觉大图导致 LCP 分数较差 | 为主产品图片添加 fetchpriority="high" 和 loading="eager";使用 Lighthouse 验证 |
| 360 度素材体积过大(36 × 500 KB) | 通过 CDN 将宽度设为 800px,并使用 JPEG 质量 75,将每帧控制在 20–40 KB |
相关技能
- @product-page-design
- @responsive-storefront
- @accessibility-commerce
- @image-optimization-cdn
评论
支持 Markdown