当前位置: 首页 > news >正文

uniapp使用HQChart的k线,用webSocket更新数据

项目:不借用HQChart的各种接口数据,即数据后端返回,但是数据格式要和原数据格式一样。

//k线图
CreateHQChartKLine(){var chartHeight=uni.upx2px(this.ChartHeight);let hqchartCtrl=this.$refs.HQChartCtrl;hqchartCtrl.KLine.Option.Type="历史K线图";hqchartCtrl.KLine.Option.Language = uni.getLocale() == 'zh-CN' ? 'CN' : uni.getLocale() == 'zh-HK' ? 'TC' : 'EN'//设置语言hqchartCtrl.KLine.Option.DragDownload = {Minute:{Enable:true}}hqchartCtrl.KLine.Option.IsApiPeriod=true;hqchartCtrl.KLine.Option.Border.Right=1;hqchartCtrl.KLine.Option.Border.Left=1;hqchartCtrl.KLine.Option.Border.Top=0;hqchartCtrl.KLine.Option.Border.Bottom=25;hqchartCtrl.KLine.Option.IsCorssOnlyDrawKLine = falsehqchartCtrl.KLine.Option.CorssCursorTouchEnd = truehqchartCtrl.KLine.Option.EnableScrollUpDown = true//手势上下允许滚动页面hqchartCtrl.KLine.Option.IsClickShowCorssCursor = falsehqchartCtrl.KLine.Option.IsFullDraw=true;hqchartCtrl.KLine.Option.Windows = [{Index: "MA",Modify: true,Change: true,IsMainIndex: true,},{Index: "VOL",Modify: false,Change: false}]hqchartCtrl.KLine.Option.Frame = [{SplitCount: 4, //最多输出3个分隔线IsShowLeftText: false, //不显示左边刻度文字IsShowRightText: true, //显示右边刻度文字},{SplitCount: 2, //最多输出3个分隔线IsShowLeftText: false, //不显示左边刻度文字IsShowRightText: true, //显示右边刻度文字}]hqchartCtrl.KLine.Option.KLine = {Right: 0, //复权 0 不复权 1 前复权 2 后复权Period: 6, //周期: 0 日线 1 周线 2 月线 3 年线PageSize: 50,IsShowTooltip: false,//是否显示K线的tooltip信息}hqchartCtrl.KLine.Option.ExtendChart = [{Name: 'KLineTooltip'}]hqchartCtrl.KLine.Option.SplashTitle = ' ';let coinPrecision = uni.getStorageSync('coinPrecision')//设置保留小数位数// #ifdef H5// h5在this.DrawMaxMinPrice(26741 - umychart.uniapp.h5.js 2个Number()中)// 深度图 FrameSplitXDepth 46569 umychart.uniapp.h5.js Number()//this.SplitDefault 44919 umychart.uniapp.h5.js Number()HQChart.MARKET_SUFFIX_NAME.GetDefaultDecimal=(symbol)=> { return coinPrecision[this.detailMsg.coin].precision }// #endif// #ifndef H5// app在this.DrawMaxMinPrice(1541 - umychart.chartpaint.wechat.js 2个Number()中)//this.SplitDefault 627 umychart.framesplit.wechat.jsJSCommon.MARKET_SUFFIX_NAME.GetDefaultDecimal=(symbol)=> { return coinPrecision[this.detailMsg.coin].precision }// #endifhqchartCtrl.NetworkFilter=this.NetworkFilterKLine;//不使用插件接口,数据由后端返回hqchartCtrl.SetSize(uni.upx2px(this.ChartWidth),chartHeight);hqchartCtrl.OnSize();hqchartCtrl.CreateHQChart()hqchartCtrl.ChangeKLineIndex(this.kSetList[this.kSetIndex].windowId, this.kSetList[this.kSetIndex].name) //设置主图、MA\BOLL\隐藏
},
NetworkFilterKLine(data, callback){data.PreventDefault=true;//阻止插件接口请求var hqChartData={code:0, data:[]};hqChartData.symbol=this.detailMsg.coin + this.detailMsg.quoteUnit //这边用币种名称代替hqChartData.name=this.detailMsg.coin + this.detailMsg.quoteUnit	//这边用币种名称代替if(data.Name == 'KLineChartContainer::RequestDragMinuteData'){//拉到最左侧,获取下一页数据this.page++}let a = {maxTime:this.page == 1 ? 0 : this.kLinesList[0].time,quote_unit:this.detailMsg.quoteUnit,pageSize:100,interval:this.kList[this.kCurrent].key,page:this.page,coin:this.detailMsg.coin}if(data.Name == 'KLineChartContainer::ReqeustHistoryMinuteData' || data.Name == 'KLineChartContainer::RequestDragMinuteData'){getKLinesDetail(a).then(res=>{if(res.code == 1){if(res.data.length != 0){this.kLinesList = res.datalet arr = []res.data.forEach((item,index)=>{//时间、null、开、高、低、收、量 插件的数据格式,time已经被我改成uview时间格式化形式,如果不想该源代码,就跟着作者大佬的数据结构来let objArr = [Number(item.time),null,Number(item.open),Number(item.high),Number(item.low),Number(item.close),Number(item.volume)]arr.push(objArr)})this.kLinesArr = this.page == 1 ? arr : this.kLinesArr.concat(arr)hqChartData.data = this.kLinesArr.sort(this.geiSfun())//重新排序// #ifdef H5callback(hqChartData);// #endif// #ifndef H5callback({data:hqChartData});// #endif}}})}//webSocket - 更新K线uni.$on('webSocket', item => {if (!isJSON(item.data.msgContent)){return}if (item.data.msgType==3&&this.kLinesList&&this.kLinesArr){let kObj = JSON.parse(item.data.msgContent)if(kObj.coin == this.detailMsg.coin){// 时间、null、开、高、低、收、量let kArr = [Number(kObj.time),null,Number(kObj.open),Number(kObj.high),Number(kObj.low),Number(kObj.close),Number(kObj.volume)]let itemIndex = this.kLinesArr.findIndex(item => {return item[0] == Number(kObj.time);});//查询webSocket的数据是否存在kLinesArr数组中,存在替换,不存在添加//因为项目的webSocket有时候会推送时间相同但是其他不同的数据,要查询到该时间所在下标并且替换,不要问为什么,问就是k线就是这么搞的(我也不懂,鶸)if(itemIndex == -1){this.kLinesArr.push(kArr)}else{this.kLinesArr[itemIndex] = kArr}let d = {code:0, data:[],ver:2}d.data = this.kLinesArr.sort(this.geiSfun())//不加symbol和name会报错d.symbol = this.detailMsg.coin + this.detailMsg.quoteUnitd.name = this.detailMsg.coin + this.detailMsg.quoteUnitcallback(d)}}})
},
geiSfun(){return function (a, b) {return a[0] - b[0];}
},
http://www.lryc.cn/news/100150.html

相关文章:

  • idea的Plugins中搜索不到插件
  • flask 实现简单的登录系统demo
  • Spring Security安全配置
  • 2023Java后端开发之100道常见经典面试题
  • Redis详解,包括安装命令,应用场景,优缺点,案列分析,各个开发语言如何应用
  • AI数字人:金融数字化转型的“关键先生”
  • mac关闭VPN之后,浏览器就不能够正常上网了(图解)
  • YOLOv5改进系列(17)——更换IoU之MPDIoU(ELSEVIER 2023|超越WIoU、EIoU等|实测涨点)
  • 基于WSL2、Ubuntu和VS Code的CUDA平台运行C语言程序
  • 构建外卖系统小程序,订单管理功能实现步骤详解
  • 用asp.net开发h5网页版视频播放网站,类似优酷,jellyfin,emby
  • Redis—相关背景
  • SSL 证书过期巡检脚本
  • leetcode 面试题 01.03. URL化
  • uni-app在小米手机上运行【步骤细节】
  • 微信小程序实现日历功能、日历转换插件、calendar
  • 【浩鲸科技】济南Java后端面经
  • VMware搭建Hadoop集群 for Windows(完整详细,实测可用)
  • 【Rust 基础篇】Rust关联类型:灵活的泛型抽象
  • 学习笔记21 list
  • 微信小程序弱网监控
  • 【Linux】进程通信 — 共享内存
  • “从零开始学习Spring Boot:快速搭建Java后端开发环境“
  • 行为型-状态模式(State Pattern)
  • 大厂领导为什么喜欢跨层与下属聊天
  • Android 面试题 避免OOM(内存优化)三
  • SpringBoot集成Lock4j 底层使用Redission 实现分布锁
  • TortoiseSVN操作使用
  • 第五篇-ChatGLM2-6B模型下载
  • 【Matlab】基于长短期记忆网络的数据分类预测(Excel可直接替换数据)