UNPKG

hqchart

Version:

HQChart - H5, 微信小程序 沪深/港股/数字货币/期货/美股 K线图(kline),走势图,缩放,拖拽,十字光标,画图工具,截图,筹码图. 分析家语法,通达信语法,(麦语法),第3方数据对接

377 lines (290 loc) 11.4 kB
/* Copyright (c) 2018 jones http://www.apache.org/licenses/LICENSE-2.0 开源项目 https://github.com/jones2000/HQChart jones_2000@163.com */ /////////////////////////////////////////////////////// // K线图提示信息 // ////////////////////////////////////////////////////// function JSTooltipKLineChart() { this.DivDialog=null; this.HQChart=null; this.ID=Guid(); this.BGColor=g_JSChartResource.PopMinuteChart.BGColor; this.BorderColor=g_JSChartResource.PopMinuteChart.BorderColor; this.TitleFont=g_JSChartResource.PopMinuteChart.Title.Font; //指标标题字体 this.CorssCursorFont=g_JSChartResource.PopMinuteChart.CorssCursor.Font; //十字光标 this.FrameSplitTextFont=g_JSChartResource.PopMinuteChart.Frame.Font; //刻度文字 this.OnCreatedCallback=null; this.KLine= { Option:JSTooltipKLineChart.GetKLineOption(), JSChart:null, Symbol:null, } this.Inital=function(hqchart, option) { this.HQChart=hqchart; if (option) { if (IFrameSplitOperator.IsObject(option.Option)) { var item=CloneData(option.Option); //复制一份出来 this.KLine.Option=Object.assign(this.KLine.Option,item); if (IFrameSplitOperator.IsNonEmptyArray(option.Option.EventCallback)) this.KLine.Option.EventCallback=option.Option.EventCallback; } if (option.OnCreatedCallback) this.OnCreatedCallback=option.OnCreatedCallback; } } this.Create=function() { var divDom=document.createElement('div'); divDom.className='UMyChart_Tooltip_KLine_Div'; divDom.id=this.ID; var divChart=document.createElement('div'); divChart.className='UMyChart_Tooltip_KLine_Chart_Div'; divDom.appendChild(divChart); this.DivDialog=divDom; var chart=JSChart.Init(divChart); this.KLine.JSChart=chart; //语言跟主图保持一致 if (this.HQChart) this.KLine.Option.Language=g_JSChartLocalization.GetLanguageName(this.HQChart.LanguageID); this.KLine.Option.OnCreatedCallback=(chart)=>{ this.OnCreateHQChart(chart); } this.KLine.Option.NetworkFilter=(data, callback)=>{ this.NetworkFilter(data, callback); } var reloadResourceEvent= { event:JSCHART_EVENT_ID.ON_RELOAD_RESOURCE, callback:(event, data, obj)=>{ this.LoadChartResource(obj); } } var splitXEvent= { event:JSCHART_EVENT_ID.ON_SPLIT_XCOORDINATE, callback:(event, data, obj)=>{ this.OnSplitXCoordinate(event, data, obj); } }; var splitYEvent= { event:JSCHART_EVENT_ID.ON_SPLIT_YCOORDINATE, callback:(event, data, obj)=>{ this.OnSplitYCoordinate(event, data, obj); } } if (Array.isArray(this.KLine.Option.EventCallback)) { this.KLine.Option.EventCallback.unshift(reloadResourceEvent,splitYEvent,splitYEvent); } else { this.KLine.Option.EventCallback=[reloadResourceEvent,splitXEvent,splitYEvent]; } chart.SetOption(this.KLine.Option); //设置K线配置 document.body.appendChild(divDom); this.UpdateStyle(); if (!this.KLine.Option.EnableResize) { if (this.KLine.JSChart) this.KLine.JSChart.OnSize({ Type:1 }); } } this.UpdateStyle=function() { if (!this.DivDialog) return; if (this.BGColor) this.DivDialog.style['background-color']=this.BGColor; if (this.BorderColor) this.DivDialog.style['border-color']=this.BorderColor; } this.NetworkFilter=function(data, callback) { if (!this.HQChart || !this.HQChart.NetworkFilter) return; this.HQChart.NetworkFilter(data, callback); } this.OnCreateHQChart=function(chart) { this.LoadChartResource(chart); if (this.OnCreatedCallback) this.OnCreatedCallback(chart); } this.Destroy=function() { if (this.DivDialog) { if (document && document.body && document.body.removeChild) document.body.removeChild(this.DivDialog); } this.DivDialog=null; this.TitleBox=null; if (!this.KLine.JSChart) this.KLine.JSChart.ChartDestory(); this.KLine.JSChart=null; } this.IsShow=function() { if (!this.DivDialog) return false; return this.DivDialog.style.visibility==='visible'; } this.Show=function(data, x, y) { if (!this.DivDialog) this.Create(); if (!data || !data.Symbol) return; var symbol=data.Symbol; if (this.KLine.JSChart) { if (this.KLine.Symbol!=symbol) { this.KLine.Symbol=symbol; this.KLine.JSChart.ChangeSymbol(symbol); } } if (IFrameSplitOperator.IsNumberV2(x,y)) { } else if (data.Rect) { var rtCell=data.Rect; var pixelRatio=GetDevicePixelRatio(); var rtItem={ Left:rtCell.Left/pixelRatio, Right:rtCell.Right/pixelRatio, Bottom:rtCell.Bottom/pixelRatio, Top:rtCell.Top/pixelRatio }; rtItem.Width=rtItem.Right-rtItem.Left; rtItem.Height=rtItem.Bottom-rtItem.Top; //超出窗口调整位置 var height=this.DivDialog.offsetHeight; var width=this.DivDialog.offsetWidth; var x=rtItem.Right+data.Offset.Left; var y=rtItem.Bottom+data.Offset.Top; var xRight=window.innerWidth-5; var ybottom=window.innerHeight-5; if (x+width>xRight) x=(rtItem.Left+data.Offset.Left)-width; if (y+height>ybottom) y=(rtItem.Top+data.Offset.Top)-height; this.DivDialog.style.visibility='visible'; this.DivDialog.style.top = y + "px"; this.DivDialog.style.left = x + "px"; } } this.Hide=function() { if (!this.DivDialog) return; if (this.DivDialog.style.visibility!='hidden') this.DivDialog.style.visibility='hidden'; } this.ReloadResource=function(option) { this.BGColor=g_JSChartResource.PopMinuteChart.BGColor; this.BorderColor=g_JSChartResource.PopMinuteChart.BorderColor; this.TitleFont=g_JSChartResource.PopMinuteChart.Title.Font; //指标标题字体 this.CorssCursorFont=g_JSChartResource.PopMinuteChart.CorssCursor.Font; //十字光标 this.FrameSplitTextFont=g_JSChartResource.PopMinuteChart.Frame.Font; //刻度文字 if (!this.DivDialog) return; this.UpdateStyle(); if (this.KLine.JSChart) this.KLine.JSChart.ReloadResource(option); } this.LoadChartResource=function(chart) { if (IFrameSplitOperator.IsNonEmptyArray(chart.TitlePaint)) { for(var i=0;i<chart.TitlePaint.length;++i) { var item=chart.TitlePaint[i]; if (!item) continue; item.Font=this.TitleFont; } } if (IFrameSplitOperator.IsNonEmptyArray(chart.WindowIndex)) { for(var i=0;i<chart.WindowIndex.length;++i) //去掉指标里面的字体 { var item=chart.WindowIndex[i]; if (!item) continue; item.TitleFont=null; } } if (chart.ChartCorssCursor) { chart.ChartCorssCursor.Font=this.CorssCursorFont; } } this.OnSplitXCoordinate=function(event, data, obj) { var frame=data.Frame; if (IFrameSplitOperator.IsNonEmptyArray(frame.VerticalInfo)) { for(var i=0;i<frame.VerticalInfo.length;++i) { var item=frame.VerticalInfo[i]; if (!item) continue; if (item.Font) item.Font=this.FrameSplitTextFont; } } } this.OnSplitYCoordinate=function(event, data, obj) { var frame=data.Frame; if (IFrameSplitOperator.IsNonEmptyArray(frame.HorizontalInfo)) { for(var i=0;i<frame.HorizontalInfo.length;++i) { var item=frame.HorizontalInfo[i]; if (!item) continue; if (item.Font) item.Font=this.FrameSplitTextFont; } } } } JSTooltipKLineChart.GetKLineOption=function() { var option= { Type:'历史K线图', //创建图形类型 Windows: //窗口指标 [ { Index:"MA",Change:false, Modify:false }, { Index:"MACD", Close:false, Change:false, Modify:false,MaxMin:false,TitleWindow:false }, ], //Language:'EN', Symbol:null, IsAutoUpdate:false, //是自动更新数据 AutoUpdateFrequency:3000, //数据更新频率 SplashTitle:'加载数据中......', IsShowRightMenu:false, //右键菜单 CtrlMoveStep:10, KLine: //K线设置 { DragMode:1, //拖拽模式 0=禁止拖拽 1=数据拖拽 2=区间选择 Right:1, //复权 0 不复权 1 前复权 2 后复权 Period:0, //周期 0 日线 1 周线 2 月线 3 年线 MaxRequestDataCount:3000, //数据个数 MaxRequestMinuteDayCount:5, //分钟数据获取几天数据 默认取5天数据 IsShowTooltip:false, //是否显示K线提示信息 DrawType:0, //K线类型 0=实心K线柱子 1=收盘价线 2=美国线 3=空心K线柱子 4=收盘价面积图 KLineDoubleClick:false, //禁止双击弹框 RightSpaceCount:0, ZoomType:0, DataWidth:2, }, StepPixel:0, Listener: { KeyDown:false, Wheel:false }, KLineTitle: //标题设置 { IsShowName:true, //不显示股票名称 IsShowSettingInfo:true, //不显示周期/复权 IsTitleShowLatestData:true, }, Border: //边框 { Left:1, //左边间距 Right:20, //右边间距 Bottom:25, //底部间距 Top:25, //顶部间距 AutoLeft:{ Blank:10, MinWidth:30 }, AutoRight:{ Blank:5, MinWidth:30 }, }, Frame: //子框架设置 [ { SplitCount:4, IsShowLeftText:false, }, { SplitCount:3,IsShowLeftText:false, }, { SplitCount:3, IsShowLeftText:false,} ], } return option; }