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

这篇具有很好参考价值的文章主要介绍了uniapp使用HQChart的k线,用webSocket更新数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目:不借用HQChart的各种接口数据,即数据后端返回,但是数据格式要和原数据格式一样。文章来源地址https://www.toymoban.com/news/detail-602951.html

//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 = false
	hqchartCtrl.KLine.Option.CorssCursorTouchEnd = true
	hqchartCtrl.KLine.Option.EnableScrollUpDown = true//手势上下允许滚动页面
	hqchartCtrl.KLine.Option.IsClickShowCorssCursor = false
	hqchartCtrl.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.js
	JSCommon.MARKET_SUFFIX_NAME.GetDefaultDecimal=(symbol)=> { return coinPrecision[this.detailMsg.coin].precision }
	// #endif

	hqchartCtrl.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.data
					let 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 H5
					callback(hqChartData);
					// #endif
					// #ifndef H5
					callback({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.quoteUnit
			d.name = this.detailMsg.coin + this.detailMsg.quoteUnit
			callback(d)
	    }
	  }
	})
},
geiSfun(){
	return function (a, b) {
		return a[0] - b[0];
	}
},

到了这里,关于uniapp使用HQChart的k线,用webSocket更新数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Uni-App】uniapp使用uview实现弹出键盘输入密码/验证码功能

    组件使用的是uview组件,Keyboard 键盘和MessageInput 验证码输入两个组件配合使用。 通过mode参数定义键盘的类型,v-model绑定一个值为布尔值的变量,我绑定的是showKeyboard变量,控制键盘的弹出与收起; mode = number (默认值)为数字键盘,此时顶部工具条中间的提示文字为\\\"数字键盘

    2023年04月16日
    浏览(66)
  • uni-app + SpringBoot +stomp 支持websocket 打包app

    websocket 协议是在http 协议的基础上的升级,通过一次http 请求建立长连接,转而变为TCP 的全双工通信;而http 协议是一问一答的请求方式方式。 websocket-uni.js

    2024年02月11日
    浏览(49)
  • uni-app 封装 websocket 并且监听心跳机制

    新建 socket.js , 将以下代码复制进去 ,向外暴露。 在入口文件中 将 socketIO 挂载在 Vue 原型上 , 也可以按需引入置顶页面 。 在需要用到webSocket的页面中使用如下方法(可根据自身业务需求进行整改) 离开页面,记得断开连接。

    2024年02月11日
    浏览(44)
  • miniprogram-to-uniapp使用指南(各种小程序项目转换为uni-app项目)

    小程序分类:uni-app qq小程序 支付宝小程序 百度小程序 钉钉小程序 微信小程序 小程序转成uni_app 小程序转为uni_app 小程序转uni_app 小程序转换 工具现在支持npm全局库、HBuilderX插件两种方式使用,任君选择,HBuilderX插件地址:https://ext.dcloud.net.cn/plugin?id=2656 【miniprogram-to-uniapp】

    2024年02月08日
    浏览(55)
  • 『UniApp』uni-app-打包成App

    大家好,我是 BNTang, 在上一节文章中,我给大家详细的介绍了如何将我开发好的项目打包为微信小程序并且发布到微信小程序商店 趁热打铁,在来一篇文章,给大家详细的介绍如何将项目打包成APP。 打包 App 也是一样的,首先需要配置关于 App 应用的基础信息,打开 manifest

    2024年02月04日
    浏览(99)
  • 【UniApp】-uni-app-网络请求

    经过上个章节的介绍,大家可以了解到 uni-app-pinia存储数据的基本使用方法 那本章节来给大家介绍一下 uni-app-网络请求 的基本使用方法 首先我们打开官方文档,我先带着大家看一下官方文档的介绍:https://uniapp.dcloud.net.cn/api/request/request.html 从官方文档中我们可以看到,可以

    2024年02月04日
    浏览(50)
  • 【UniApp】-uni-app-打包成网页

    经过上一篇文章的介绍,已经将这个计算器的计算功能实现了,接下来就是我们项目当中的一个发包上线阶段,我模拟一下,目的就是为了给大家介绍一下,uni-app是如何打包成网页的。 除了可以打包成网页,uni-app还可以打包成小程序、App、H5、快应用等等,后面在单独开文

    2024年02月04日
    浏览(69)
  • uni-app 面试题收集 (持续更新中...)

    1.一句话总的形容uniapp与vue和微信小程序的区别 uni-app就是用着vue的指令和小程序的组件和API 2.uni-app中常见的组件 view 视图容器 icon 图标 text 文本组件 3.uni-app中常用的指令语句 v-for:循环渲染 v-if 控制元素的删除添加 v-show 控制元素的显示隐藏 v-model 双向数据绑定 v-on 事件绑

    2024年02月11日
    浏览(45)
  • uni-app使用sqlite数据库

    1、对数据库操作的方法进行封装; 2、使用示例:(提供创建数据库的表,新增数据的操作) 创建数据库表 以上是本人亲测有效的操作方法;有不懂的小伙伴欢迎私聊哦;有需要的也可以点赞评论加关注哦。

    2024年02月16日
    浏览(39)
  • Uniapp uni-app学习与快速上手

    个人开源uni-app开源项目地址:准备中 在线展示项目地址:准备中 什么是uni-app uni,读 you ni ,是统一的意思。 Dcloud即数字天堂(北京)网络技术有限公司是W3C成员及HTML5中国产业联盟发起单位,致力于推进HTML5发展构建,HTML5生态。 2012年,DCloud开始研发小程序技术,优化webvie

    2024年02月09日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包