Robot Img

接口列表

ImgProps

NameTypeOptionalDescription
classstringtrue

类名

styleCSSPropertiestrue

样式

srcstringtrue

图片地址

defaultSrcstringtrue

图片默认地址

errorSrcstringtrue

出错的时候的图片地址

srcTplImgSrcTplPropFntrue

可以单个组件自定义,比如

<RobotImg srcTpl={(attrs) => `${attrs.src}?some_img_params_w=${artts.ratioWidth}`} />
statusClassNamePrefixstringtrue

图片不同状态下的样式名前缀

lazy"scroll" | "resize" | "off"true

懒加载模式

  • 'scroll' 检测容器滚动
  • 'resize' 检测当前节点 DOMRect 变化
  • 'off' 关闭懒加载,图片不做任何检测,会直接处理 src
shouldUpdate(newRect: DOMRect, oldRect: DOMRect) => booleantrue

当 lazy === 'resize' 时,判断是否要更新图片 默认当面积变大至少20%,才更新图片

loadingType"src" | "css" | "none"true

设置图片为异步加载 这个时候,useImg 返回的 state.status 可能会 blank -> loading -> loaded 或者 blank -> loading -> error 当 loadingType === 'src' 时,状态会体现在 state.src 上,

  • state.status === 'loading' 使用 defaultSrc
  • state.status === 'error' 使用 errorSrc 当 loadingType === 'css' 时,
  • state.status === 'loading' , state.src = ''
  • state.status === 'error' , state.src = '' 此时需要根据不同状态下的样式来体现
prepareImg( imgSrc: string, crossOrigin?: 'anonymous' | 'use-credentials' | '' ) => Promise<HTMLImageElement>true

预处理图片 注意当 loadingType === 'src' || loadingType === 'css' 存在时,该属性才会生效 默认处理方式:

const img: HTMLImageElement = new Image()
if (crossOrigin) {
  img.crossOrigin = crossOrigin
}
img.src = imgSrc
crossOrigin"" | "anonymous" | "use-credentials"true

注意当 loadingType === 'src' || loadingType === 'css' 存在时,该属性才会生效

onError(e: string | Event) => voidtrue

加载失败时调用 注意当 loadingType === 'src' || loadingType === 'css' 存在时,该属性才会生效

onLoaded(img: HTMLImageElement) => voidtrue

加载成功时调用 注意当 loadingType === 'src' || loadingType === 'css' 存在时,该属性才会生效

ImgState

NameTypeOptionalDescription
srcstringfalse

真实使用的 src

originSrcstringfalse

未处理前的 src

status"blank" | "loading" | "error" | "loaded"false

当前状态

rectDOMRecttrue

图片节点的 DOMRect

ImgHookResult

useImg 返回值

NameTypeOptionalDescription
domRefRef<T | undefined>false

获取节点 DOM ref

stateImgStatefalse

组件状态

imgPoolRef<ImgPool>false

当前使用的 imgPool

domPropsPick<ImgProps, "class" | "crossOrigin">false

处理后的 DOM 节点属性

getDefaultSrc() => stringfalse

获取默认图片

ImgSrcTplGlobals

src tpl 全局设置

NameTypeOptionalDescription
webpfalse | truefalse

是否使用 webp 格式的图片

rationumberfalse

设备像素比

ImgSrcTplFnArgs

NameTypeOptionalDescription
rectDOMRectfalse

对应 dom 节点的 DOMRect

srcstringfalse

img.src

ImgSrcTplPropFnArgs

NameTypeOptionalDescription
ratioWidthnumberfalse

返回按比例放大图片的 width

ratioHeightnumberfalse

返回按比例放大图片的 height

webpfalse | truefalse

是否使用 webp 格式的图片

rationumberfalse

设备像素比

rectDOMRectfalse

对应 dom 节点的 DOMRect

srcstringfalse

img.src

ImgPoolGlobals

NameTypeOptionalDescription
defaultSrcstringtrue

全局默认图片

errorSrcstringtrue

图片加载出错时的全局默认设置图片

loadingType"src" | "css"true

默认加载设置

classNamestringtrue

全局样式名

statusClassNamePrefixstringtrue

图片不同状态下的样式名前缀

shouldUpdate(newRect: DOMRect, oldRect: DOMRect) => booleantrue

当 lazy === 'resize' 时,判断是否要更新图片 默认当 width 或者 height 变大至少20%,才更新图片

ImgPoolOptions

NameTypeOptionalDescription
containerHTMLElement | Windowtrue

容器节点,也可以是 window

getContainerRect(rect: DOMRect) => ImgRecttrue

设置需要检测的容器区域

tickTimenumbertrue

心跳间隔时间,单位 ms

createSrcTplImgSrcTplFactoryResulttrue

全局的 srcTpl 设置

globalVarsImgPoolGlobalstrue

一些全局变量

namestringtrue

名字,用于一些问题的排查

ImgPool

NameTypeOptionalDescription
imgsSet<ImgItem>false

所有图片实例

currentEventType"scroll" | "resize" | "none" | "scroll+resize"false

当前发生事件类型

containerRectImgRectfalse

容器检测区域

tickTimenumberfalse

心跳间隔时间

containerHTMLElement | Windowfalse

容器节点

globalVarsImgPoolGlobalsfalse

全局设置

namestringfalse

名称

isOverlapWindowfalse | truefalse

容器如果是 DOM 节点,判断容器是否和 window 有重叠

srcTplImgSrcTplfalse

src 模板

overlap(rect: ImgRect) => booleanfalse

判断图片所在矩形区域与容器区域是否有重叠

reset(opts: ImgPoolOptions) => voidfalse

重置

init() => voidfalse

初始化

destroy() => voidfalse

销毁

occur(type: ImgEventType) => voidfalse

发生了某个事件

update() => voidfalse

心跳更新函数

tick(isStart?: boolean) => voidfalse

执行心跳

stopTick() => voidfalse

停止心跳

appendDefaultStyle() => voidfalse

根据 globalVars.className 设置一个全局默认样式 默认样式为:

.${globalVars.className} {
 transition: background-image .3s;
 background-size: cover;
 background-position: center;
 background-repeat: no-repeat;
}

ImgItem

NameTypeOptionalDescription
shouldCheckfalse | truefalse

当前实例是否需要检测

onChecked(event: ImgEventType) => voidfalse

触发检测时调用

onUpdate() => voidtrue

每次心跳时执行