HQChart使用教程30-K线图如何对接第3方数据27-如何在指标中渲染DOM元素

DOM指标

把指标的输出数据通过一个一个DOM元素显示出来

效果图

在这里插入图片描述

代码示例

使用NetworkFilter回调用 处理

function NetworkFilter(data, callback)
{
    
    
    console.log('[NetworkFilter] data', data);

    if (data.Name=='APIScriptIndex::ExecuteScript')
    {
    
    
        var request=data.Request;
        if (request.Data.indexname=='SVG图标标记')
        {
    
    
            var hqchart=data.HQChart;
            var kData=hqchart.ChartPaint[0].Data;

            var closeLine={
    
    name:'收盘价线', type:0, data:kData.GetClose() };
            
            var doms= 
            {
    
     
                name:'MULTI_HTMLDOM', type:1, 
                Draw: 
                {
    
     
                    DrawType:'MULTI_HTMLDOM', 
                    Callback:(op,obj)=>{
    
     drawDomCallback(op,obj); }, //绘制dom的回调函数, 渲染dom由外部执行
                    DrawData: 
                    [
                        {
    
     Date:20190916, Value:15.5, Text:'15.5' , Guid:"jj_1"},
                        {
    
     Date:20201202, Value:15.4,Text:'15.4',Guid:"jj_2" } , 
                        {
    
     Date:20210106, Value:23.6, Text:'23.6' ,Guid:"jj_3"},
                        {
    
     Date:20201228, Value:"L", Text:'最低',Guid:"jj_4" },
                        {
    
     Date:20210128, Value:"H", Text:'最高',Guid:"jj_5" },
                    ]
                } //绘制文字
            };
            

            
            var apiData=
            {
    
    
                code:0, 
                stock:{
    
     name:hqchart.Name, symbol:hqchart.Symbol }, 
                outdata: {
    
     date:kData.GetDate() , outvar:[closeLine,doms] } 
            };
            
            data.PreventDefault=true;
            console.log('[NetworkFilter::NetworkFilter] apiData ', apiData);
            callback(apiData);
        }
    }
}

json结构说明

name

固定 MULTI_HTMLDOM

type

固定 1

Draw

输出数据

Draw.DrawType

固定 MULTI_HTMLDOM

Draw.DrawData

输出的文本数组

{
Date:日期格式yyyymmdd,
Time:时间分钟K线有有效格式hhmm,
Value:y轴位置, 字符串, L=最低价 H=最高价
Text:‘输出信息,也可以是dom信息’
Guid:“数据唯一的id”
},

扫描二维码关注公众号,回复: 12723590 查看本文章

Draw.Callback

dom渲染回调函数 function(op,obj)

渲染dom回调函数

参数

op

操作ID 1=开始渲染 2=渲染完成 3=渲染中

obj

单条渲染的数据
{
KData:当前的K线数据,
Item:当前输出的数据,
IsShow:是否显示,
Self:dom绘制类示例,
X:输出信息显示的X轴坐标,
Y: 输出信息显示的Y轴坐标
DrawItem:[] 所有绘制项数据, 只有再op==2的时候才有
};
在这里插入图片描述

注意

开始和结束错误 只有Self信息
如是当前dom是隐藏的(IsShow==false), X, Y 是没的
切换指标的时候需要外部自己清理dom. hqchart内部不处理

dom渲染回调例子

var domCache=new Map();
function drawDomCallback(op,obj)
{
    
    
    if (op==1) 
    {
    
    
        console.log("[drawDomCallback] 开始绘制 op, obj", op, obj);
    }
    else if (op==2) 
    {
    
    
        console.log("[drawDomCallback] 绘制完成 op, obj", op, obj);
    }
    else if (op==3) 
    {
    
    
        console.log("[drawDomCallback] 开始绘制中 op, obj", op, obj);
        var item=obj.Item;
        var dom;
        if (domCache.has(item.Guid))
        {
    
    
            dom=domCache.get(item.Guid);
        }
        else
        {
    
    
            dom=document.createElement("div");
            dom.style.position = "absolute";
            dom.style.background='rgba(255,228,181,0.8)';
            dom.innerText=item.Text;
            dom.style["pointer-events"]="none";

            var klineDiv=document.getElementById('kline');
            klineDiv.appendChild(dom);
            domCache.set(item.Guid, dom);
        }
        if (obj.IsShow==false)
        {
    
    
            dom.style.display = "none";
        }
        else
        {
    
    
            dom.style.left =obj.X + "px";
            dom.style.top=obj.Y+"px";
            dom.style.display = "block";
        }
        
    }
}

交流QQ群: 950092318

如果还有问题可以加交流QQ群: 950092318

HQChart代码地址

地址:github.com/jones2000/HQChart

个人爱好(模型/摄影)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/jones2000/article/details/114006164