
Security News
PodRocket Podcast: Inside the Recent npm Supply Chain Attacks
Socket CEO Feross Aboukhadijeh discusses the recent npm supply chain attacks on PodRocket, covering novel attack vectors and how developers can protect themselves.
@afilmory/webgl-viewer
Advanced tools
一个高性能的WebGL图片查看器React组件,支持超高分辨率图片的流畅缩放、平移和硬件加速渲染。
npm install @afilmory/webgl-viewer
# 或
yarn add @afilmory/webgl-viewer
# 或
pnpm add @afilmory/webgl-viewer
import React from 'react'
import { WebGLImageViewer } from '@afilmory/webgl-viewer'
function App() {
return (
<div style={{ width: '100vw', height: '100vh' }}>
<WebGLImageViewer
src="/path/to/your/image.jpg"
className="image-viewer"
onZoomChange={(originalScale, relativeScale) => {
console.log('Zoom changed:', { originalScale, relativeScale })
}}
/>
</div>
)
}
重构后的项目采用模块化架构,每个文件都有明确的职责:
src/
├── index.ts # 主入口文件,导出所有公共API
├── types.ts # TypeScript类型定义
├── constants.ts # 常量配置和默认值
├── utils.ts # 工具函数集合
├── shaders.ts # WebGL着色器代码
├── DebugInfo.tsx # 调试信息React组件
├── WebGLImageViewer.tsx # 主要的React组件
├── WebGLImageViewerEngine.ts # 完整的WebGL引擎实现
└── example.tsx # 使用示例
types.ts
: 完整的TypeScript类型定义和接口constants.ts
: 所有配置常量和默认值utils.ts
: 纯函数工具集,包含数学计算、设备检测等shaders.ts
: WebGL着色器源代码和编译工具DebugInfo.tsx
: 独立的调试信息显示组件WebGLImageViewer.tsx
: React组件包装器,处理生命周期WebGLImageViewerEngine.ts
: 核心WebGL引擎,包含所有功能实现属性 | 类型 | 默认值 | 描述 |
---|---|---|---|
src | string | 必需 | 图片源URL |
className | string | "" | CSS类名 |
initialScale | number | 1 | 初始缩放比例 |
minScale | number | 0.1 | 最小缩放比例 |
maxScale | number | 10 | 最大缩放比例 |
// 滚轮配置
wheel?: {
step: number // 缩放步长,默认 0.1
wheelDisabled?: boolean // 禁用滚轮,默认 false
touchPadDisabled?: boolean // 禁用触控板,默认 false
}
// 双指缩放配置
pinch?: {
step: number // 缩放步长,默认 0.5
disabled?: boolean // 禁用双指缩放,默认 false
}
// 双击配置
doubleClick?: {
step: number // 缩放步长,默认 2
disabled?: boolean // 禁用双击,默认 false
mode: 'toggle' | 'zoom' // 双击模式,默认 'toggle'
animationTime: number // 动画时长,默认 200ms
}
// 拖拽配置
panning?: {
disabled?: boolean // 禁用拖拽,默认 false
velocityDisabled?: boolean // 禁用惯性,默认 true
}
// 缩放变化回调
onZoomChange?: (originalScale: number, relativeScale: number) => void
// 图片复制完成回调
onImageCopied?: () => void
const viewerRef = useRef<WebGLImageViewerRef>(null)
// 可用方法
viewerRef.current?.zoomIn(true) // 放大(可选动画)
viewerRef.current?.zoomOut(false) // 缩小(可选动画)
viewerRef.current?.resetView() // 重置视图
viewerRef.current?.getScale() // 获取当前缩放比例
<WebGLImageViewer
src="https://example.com/image.jpg"
initialScale={1}
centerOnInit={true}
/>
<WebGLImageViewer
src="https://example.com/large-image.jpg"
minScale={0.1}
maxScale={20}
wheel={{ step: 0.05 }}
doubleClick={{
mode: 'zoom',
step: 1.5,
animationTime: 300
}}
onZoomChange={(original, relative) => {
console.log(`Zoom: ${relative.toFixed(2)}x`)
}}
debug={process.env.NODE_ENV === 'development'}
/>
function ControlledViewer() {
const viewerRef = useRef<WebGLImageViewerRef>(null)
return (
<>
<WebGLImageViewer
ref={viewerRef}
src="/image.jpg"
/>
<div>
<button onClick={() => viewerRef.current?.zoomIn(true)}>
放大
</button>
<button onClick={() => viewerRef.current?.zoomOut(true)}>
缩小
</button>
<button onClick={() => viewerRef.current?.resetView()}>
重置
</button>
</div>
</>
)
}
启用 debug={true}
可显示实时调试信息:
<WebGLImageViewer
src="/image.jpg"
debug={true} // 显示调试面板
/>
npm run build
项目已完全实现TypeScript类型安全,所有API都有完整的类型定义。
types.ts
中定义新的类型接口constants.ts
中添加相关配置常量WebGLImageViewerEngine.ts
中实现功能逻辑index.ts
导出新的API✅ TypeScript编译: 通过
✅ 类型检查: 完整
✅ 构建输出:
dist/index.js
(39.49 kB, gzip: 11.06 kB)dist/index.d.ts
(16.41 kB, gzip: 5.87 kB)FAQs
一个高性能的WebGL图片查看器React组件,支持超高分辨率图片的流畅缩放、平移和硬件加速渲染。
We found that @afilmory/webgl-viewer demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Socket CEO Feross Aboukhadijeh discusses the recent npm supply chain attacks on PodRocket, covering novel attack vectors and how developers can protect themselves.
Security News
Maintainers back GitHub’s npm security overhaul but raise concerns about CI/CD workflows, enterprise support, and token management.
Product
Socket Firewall is a free tool that blocks malicious packages at install time, giving developers proactive protection against rising supply chain attacks.