索引
矢量在HT for Web中是矢量图形的简称,常见的png和jpg这类的栅格位图,
通过存储每个像素的颜色信息来描述图形,这种方式的图片在拉伸放大或缩小时会出现图形模糊,线条变粗出现锯齿等问题。
而矢量图片通过点、线和多边形来描述图形,因此在无限放大和缩小图片的情况下依然能保持一致的精确度。
在HT for Web中所有能用栅格位图的地方都可用矢量图形替代,例如GraphView组件上的图元图片,TreeView和TableView上的图标等,
甚至整个HT框架做出来的系统界面可以实现全矢量化,这样GraphView组件上的图元缩放都不会失真,并且不再需要为Retina显示屏提供不同尺寸的图片,
在devicePixelRatio多样化的移动时代,
要实现完美的跨平台,矢量可能是的最低成本的解决方案。
Data进行数据属性动态绑定JSON代码不直观不易修改问题,可导入导出JSON格式数据矢量采用JSON格式描述,使用方式和普通的栅格位图一致,通过ht.Default.setImage('hightopo', jsonObject)进行注册,
使用是将相应图片注册名设置到数据模型即可,如node.setImage('hightopo')和node.setIcon('hightopo')等。
矢量json描述必需包含width、height和comps参数信息:
width矢量图形的宽度height矢量图形的高度comps矢量图形的组件Array数组,每个数组对象为一个独立的组件类型,数组的顺序为组件绘制先后顺序同时可设置以下可选参数信息:
visible是否可见,默认为trueopacity透明度,默认为1,可取值范围0~1color染色颜色,设置上该颜色后矢量内部绘制内容将会融合该染色值blendMode染色模式,染色时颜色的计算方式multiply相乘,默认值override覆盖override_rgb覆盖rgb,即覆盖除透明度外的颜色override_a覆盖a,即覆盖透明度clip用于裁剪绘制区域,可设置两种类型:boolean类型,控制绘制时超出width和height区域的内容是否被裁剪,默认为false不裁剪function类型,可利用Canvas画笔绘制,实现自定义裁剪任意形状的效果fitSize适配大小,默认false,矢量最终绘制的大小属性决定于引用节点,组件计算大小时,是拉伸还是重置大小的方式,false拉伸,此模式下会导致组件图形被拉伸,true重置大小,为true时,如果组件中有布局属性会生效interactive可交互,是否响应以on开头的交互事件,默认falsescrollable可滚动,设置为可滚动后,鼠标滚轮在该节点上操作不再触发视图的滚动交互动作,默认falseboundExtend边界扩充,用于扩大矢量绘制范围,默认0不扩充disableSelectedBorder隐藏选中边框pixelPerfect像素精确,图元在2D下,透明区域是否忽略选中图元,默认为true,表示忽略选中visible可见,图元在2D下,是否可见,默认为true,表示可见state图标默认状态,默认为空,可参考状态renderHTML渲染元素,详见cacheRule矢量缓存规则,详见attachPoints吸附点,默认为空,格式如:{x:0, y:0, offsetX:0, offsetY:0},x、y 与锚点概念一致,数值在0-1的范围内,吸附点在图形内,offsetX、offsetY 是吸附点相对于 x、y 点的偏移量attachStyle吸附方式,默认closeclose接近,靠近吸附点时,才吸附上去,否则自动判断当前的 x、y 锚点值strict严格,严格吸附到某个吸附点上,其它位置无法作为连线端点以下例子定义了一个名为sunrise的矢量图形,宽度220,高度150,comps定义了三个type: shape类型组件。
ht.Default.setImage('sunrise', {
    width: 220,
    height: 150,
    comps: [
        {
            type: 'shape',
            points: [10, 110, 10, 10, 210, 10, 210, 110],
            segments: [1, 4],
            background: 'yellow',
            gradient: 'linear.north'
        },
        {
            type: 'shape',
            shadow: true,
            points: [30, 10, 30, 110, 30, 60, 90, 60, 90, 10,
                90, 110, 130, 10, 190, 10, 160, 10, 160, 110
            ],
            segments: [
                1, 2, 1, 2, 1, 2, 1, 2, 1, 2
            ],
            borderWidth: 10,
            borderColor: '#1ABC9C',
            borderCap: 'round'
        },
        {
            type: 'shape',
            points: [10, 130, 35, 120, 60, 130, 85, 140,
                110, 130, 135, 120, 160, 130, 185, 140, 210, 130
            ],
            segments: [
                1, 3, 3, 3, 3
            ],
            borderWidth: 2,
            borderColor: '#3498DB'
        }
    ]
});
var node = new ht.Node();
node.setPosition(160, 110);
node.setImage('sunrise');
dataModel.add(node);
以下的代码片段展示的是嵌套矢量图形的用法,在定义group-sunrise矢量时,通过type: 'image'的图片类型,
指向了name: 'sunrise'的以定义矢量图形,该例子分别定义了四个嵌套的sunrise矢量,设置了clip: true,
这样右上角的sunrise矢量虽然旋转后超出了宽高设置的区域,但超出的绘制内容会被裁剪掉。
ht.Default.setImage('group-sunrise', {
    width: 240,
    height: 160,
    clip: true,
    color: 'red',
    comps: [
        {
            type: 'image',
            name: 'sunrise',
            rect: [0, 0, 120, 80],
            opacity: 0.3
        },
        {
            type: 'image',
            name: 'sunrise',
            rect: [120, 0, 120, 80],
            rotation: Math.PI / 4
        },
        {
            type: 'image',
            name: 'sunrise',
            rect: [0, 80, 120, 80],
            shadow: true
        },
        {
            type: 'image',
            name: 'sunrise',
            rect: [120, 80, 120, 80]
        }
    ]
});
示例定义了一个cloud的多边形云图效果,接下来定义的cloud-rect和cloud-oval分别嵌套复用了cloud的云图。
采用了clip为true进行矩形裁剪解决了文字内容超出宽高区域的问题,通过自定义clip函数达到裁剪出圆形效果。
ht.Default.setImage('cloud-oval', {
    width: 300,
    height: 300,
    clip: function(g, width, height, data) {
        g.beginPath();
        g.arc(width / 2, height / 2, Math.min(width, height) * 0.42, 0, Math.PI * 2, true);
        g.clip();
    },
    comps: [
        {
            type: 'rect',                            
            rect: [0, 0, 300, 300],
            background: '#3498DB'
        },                
        {
            type: 'image',
            name: 'cloud',
            rect: [0, 0, 300, 300]
        },                         
        {
            type: 'text',
            text: new Date(),
            rect: [0, 120, 300, 100],
            color: '#34495E',
            font: 'bold 18px Arial',
            align: 'center'
        }
    ]
}); 
组件的属性一般根据组件类型的不同而设置,而阴影、透明度和旋转等属性是所有类型都具备可设置的参数。
type组件类型,目前支持类型如下:rect 矩形circle 圆形oval 椭圆形roundRect 四周圆角矩形star 星形形triangle 三角形hexagon 六边形pentagon 五边形diamond 钻石形rightTriangle 直角三角形parallelogram 平行四边形trapezoid 梯形 polygon 多边形 arc 圆弧形 shape 多边形text 文本image 图片pieChart 饼图columnChart 柱状图stackedColumnChart 堆栈柱状图percentageColumnChart 百分比柱状图lineChart 曲线图SVGPath SVGPathopacity透明度,取值范围0~1,0则完全透明,1则保持原本颜色rotation旋转弧度,以组件的中心进行顺时针旋转shadow是否显示阴影,默认值为falseshadowOffsetX阴影的水平偏移量,默认值为3shadowOffsetY阴影的垂直偏移量,默认值为3shadowBlur阴影的模糊级别shadowColor阴影的颜色visible是否可见,默认值为truerelative默认为false采用绝对值,若为true则rect参数为相对于矢量的宽高比rect指定组件绘制在矢量中的矩形边界,需结合relative参数,有两种格式类型:[x, y, width, height]四个参数方式,分别代表左上角坐标x和y,以及宽高width和height[position, width, height]三个参数方式,position位置类型,以及宽高width和heightoffsetX对rect定义的矩形区域再进行水平方向的偏移,该参数采用绝对值,不考虑relative参数offsetY对rect定义的矩形区域再进行垂直方向的偏移,该参数采用绝对值,不考虑relative参数anchorX对rect定义的矩形区域的水平方向锚点,默认为0.5anchorY对rect定义的矩形区域的垂直方向锚点,默认为0.5state组件显示的状态值,如果不设置显示隐藏不会受到状态机制影响,可参考状态displayName组件名称,默认空prefix前缀,默认空,填写可对组件直接进去数据驱动,如填写comp,可通过data.a('comp.opacity', 0.5)修改组件透明度scaleX对rect定义的区域的水平方向缩放,默认为1scaleY对rect定义的区域的垂直方向缩放,默认为1clipPercentage裁剪比例,默认为1,取值范围0~1,0为全部裁剪,1则保持原本clipDirection裁剪方向,默认为toptop从上到下bottom从下到上left从右到左right从左到右selectable可选中,设置组件是否可以选中,默认为truemovable可移动,设置组件是否可以移动,默认为truepixelPerfect像素精确,默认为false以下例子分别对云图矢量设置了透明度0.5,旋转了Math.PI/4弧度,设置了阴影,以及将三种参数组合的效果。
ht.Default.setImage('cloud-all', {
    width: 300,
    height: 300,
    comps: [
        {
            type: 'shape',
            points: points,
            segments: segments,
            background: '#d6f0fd',
            gradientColor: '#A6f0fd',
            gradient: 'linear.north',
            opacity: 0.5,
            rotation: Math.PI/4,
            shadow: true,
            shadowColor: '#E74C3C',
            shadowBlur: 12,
            shadowOffsetX: 6,
            shadowOffsetY: 6
        }                       
    ]
}); 
除了shape类型外其他类型组件都需要指定rect参数,因为shape自身通过points和segments信息已经能确定自身组件位置,
但shape类型依然可以设置rect参数,相当于将shape压缩或拉伸到填充入指定的rect区域,以下例子中定义的cloud矢量,
为两个shape构成,第一个shape未指定rect,第二个shape指定的rect将云缩小定位到中心区域,其rect设置时采用了
[17, 0.3, 0.3]的三参数方式,其中17代表中心position位置,
0.3代表宽度为矢量宽和高的0.3倍大小。
组件旋转和缩放的中心点是由锚点anchorX和anchorY决定的,与节点锚点不同的是,这里组件绘制区域是由rect决定,锚点不会影响最终的绘制位置。
矢量的基本类型与style的shape参数是完全一一对应,
只是将style中的名称改成骆驼式命名法去掉了.分隔符。
基本类型:
rect矩形circle圆形oval椭圆形roundRect四周圆角矩形star星形形triangle三角形hexagon六边形pentagon五边形diamond钻石形rightTriangle直角三角形parallelogram平行四边形trapezoid梯形 polygon多边形 arc圆弧形 			参数属性:
borderWidth边框宽度,默认值为0代表不绘制边框borderColor边框颜色borderCap边框末端线帽的样式,可选参数为butt|round|square
borderJoin边框当两条线交汇时创建边角的类型,可选参数为bevel|round|miter
borderPattern显示虚线样式,Array类型,例如[5, 5]depth只对rect类型起作用,正值代表凸起,负值代表凹陷,默认值为0background背景填充颜色,为null代表不填充背景gradient渐近色类型:shape.background纯色填充背景。'linear.southwest','linear.southeast','linear.northwest','linear.northeast',
'linear.north','linear.south','linear.west','linear.east',
'radial.center','radial.southwest','radial.southeast','radial.northwest','radial.northeast',
'radial.north','radial.south','radial.west','radial.east',
'spread.horizontal','spread.vertical','spread.diagonal','spread.antidiagonal',
'spread.north','spread.south','spread.west','spread.east'gradientColor背景渐近颜色 repeatImage填充重复背景的图片,注意这里的图片不支持矢量dash是否显示虚线,默认值为false dashPattern虚线样式,默认值为[16, 16]dashOffset虚线偏移,默认值为0dashColor虚线颜色dashWidth虚线宽度,默认为空代表采用shape.border.width值 dash3d虚线是否显示3d效果,默认值为falsedash3dColor虚线3d效果颜色,为空采用默认白色,呈现3d效果时连线的中间部分为该颜色dash3dAccuracy虚线3d效果精确度,该值越小3d渐近效果越好但影响性能,一般情况无需修改 cornerRadius该参数指定roundRect类型的圆角半径,默认为空系统自动调节,可设置正数值polygonSide多边形变数,该参数指定polygon类型的变数arcFrom圆弧形起始弧度,默认值为Math.PIarcTo圆弧形结束弧度,默认值为2*Math.PIarcClose圆弧形是否闭合,默认为truearcOval圆弧形是否为椭圆,默认为falseshape类型,基本类型的参数也都适用于多边形,多边形通过points的Array数组指定每个点信息,
points以[x1, y1, x2, y2, x3, y3, ...]的方式存储点坐标。曲线的多边形可通过segments的Array数组来描述,
segment以[1, 2, 1, 3 ...]的方式描述每个线段:
moveTo,占用1个点信息,代表一个新路径的起点lineTo,占用1个点信息,代表从上次最后点连接到该点quadraticCurveTo,占用2个点信息,第一个点作为曲线控制点,第二个点作为曲线结束点bezierCurveTo,占用3个点信息,第一和第二个点作为曲线控制点,第三个点作为曲线结束点closePath,不占用点信息,代表本次路径绘制结束,并闭合到路径的起始点  对比闭合多边形除了设置segmennts参数外,还可以设置closePath属性:
* closePath获取和设置多边形是否闭合,默认为false,对闭合直线采用这种方式,无需设置segments参数
ht.Default.setImage('shape', {
    width: 100,
    height: 50,
    comps: [
        {
            type: 'shape',
            borderWidth: 2,
            borderColor: '#34495E',
            background: '#40ACFF',
            gradient: 'spread.vertical',
            gradientColor: 'white',
            points: [5, 25, 70, 25, 70, 5, 95, 25, 70, 45],
            segments: [
                1, // moveTo [5, 25]
                2, // lineTo [70, 25]
                1, // moveTo [70, 5]
                2, // lineTo [95, 25]
                2, // lineTo [70, 45]
                5] // closePath to [70, 5]
        }                          
    ]
});                 
border边框类似,用于绘制指定矩形的内边框,该类型的绘制区域不会超出矩形边界
color边框颜色
width边框宽度
text文本类型,用于呈现数值或名称等描述信息。
align文本绘制在矩形区域的水平方向对齐方式,可设置为:left、center或rightvAlign文本绘制在矩形区域的垂直方向对齐方式,可设置为:top、middle或bottomcolor文本颜色graident文本渐近类型gradientColor文本渐近颜色decoration文本装饰,可设置为:underline、overline或strikethroughvertical文本是否垂直绘制verticalGap文本垂直绘制文字间隔font文本字体image图片类型有两种用处,一是可引入传统的栅格位图,达到矢量和传统图片的融合,
二时通过image类型嵌入已定义的矢量,形成无限嵌套效果和可复用的功能,
图片注册详见入门手册
name图片名称,对应通过ht.Default.setImage注册的图片或矢量图形名称。 color渲染颜色,HT系统会自动采用该颜色对图片内容进行渲染stretch图片如何绘制在指定矩形区域类型: fill图片填充满整个矩形区域,如果图片宽高比例和矩形不一致会导致图片拉伸失真uniform图片始终保持原始宽高比例不变化,并尽量填充满矩形区域centerUniform当矩形区域大于图片尺寸时图片以原始大小绘制在中心位置,空间不够时采用uniform的绘制方式
饼图类型为pieChart:
values:Array类型数组,存储number类型数值colors:Array类型数组,存储string类型颜色。如果未设置,则系统会使用ht.Color.chart数组的默认颜色label:是否显示文字信息:boolean类型:为true显示value信息,false不显示function类型:function(value, index, sum, data),函数返回需要显示的文字value:当前数值index:当前索引sum:values的总数值data:当前关联的Data对象labelColor:文字颜色labelFont:文字字体hollow:boolean类型,决定是否中空即圆环效果,默认为falsestartAngle:number类型代表起始弧度,默认为0柱状图类型为columnChart:
label:是否显示文字信息:boolean类型:为true显示value信息,false不显示function类型:function(value, index, serie, data),函数返回需要显示的文字value:当前数值index:当前索引serie:当前系列data:当前关联的Data对象labelColor:文字颜色labelFont:文字字体series:系列,以Array数组的方式指定每个系列的数值和颜色等信息values:Array类型数组,存储number类型数值colors:Array类型数组,存储string类型颜色color:颜色值,其优先级低于colorsminValue:最小值,如果未设置默认为0maxValue:最大值,如果未设置则系统自动计算调整以下例子为serie只有一组数据的情况,这种情况下一般会设置colors达到不同column不同颜色。
以下例子为serie有多组数据的情况,这种情况下一般会设置color而不设置colors,以达到不同系列不同颜色效果。
堆栈柱状图类型为stackedColumnChart:
label:是否显示文字信息:boolean类型:为true显示value信息,false不显示function类型:function(value, index, serie, data),函数返回需要显示的文字value:当前数值index:当前索引serie:当前系列data:当前关联的Data对象labelColor:文字颜色labelFont:文字字体series:系列,以Array数组的方式指定每个系列的数值和颜色等信息values:Array类型数组,存储number类型数值colors:Array类型数组,存储string类型颜色color:颜色值,其优先级低于colorsmaxValue:最大值,如果未设置则系统自动计算调整百分比柱状图类型为percentageColumnChart:
label:是否显示文字信息:boolean类型:为true显示value信息,false不显示function类型:function(value, index, serie, data),函数返回需要显示的文字value:当前数值index:当前索引serie:当前系列data:当前关联的Data对象labelColor:文字颜色labelFont:文字字体series:系列,以Array数组的方式指定每个系列的数值和颜色等信息values:Array类型数组,存储number类型数值colors:Array类型数组,存储string类型颜色color:颜色值,其优先级低于colors曲线图类型为lineChart:
label:是否显示文字信息:boolean类型:为true显示value信息,false不显示function类型:function(value, index, serie, data),函数返回需要显示的文字value:当前数值index:当前索引serie:当前系列data:当前关联的Data对象labelColor:文字颜色labelFont:文字字体series:系列,以Array数组的方式指定每个系列的数值和颜色等信息values:Array类型数组,存储number类型数值colors:Array类型数组,存储string类型颜色color:颜色值,其优先级低于colorsminValue:最小值,如果未设置默认为0maxValue:最大值,如果未设置则系统自动计算调整linePoint:绘制拐点效果:boolean类型:为true显示圆形观点信息,false不显示function类型:function(g, x, y, color, index, serie, data),函数内绘制拐点效果g:画笔x:当前拐点横坐标y:当前拐点纵坐标color:当前系列线颜色index:当前值索引serie:当前系列data:当前关联Data对象lineWidth:线宽度,默认为2line3d:是否呈现3d线效果除了HT预定义的组件类型外,用户还可以自定义扩展类型,自定义有两种方式:
type值设置成绘制函数:function(g, rect, comp, data, view){}ht.Default.setCompType(name, function(g, rect, comp, data, view){})注册组件类型,矢量type值设置成相应的注册名先注册ht.Default.setCompType的方式有利于数据模型存储序列化,同时也有利于复用。
以下示例自定义了一个时钟,该时钟的矢量由三部分组成:
circle类型,绘制了圆形的黄色渐近背景作为底盘type为clock-face的类型,绘制了时钟的60个边缘刻度type设置为绘制函数,根据data.a('date')上的时间信息绘制了时、分和秒针ht.Default.setCompType('clock-face', function(g, rect, comp, data, view) {
    var cx = rect.x + rect.width / 2;
    var cy = rect.y + rect.height / 2;
    var theta = 0;
    var r = Math.min(rect.width, rect.height)/2 * 0.92;
    g.strokeStyle = "#137";
    for (var i = 0; i < 60; i++) {                        
        g.beginPath();
        g.arc(
            cx + Math.cos(theta) * r, 
            cy + Math.sin(theta) * r, 
            i % 5 === 0 ? 4 : 1, 
            0, Math.PI * 2, true);
        g.closePath();
        g.lineWidth = i % 5 === 0 ? 2 : 1;
        g.stroke();
        theta = theta + (6 * Math.PI / 180);
    }
});
SVGPath类型,基本类型的参数也都适用于SVG路径,通过path指定符合SVG规范的路径信息,
path的格式请参考这里
SVGPath类型在绘制时要进行大量的解析工作,所以应该避免大量使用这种类型,尤其是在对性能敏感的场景中。
在HT矢量中,如果使用了状态机制,每个组件都可以定义状态state来决定自己在哪个状态下显示,节点状态由data.s('state')决定,data.s('state')为空时,会从整体属性上去获取默认状态值。可以重载gv.getState自定义逻辑。如果组件不设置state属性,则显示隐藏不会受到这一机制的影响,组件状态是一对多的,不同组件可以使用同一个状态值。gv.getState默认逻辑如下
getState: function(data) {
    var state = data.s('state');
    if (state) return state;
    // 从图标上查询获取默认值
    var img = getImage(data.getImage());
    if (!img) return null;
}
一个运用的例子
通过定义HT矢量JSON的renderHTML函数属性,可实现在GraphView拓扑图上,嵌入任意第三方HTML DOM元素。HT的图纸是Canvas实现,renderHTML的DOM一定在Canvas之上,使用renderHTML的DOM与常规Canvas上绘制的图元不可能有层级控制可能性。renderHTML 的基本结构如下:
/**
* renderHTML 在图元属性变化后会被调用到,注意这个函数里面不要再改变 data 属性,更不要在这里起动画逻辑,改变数据要在运行时的外面代码进行
* @param  {ht.Node} data [图元对象]
* @param  {ht.graph.GraphView} gv [当前拓扑图组件]
* @param  {object} cache [缓存对象,用于存在 html 元素和相关信息,避免重复构建]
* @return {HTMLElement} [要显示的 HTML 元素,或 HT 组件对象]
*/
renderHTML: function(data, gv, cache) {
    if (!cache.htmlView) {
        // 创建 HTML
    }
    // 数据驱动
    return html;
}
返回的HTML元素上有以下相关约定:
layoutHTML布局函数,每次Node图元被调用绘制刷新时调用,一般根据Node的位置信息摆放HTML元素onHTMLRemoved删除回调,当HTML元素要从拓扑图上删除时调用,一般用于释放销毁资源等处理工作onHTMLAdded添加回调,当HTML元素被添加到拓扑图上时调用,一般用于必须在父容器添加到界面才能进行的初始化工作autoAdjustIndex默认为true,当DOM元素数量、层级发生变化时会重新append以保证层级跟 dataModel一致,可以改为false避免iframe的自动刷新问题updateAppendMatrix默认为false,如果HTML中有额外设置CSS3变形,会导致交互位置出错的问题,设置为true后HT内会读取这些信息并合并到交互计算的矩阵中beforeCanvas默认为false,设置为true可将渲染的DOM置于拓扑图之下另外为了方便HTML元素根据图元信息布局的函数,ht.graph.GraphView上增加了layoutHTML方法
/**
* @param  {ht.Node} data 参考图元对象
* @param  {HTMLElement} html 要布局的 HTML 元素,可传入 HT 组件对象
* @param  {boolean} bound 默认为 false,HTML 元素完全重叠甚至被旋转图元,为 true 则根据图元矩形区域摆放
*
*/
graphView.layoutHTML(data, html, bound)
注意bound为默认值false时,图元是通过CSS的transform设置,实现和图元对象的完全重合,这种情况下拓扑图缩放时,HTML元素会出现不清晰的问题。如果采用true的布局方式,则图元不设置transform参数,而通过设置top/left/width/height进行布局,这种方式HTML元素会保持清晰,但不具备旋转功能的效果
Canvas绘制中,每帧绘制次数是影响2D性能的一大因素之一,如果一个矢量有100个基本图形组件,不考虑矢量嵌套的情况下,绘制时相当于这个矢量需要进行100次绘制,然而目前主流的设备中,每帧大于3000次绘制就会感觉性能有所下降。HT矢量中提供了一套缓存机制,可以根据一定逻辑将绘制结果保存在内存中,每次绘制时去找内存中缓存的图形信息,这样就只要进行一次绘制,可以大大提升了绘制性能,特别适用于有复杂矢量,同一个矢量被大量复用的2D拓扑图中。
矢量cacheRule属性,默认为false,即不开启缓存。可以取值:
true,开启缓存,第一次绘制时会缓存图形像素信息,以后每次绘制都绘制缓存的内容,适用于没有任何数据绑定、状态功能的矢量,即只有单一绘制结果的。function(data, view) {// TODO return key;},定义一个缓存规则,data是当前数据节点,view是当前视图,即graphView, key是用户根据规则返回,相当于一个绘制结果对应一个key。注意:矢量缓存适用于一个矢量只有一种绘制结果,或者只有几种可枚举的绘制结果,建议在10种以内使用缓存功能。使用缓存后矢量在某些缩放比例下会有轻微的失真,所以缓存一般作为后期性能优化手段。另外,ht.Default上也增加了setImageCacheRule方法,可以让用户在代码中全局注册缓存的逻辑,这个方法更适用于项目已经完成要做后期优化,这样可以不用再去修改矢量内容,复杂的图纸运用,而不会因为定义在矢量上全局受影响,使用示例
/**
 * key 可以是注册的矢量名或者矢量 JSON 地址,取值与 cacheRule 属性取值一致
 */
ht.Default.setImageCacheRule({
    'symbols/test.json': true,
    'symbols/test2.json': function(data, view) {
        return data.a('status');
    },
});
// 也可以是两个参数的形式
ht.Default.setImageCacheRule('symbols/test3.json', true);
可平移或缩放以下两个拓扑图对比缓存效果,左侧是未做缓存,右侧是加了缓存的。
整体属性、组件属性中,都可以定义以下几种事件处理,除上下文菜单、悬停、滚动外,其它都可兼容touch 事件。注意:交互是需要额外性能开销,要让矢量内容可以交互,需在矢量整体属性设置 interactive: true,或者对图元设置data.s('interactive', true)。
onClick点击onDoubleClick双击onContextMenu上下文菜单,即鼠标右击onDown按下onUp抬起onMove移动onEnter进入onHover悬停onLeave离开onBeginDrag开始拖拽onDrag拖拽onEndDrag结束拖拽onScroll滚动所有事件对应参数列表如下:
event事件对象data图元对象view视图对象point交互位置,忽略当前图元转换情况width矢量|组件宽度height矢量|组件高度详见数据绑定手册