# cardjs
**Repository Path**: buluefox/cardjs
## Basic Information
- **Project Name**: cardjs
- **Description**: card.js是一款绘制游戏王卡图的工具
- **Primary Language**: JavaScript
- **License**: AFL-3.0
- **Default Branch**: master
- **Homepage**: https://ymssx.gitee.io/ygo
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 42
- **Created**: 2020-04-24
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# card.js
这是一个游戏王卡片渲染工具,你只需要在你的网站引入card.js,就可以轻松地渲染出标准的游戏王卡图!
## 为什么使用card.js
card.js会追踪数据的变动,自动地更新卡图,这在与表单交互场景十分有用。同时,对于大量的图片更新请求,card.js只会进行一次绘制,因此您不用过多的担心性能问题。
card.js十分容易使用,您只需要短短的一行代码,就能将一张canvas画布变成一张游戏王高清卡图!另外,card.js可以自由的更改模板样式,在config文件中您可以随心所欲地进行创作!
## 演示
[在线演示](https://ymssx.gitee.io/ygo)
## 使用方式
### ES Module
```javascript
import Card from './card.js'
let card = new Card({ cardData, canvas, size })
```
#### cardData -- 卡片信息,包括名字、密码、效果等
```typescript
interface cardData = {
name: string, // card name
_id: string, // card id
type: 'monster' | 'magic' | 'tragic', // first type
type2: type, // secend type
type3: type, // third type
type4: type, // fourth type
desc: string // card describe
?attribute: 'light' | 'dark' | 'fire' | 'water' | 'wind' | 'ground' | 'god'
// monster attribute
?race: string // monster race
?attack: number // monster attack
?defend: number // monster defend
?level: number // monster level
?link: boolean[] // link monster arrows
?lb_desc: string // pendulum describe
?lb_number: number // pendulum number
}
typeMap = { "tc": '通常', "xg": '效果', "ys": '儀式', "rh": '融合', "tt": '同調', "cl": '超量', "lb": '靈擺', "lj": '連接', "ec": '二重', "tz": '調整', "tm": '同盟', "tk": '卡通', "lh": '靈魂', "fz": '反轉', "ts": '特殊召喚', "zb": '裝備', "sg": '速攻', "cd": '場地', "fj": '反擊', "yx": '永續' }
```
例如
```javascript
let cardData = {
name: '青眼的白龍',
_id: '89631139',
type: 'monster',
type2: 'tc',
type3: '',
type4: '',
attack: 3000,
defend: 2500,
level: 8,
desc: '以高攻擊力著稱的傳說之龍。任何對手都能被粉碎,其破壞力不可估量。',
race: '龍族',
attribute: 'light'
}
```
#### canvas -- canvas对象
## 生命周期
通过传入事件来自定义卡片渲染的生命周期钩子函数
#### fontLoaded
> 单个字体文件加载完成
#### fontsLoaded
> 所有字体文件加载完成
#### imageLoaded
> 单个图片资源加载完成
#### imagesLoaded
> 单个图片资源加载完成
#### loaded
> 卡片渲染完毕
## 扩展
```typescript
const Card = function ({
cardData: object, // 卡片数据
canvas: HTMLElement, // canvas对象
size: number[] = [813, 1185], // 绘制尺寸,[宽, 高]
lang:'cn' | 'jp' | 'en' = 'cn', // 语言 cn、jp、en
config: object = defaultConfig, // 配置信息 - object
fastFont: boolean = true, // 精简字体 - boolean
fontLoaded: function = defaultEvent, // 事件 - function
imageLoaded: function = defaultEvent,
fontsLoaded: function = defaultEvent,
imagesLoaded: function = defaultEvent,
loaded: function = defaultEvent,
recover: boolean = false, // 是否缓存配置与数据 - boolean
holo: boolean = true, // 是否显示防伪标志 - boolean
cardbagSwitch: boolean = false, // 是否显示卡包信息 - boolean
translate: boolean = false // 是否自动繁简转换 - boolean
})
```
## config
更改config文件,可以自由地调整卡片的样式,[具体配置请参考`config/defaultConfig.js`](https://gitee.com/ymssx/cardjs/tree/master/source/config)
`card.changeConfig(config)`
## API
#### Card.changeConfig
`card.changeConfig(config)`
#### Card.feedData
调整卡片信息
`card.feedData(cardData)`
或者直接
`card.cardData.name = 'Blue Eyes'`
#### Card.save
保存卡图
## 实现方式
Card.js
### cardData.js
>管理卡片数据,监听数据变动,当数据更新之后,cardData会自动分析需要更新哪些文件,然后告知fileManage
### fileManage.js
> 管理文件的更新与缓存,当收到cardData的更新请求后,会自动从缓存或者网络调用图片,在文件更新之后会自动告知cardDrawer
### cardDrawer.js
> 管理绘图功能,在收到fileManage的绘图请求后,会按照cardData的数据以及fileManage提供的文件进行绘图