React slider captcha component.
npm install rc-slider-captcha[![npm][npm]][npm-url] !GitHub
React 滑块验证码组件。
[查看文档和示例][site]
![example][site]
- 简单易用
- 适配 PC 和移动端
- 兼容 IE11 和现代浏览器
- 使用 TypeScript 开发,提供完整的类型定义文件
``shell`
npm install rc-slider-captcha
`shell`
yarn add rc-slider-captcha
`shell`
pnpm add rc-slider-captcha
`typescript
import SliderCaptcha from 'rc-slider-captcha';
const Demo = () => {
return (
return {
bgUrl: 'background image url',
puzzleUrl: 'puzzle image url'
};
}}
onVerify={async (data) => {
console.log(data);
// verify data
return Promise.resolve();
}}
/>
);
};
`
`typescript`
import SliderCaptcha, {
SliderCaptchaProps,
VerifyParam,
Status,
ActionType
} from 'rc-slider-captcha';
| 参数 | 说明 | 类型 | 默认值 |
| --- | --- | --- | --- |
| request | 请求背景图和拼图。 | () => Promise<{ bgUrl:string; puzzleUrl:string;}> | - |resolve
| onVerify | 用户操作滑块完成后触发,主要用于验证,返回 表示验证成功,reject 表示验证失败。 | (data: VerifyParam) => Promise | - |embed
| mode | 显示模式。 - 嵌入式, float - 触发式, slider - 只有滑块无拼图。 | 'embed' \| 'float' \| 'slider' | 'embed' |{ width: number; height: number; }
| bgSize | 背景图尺寸 | | { width: 320, height: 160 } |60
| puzzleSize | 拼图尺寸和偏移调整,默认宽度 ,高度为背景图高度。 | { width: number; height: number; left: number; top: number; } | { width: 60 } |{ default: ReactNode; loading: ReactNode; moving: ReactNode; verifying: ReactNode; success: ReactNode; error: ReactNode; errors: ReactNode; loadFailed: ReactNode; }
| tipText | 提示文本配置。 | | - |{ default: ReactNode; loading: ReactNode; error: ReactNode; success: ReactNode; refresh: ReactNode; loadFailed: ReactNode; }
| tipIcon | 提示图标配置。 | | - |刷新
| actionRef | 常用操作,比如。 | React.MutableRefObject | - |boolean
| showRefreshIcon | 显示右上角刷新图标。 | | true |0
| limitErrorCount | 限制连续错误次数。当连续错误次数达到限制时,不允许操作滑块和刷新图标,必须手动点击操作条刷新。 表示不限制错误次数。 | number | 0 |ReactNode
| jigsawContent | 拼图区域自定义内容,需要自己定义绝对定位和 zIndex 。 | | - |{ icon: ReactNode; text: ReactNode }
| loadingBoxProps | 拼图区域加载配置,支持 div 属性。 | | - |boolean
| autoRequest | 自动发起请求。 | | true |boolean
| autoRefreshOnError | 验证失败后自动刷新。 | | true |autoRefreshOnError=true
| errorHoldDuration | 错误停留多少毫秒后自动刷新,仅在 时生效。 | number | 500 |mode=float
| showJigsawOnActive | 在移动中和验证时始终显示拼图,验证完成后自动隐藏拼图。仅在 时生效。 | boolean | false |loading
| loadingDelay | 设置 状态延迟的时间,避免闪烁,单位为毫秒。 | number | 0 |mode=float
| placement | 浮层位置。仅在 时生效。 | 'top' \| 'bottom' | 'top' |onVerify
| precision | 数字精度。为避免内部计算产生精度问题,只对 方法参数 x y sliderOffsetX 生效。 | number \| false | 7 |string
| className | 容器类名。 | | - |CSSProperties
| style | 容器样式。 | | - |{ panel?: CSSProperties; jigsaw?: CSSProperties; bgImg?: CSSProperties; puzzleImg?: CSSProperties; control?: CSSProperties; indicator?: CSSProperties; }
| styles | 配置内置模块样式。 | | - |
> 连续错误次数说明:当用户操作滑块验证成功后,将重置连续错误次数为 0 。当用户点击限制错误次数操作条刷新时也将错误次数重置为 0 。
`typescript`
type VerifyParam = {
x: number; // 拼图 x 轴移动值。(拼图和滑块按钮移动距离不一样,这里指的是计算后的拼图移动距离。)
y: number; // 用户操作按钮或拼图 y 轴移动值。(按下鼠标到释放鼠标 y 轴的差值。)
sliderOffsetX: number; // 滑块 x 轴偏移值。(暂时没有什么场景会用到。)
duration: number; // 操作持续时长,单位毫秒。
trail: [number, number][]; // 移动轨迹
targetType: 'puzzle' | 'button'; // 操作 dom 目标。 puzzle-拼图 button-滑块按钮。
errorCount: number; // 连续错误次数
};
如果对安全比较重视的,可以通过 y duration trail 等结合算法判断是否人为操作,防止一些非人为操作破解滑块验证码。
大部分情况下,只需要将 x 传给后端即可(如果背景图和滑块有比例缩放,可能需要自己计算 x 乘以缩放比例)。
提供给外部的操作,便于一些特殊场景自定义。
`typescript
export type ActionType = {
refresh: (resetErrorCount?: boolean) => void; // 刷新,参数为是否重置连续错误次数为0
status: Status; // 每次获取返回当前的状态,注意它不是引用值,而是一个静态值。部分场景下配合自定义刷新操作使用。
};
export enum Status {
Default = 1, // 默认
Loading, // 加载中
Moving, // 移动中
Verify, // 验证中
Success, // 验证成功
Error, // 验证失败
LoadFailed // 加载失败
}
`
| 变量名 | 说明 | 默认值 |
| --- | --- | --- |
| --rcsc-primary | 主色 | #1991fa |#d1e9fe
| --rcsc-primary-light | 主色-浅 | |#f57a7a
| --rcsc-error | 错误色 | |#fce1e1
| --rcsc-error-light | 错误色-浅 | |#52ccba
| --rcsc-success | 成功色 | |#d2f4ef
| --rcsc-success-light | 成功色-浅 | |#e4e7eb
| --rcsc-border-color | 边框色 | |#f7f9fa
| --rcsc-bg-color | 背景色 | |#45494c
| --rcsc-text-color | 文本色 | |#676d73
| --rcsc-button-color | 按钮颜色 | |#ffffff
| --rcsc-button-hover-color | 鼠标移入时,按钮颜色 | |#ffffff
| --rcsc-button-bg-color | 按钮背景颜色 | |2px
| --rcsc-panel-border-radius | 图片容器边框圆角 | |42px` |
| --rcsc-control-height | 滑轨高度 |
> \*注意 IE11 不支持 css 变量,如果你的项目需要兼容 IE11,尽量不使用 css 变量改变样式。
[site]: https://caijf.github.io/rc-slider-captcha/
[npm]: https://img.shields.io/npm/v/rc-slider-captcha.svg
[npm-url]: https://npmjs.com/package/rc-slider-captcha