2.1.1 • Published 4 months ago
feng-shui-compass v2.1.1
FengShuiCompass - 自定义罗盘
自定义罗盘数据和样式,基本样式配置. 分 canvas(旧) 版本 和 svg 版本
在线演示:https://compass.zzerx.cn/
开始
概念:
层:一圈的数据为层,下标从0开始。
, 宫:一层中的一格为宫,下标从0开始
安装
npm i feng-shui-compass
SVG版本的FengShuiCompassSvg.vue 组件
相比Canvas版本,SVG版本具有以下优势: 1. 更好的缩放性能,不会失真 2. 更容易实现交互效果 3. 支持多边形罗盘
基本使用
import { FengShuiCompassSvg, themes } from 'feng-shui-compass';
import 'feng-shui-compass/dist/style.css';
// 使用预设主题
const compassConfig = reactive(themes.compassTheme);
// 或自定义配置 (按照规则)
const compassConfig = reactive({
info: {
id: 'custom-compass'
},
compassSize: {
width: 500,
height: 500
},
latticeFill: [
[0, 1, "rgba(255, 166, 0, 0.57)"],
// [0, 1, "#FF0000"],
],
scaclStyle:{
minLineHeight: 10,
midLineHeight: 25,
maxLineHeight: 25,
},
line: {
borderColor: "#AAAAAA",
scaleColor: "#AAAAAA",
scaleHighlightColor: "#AAAAAA",
},
isShowTianxinCross: false,
data: [
{
name: "方位",
startAngle: 0,
fontSize: 32,
textColor: "#ffff00",
vertical: false,
togetherStyle: "empty",
data: ["北", "东北", "东", "东南", "南", "西南", "西", "西北"],
},
{
name: "刻度标记",
startAngle: 0,
fontSize: 18,
textColor: "#cccccc",
vertical: true,
togetherStyle: "empty",
data: [],
},
],
});
<template>
<FengShuiCompassSvg
:config="compassConfig"
@latticeClick="handleLatticeClick"
/>
</template>
组件配置
组件使用统一的 config 对象进行配置,包含以下属性:,具体用例可参考 themes
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
info | Object | - | 包含 id、name、preview 等基本信息 |
compassSize | Object | { width: 800, height: 800 } | 罗盘尺寸配置 |
data | Array | [] | 罗盘数据配置,参考 层配置参数 |
line | Object | { borderColor: "#AAAAAA", scaleColor: "#AAAAAA", scaleHighlightColor: "#AAAAAA" } | 线条样式配置 |
rotate | Number | 0 | 旋转角度 |
Array[] | [] | 层填充配置数组(svg版已弃用) | |
latticeFill | Array[] | [] | 宫格填充配置,格式: [宫格索引, 层索引, 颜色] |
isShowTianxinCross | Boolean | true | 是否显示天心十字 |
isShowScale | Boolean | true | 是否显示刻度 |
scaclStyle | Object | { minLineHeight: 10, midLineHeight: 25, maxLineHeight: 25 } | 刻度样式配置 |
autoFontSize | Boolean | true | 是否自动计算字体大小 |
animation | Object | { enable: false, duration: 1000, delay: 100 } | 动画配置 |
info 配置
基础标识信息
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
id | String/Number | - | 唯一标识符,用于主题切换时的动画控制 |
name | String | - | 主题名称 |
preview | String | - | 主题预览图路径 |
line 配置
线条样式配置
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
borderColor | String | "#AAAAAA" | 边框颜色 |
scaleColor | String | "#AAAAAA" | 刻度线颜色 |
scaleHighlightColor | String | "#AAAAAA" | 高亮刻度线颜色 |
scaclStyle 配置
刻度样式配置
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
minLineHeight | Number | 10 | 最小刻度线高度 |
midLineHeight | Number | 25 | 中等刻度线高度 |
maxLineHeight | Number | 25 | 最大刻度线高度 |
animation 配置
动画效果配置
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
enable | Boolean | true | 是否启用动画 |
duration | Number | 1000 | 动画持续时间(毫秒) |
delay | Number | 100 | 层间动画延迟(毫秒) |
data
层配置参数
参数名 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
name | String/Array | - | 否 | 层名称。当为数组时可配置多个名称 |
startAngle | Number | 0 | 否 | 起始角度,范围 0-360 (只有圆形层支持) |
fontSize | Number | - | 否 | 字体大小(推荐开启autoFontSize) |
textColor | String/Array | '#000' | 否 | 字体颜色。当为数组时可配置多个颜色 |
vertical | Boolean | false | 否 | 是否垂直显示文字 |
data | Array | - | 是 | 层数据,支持一维数组和二维数组 |
togetherStyle | String | 'empty' | 否 | 统一风格,见下方说明 |
shape | String | 'circle' | 否 | 层形状,可选值:'circle'(圆形)、'polygon'(多边形),如果使用多边形建议保持边数量一致,如果混用多边形和圆形,建议圆形在外,多边形在内 |
dataItem togetherStyle 可选值
值 | 说明 |
---|---|
empty | 默认样式,常规显示 |
equally | 平分宫格样式 |
dataItem shape 可选值
值 | 说明 |
---|---|
circle | 默认样式,圆形层 |
polygon | 多边形层,根据宫格数量自动生成正多边形 |
事件
事件名 | 参数 | 说明 |
---|---|---|
latticeClick | { latticeIndex, layerIndex, data } | 宫格点击事件 |
canvas 版本 的 vue 组件 (旧)
详细可参考示例代码
<script setup>
import { FengShuiCompass, themes } from 'feng-shui-compass';
import 'feng-shui-compass/dist/style.css';
...
</script>
<FengShuiCompass
:width="2000"
:height="2000"
v-model:rotate="rotate"
:compassData="themes.data"
v-model:layerFilt="layerFilt"
v-model:latticeFill="latticeFill"
:scaclStyle="scaclStyle"
></FengShuiCompass>
此处的width,height 为canvs画布大小,非div大小
canvas 版本直接使用 CompassCanvasCreateor 绘制
import { CompassCanvasCreateor } from 'feng-shui-compass';
const { FengShuiCompass, CompassData } = CompassCanvasCreateor;
const compassData = new CompassData().getAllData();
const fs = new FengShuiCompass();
let canvas /* = canvas 元素 */
//获取canvas上下文
let ctx = canvas.getContext("2d");
//链式调用显示罗盘
//设置中心点
fs.setCenterPoint(props.width / 2, props.height / 2)
//设置半径
.setRadius(props.height / 2)
//设置宫填充色(二维数组格式[层][宫],支持循环填充且不覆盖已有颜色)
.setLatticeFill()
//设置层填充色(数组格式,支持循环填充且保留原有刻度线)
.setLayerFill([])
//设置刻度样式
.setScaclStyle({
minLineHeight: 10,
midLineHeight: 25,
maxLineHeight: 25,
numberFontSize: 30,
})
//添加罗盘数据
.setCompassData(compassData) //必须在配置所有基本数据完成之后执行
.draw(ctx); //draw 必须setCompassData完成之后执行 终止链式
其他
欢迎 PR / ISSUE / 交流