2.1.1 • Published 4 months ago

feng-shui-compass v2.1.1

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

FengShuiCompass - 自定义罗盘

自定义罗盘数据和样式,基本样式配置. 分 canvas(旧) 版本 和 svg 版本

在线演示:https://compass.zzerx.cn/

ui1 ui1

开始

概念: 层:一圈的数据为层,下标从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

属性名类型默认值说明
infoObject-包含 id、name、preview 等基本信息
compassSizeObject{ width: 800, height: 800 }罗盘尺寸配置
dataArray[]罗盘数据配置,参考 层配置参数
lineObject{ borderColor: "#AAAAAA", scaleColor: "#AAAAAA", scaleHighlightColor: "#AAAAAA" }线条样式配置
rotateNumber0旋转角度
layerFiltArray[][]层填充配置数组(svg版已弃用)
latticeFillArray[][]宫格填充配置,格式: [宫格索引, 层索引, 颜色]
isShowTianxinCrossBooleantrue是否显示天心十字
isShowScaleBooleantrue是否显示刻度
scaclStyleObject{ minLineHeight: 10, midLineHeight: 25, maxLineHeight: 25 }刻度样式配置
autoFontSizeBooleantrue是否自动计算字体大小
animationObject{ enable: false, duration: 1000, delay: 100 }动画配置

info 配置

基础标识信息

属性名类型默认值说明
idString/Number-唯一标识符,用于主题切换时的动画控制
nameString-主题名称
previewString-主题预览图路径

line 配置

线条样式配置

属性名类型默认值说明
borderColorString"#AAAAAA"边框颜色
scaleColorString"#AAAAAA"刻度线颜色
scaleHighlightColorString"#AAAAAA"高亮刻度线颜色

scaclStyle 配置

刻度样式配置

属性名类型默认值说明
minLineHeightNumber10最小刻度线高度
midLineHeightNumber25中等刻度线高度
maxLineHeightNumber25最大刻度线高度

animation 配置

动画效果配置

属性名类型默认值说明
enableBooleantrue是否启用动画
durationNumber1000动画持续时间(毫秒)
delayNumber100层间动画延迟(毫秒)

data

层配置参数

参数名类型默认值必填说明
nameString/Array-层名称。当为数组时可配置多个名称
startAngleNumber0起始角度,范围 0-360 (只有圆形层支持)
fontSizeNumber-字体大小(推荐开启autoFontSize)
textColorString/Array'#000'字体颜色。当为数组时可配置多个颜色
verticalBooleanfalse是否垂直显示文字
dataArray-层数据,支持一维数组和二维数组
togetherStyleString'empty'统一风格,见下方说明
shapeString'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 / 交流