HQChart使用教程63

Stella981
• 阅读 696

HQChart使用教程63-uniapp使用renderjs+hqchart

  • 步骤

  • 1. 安装依赖模块

  • 2. 创建 renderjs qhchart模块

  • 3. 使用HQChartCtrl对hqchart进行简单的封装

  • 4. page页面创建一个view元素绑定到HQChartCtrl

  • 5. 分时K线切换说明

  • 6.效果图

  • 完整代码

  • HQChart代码地址

  • 如果教程或hqchart对你有帮助, 请在git上star,教程点下赞 。谢谢~~

uniapp的画布实在是太烂了, 导致app很卡, 但是h5页面却很流畅,如果可以直接在uniapp里使用h5页面这样用户体验就很好了。

步骤

1. 安装依赖模块

安装 hqchart 和 jquery 这2个模块
npm i jquery
npm i hqchart

2. 创建 renderjs qhchart模块

这里我把模块名命名为HQChartCtrl

<script module="HQChartCtrl" lang="renderjs" type="module">
import HQChart from 'hqchart'; 
.......
export default 
{
    name:'HQChartCtrl',
    ......
}
    

3. 使用HQChartCtrl对hqchart进行简单的封装

这个使用 view id为’kline’ 来绑定到hqchart中
下面的封装的方法和说明

CreateKLineChart()     //创建K线图
CreateMinuteChart()    //创建分时图
ClearDivDOM()   //清空hqchart内部创建的dom.
ChangePeriod(period)  //K线周期切换
ChangeSymbol(symbol)   //分时|K线切换股票
ChangeDays(dayCount)  //分时切换显示天数
ClearChart()        //清空hqchart实例, 在页面退出或隐藏的时候需要清空实例和定时器
ChartOperator(value)     //外部操作HQChartCtrl的统一接口 value:{ID:操作ID, Value:数值 }

4. page页面创建一个view元素绑定到HQChartCtrl

创建一个id为“kline"的view,这样hqchartctrl就可以获取这个dom并操作它。

<template>
    <view class="kLine-main" style="height: 1200rpx;width: 750rpx;">
        <view class="kline" id="kline" ref="kline" style="height: 1000rpx;width: 750rpx;" :prop="ChartOperatorData" :change:prop="HQChartCtrl.ChartOperator"></view>

绑定变量ChartOperatorData修改以后触发HQChartCtrl操作事件HQChartCtrl.ChartOperator。 这个好像是renderjs特殊有的, 其他我也找到怎么去操作hqchartctrl的方法。

5. 分时K线切换说明

这里使用了同一个view来切换分时和K线,这样就避免了2个view来会切换。 所以在切换的时候需要清空原来的实例及hqchart创建的dom.
具体看教程
HQChart实战教程8-如何手动重新初始化hqchart

这样就可以在app上运行h5的hqchart.

如果还有问题可以加交流QQ群: 950092318
demo项目在群文件中"umiapp-renderjs-hqchart-demo.2020.06.24.01.rar"

6.效果图

HQChart使用教程63

完整代码

<template>
    <view class="kLine-main" style="height: 1200rpx;width: 750rpx;">
        <view class="kline" id="kline" ref="kline" style="height: 1000rpx;width: 750rpx;" :prop="ChartOperatorData" :change:prop="HQChartCtrl.ChartOperator"></view>
        
        <div class="button-sp-area">
            <button class="mini-btn" type="default" size="mini" @click="ChangePeriod(0)">日线</button>
            <button class="mini-btn" type="default" size="mini" @click="ChangePeriod(1)">周线</button>
            <button class="mini-btn" type="default" size="mini" @click="ChangePeriod(4)">1分钟</button>
            <button class="mini-btn" type="default" size="mini" @click="ChangePeriod(6)">15分钟</button>
            <button class="mini-btn" type="default" size="mini" @click="ChangeDays(1)">分时</button>
            <button class="mini-btn" type="default" size="mini" @click="ChangeDays(5)">5日分时</button>
        </div>
        
        <div class="button-sp-area">
            <button class="mini-btn" type="default" size="mini" @click="ChangeSymbol('000001.sz')">000001.sz</button>
            <button class="mini-btn" type="default" size="mini" @click="ChangeSymbol('600000.sh')">600000.sh</button>
        </div>
        
    </view>
    
</template>

<script>
export default 
{
    name: 'kLine-main', //k线 图表
    data() 
    {
        var data=
        {
            ChartOperatorData: 
            {
                ID:null,        //操作ID 1=切换周期  2=切换股票 3=销毁 4=分时图
                Value:null        //数值
            }
        }
        
        return data;
    },
    
    created() 
    {
        
    },
    mounted() 
    {
        
    },
    
    methods: 
    {
        ChangePeriod(period)
        {
            this.ChartOperatorData.ID=1;
            this.ChartOperatorData.Value=period;
        },
        
        ChangeSymbol(symbol)
        {
            this.ChartOperatorData.ID=2;
            this.ChartOperatorData.Value=symbol;
        },
        
        ChangeDays(dayCount)
        {
            this.ChartOperatorData.ID=4;
            this.ChartOperatorData.Value=dayCount;
        }
    }
};
</script>

<script module="HQChartCtrl" lang="renderjs" type="module">
import HQChart from 'hqchart'; 
var g_KLine = 
{
    JSChart: null
};

var g_Minute=
{
    JSChart:null
}

/* 关闭日志
HQChart.Chart.JSConsole.Chart.Log=()=>{ }
HQChart.Chart.JSConsole.Complier.Log=()=>{ }
*/

function DefaultData() {}

DefaultData.GetKLineOption = function() 
{
    let data = 
    {
        Type: '历史K线图',
        
        Windows: //窗口指标
        [
            { Index: 'MA', Modify: false, Change: false }, 
            { Index: 'VOL', Modify: false, Change: false }, 
            { Index: 'MACD', Modify: false, Change: false },
        ],

        IsAutoUpdate: true,
        AutoUpdateFrequency: 30000, //数据更新频率
        IsCorssOnlyDrawKLine: true, //十字光标只能在K线上
        EnableScrollUpDown: true, //允许手势上下操作滚动页面
        CorssCursorTouchEnd: true, //手势结束十字光标自动隐藏
        
        CorssCursorInfo:      //十字光标刻度设置
        { 
            Left: 2,
            Right: 2,
            Bottom: 1,
        }, 
        
        Border:     //边框
        {
            Left: 1,
            Right: 1, //右边间距
            Top: 25,
            Bottom: 25
        },

        KLine: 
        {
            Right: 0, //复权 0 不复权 1 前复权 2 后复权
            Period: 0, //周期: 0 日线 1 周线 2 月线 3 年线
            PageSize: 60,
            IsShowTooltip: false,
            DrawType: 0 //K线类型 0=实心K线柱子 1=收盘价线 2=美国线 3=空心K线柱子 4=收盘价面积图
        },
        
        //子框架设置 (Height 窗口高度比例值)
        Frame: 
        [
            {
                SplitCount: 3, //最多输出3个分隔线
                Height: 5,
                IsShowLeftText: false, //不显示左边刻度文字
                IsShowRightText: true, //显示右边刻度文字
                Custom: 
                [
                    {
                        Type: 0,
                        Position: 'right'
                    }
                ]
            },
            {
                SplitCount: 2,
                Height: 2,
                IsShowLeftText: true,
                IsShowRightText: false
            },
            {
                SplitCount: 2,
                Height: 2,
                IsShowLeftText: true,
                IsShowRightText: false
            }
        ],
        
        ExtendChart:
        [
            { Name: 'KLineTooltip' } //开启手机端tooltip
        ]
    };

    return data;
};

DefaultData.GetMinuteOption=function()
{
    var option= 
    {
        Type:'分钟走势图',   //创建图形类型
            
        Windows: //窗口指标
        [
            { Index: 'MACD', Modify: false, Change: false },
        ], 
            
        IsAutoUpdate:true,           //是自动更新数据
        AutoUpdateFrequency: 30000, //数据更新频率
        DayCount:1,                  //1 最新交易日数据 >1 多日走势图
        IsShowRightMenu:false,       //是否显示右键菜单
        CorssCursorTouchEnd:true,
        
        CorssCursorInfo:      //十字光标刻度设置
        { 
            Left: 2,
            Right: 2,
            Bottom: 1,
        }, 
        
        MinuteLine:
        {
            //IsDrawAreaPrice:false,      //是否画价格面积图
        },
 
        Border: //边框
        {
            Left:1,    //左边间距
            Right:1,   //右边间距
            Top:20,
            Bottom:20
        },
            
        Frame:  //子框架设置
        [
            {SplitCount:3},
            {SplitCount:2},
            {SplitCount:3},
        ],
 
        ExtendChart:    //扩展图形
        [
            {Name:'MinuteTooltip' }  //手机端tooltip
        ],
    };
 
    return option;
}

export default 
{
    name:'HQChartCtrl',
    
    data()
    {
        var data=
        {
            Symbol:'000001.sz',
            Period:0,    //周期
            
            DayCount:1,    //分时图 天数
        };
        
        return data;
    },
    
    mounted() 
    {
        console.log('视图层加载完毕');
        this.CreateKLineChart();
    },
    
    methods: 
    {
        CreateKLineChart()     //创建K线图
        {
            if (g_KLine.JSChart) return;
            
            if (g_Minute.JSChart)
            {
                this.ClearChart();
                this.ClearDivDOM();
            }

            var option=DefaultData.GetKLineOption();
            option.Symbol=this.Symbol;
            option.KLine.Period=this.Period;

            var blackStyle = HQChart.Chart.HQChartStyle.GetStyleConfig(HQChart.Chart.STYLE_TYPE_ID.BLACK_ID); //读取黑色风格配置
            HQChart.Chart.JSChart.SetStyle(blackStyle);
            document.getElementById('kline').style.backgroundColor=blackStyle.BGColor;    //div背景色设置黑色

            g_KLine.JSChart = HQChart.Chart.JSChart.Init(document.getElementById('kline'));
            g_KLine.JSChart.SetOption(option);

            console.log('创建K线图结束');
        },
        
        CreateMinuteChart()    //创建分时图
        {
            if (g_Minute.JSChart) return;
            
            if (g_KLine.JSChart)
            {
                this.ClearChart();
                this.ClearDivDOM();
            }
            
            var option=DefaultData.GetMinuteOption();
            option.Symbol=this.Symbol;
            option.DayCount=this.DayCount;
            
            var blackStyle = HQChart.Chart.HQChartStyle.GetStyleConfig(HQChart.Chart.STYLE_TYPE_ID.BLACK_ID); //读取黑色风格配置
            HQChart.Chart.JSChart.SetStyle(blackStyle);
            document.getElementById('kline').style.backgroundColor=blackStyle.BGColor;    //div背景色设置黑色
            
            g_Minute.JSChart = HQChart.Chart.JSChart.Init(document.getElementById('kline'));
            g_Minute.JSChart.SetOption(option);
        },
        
        ClearDivDOM()   
        {
            var divKLine=document.getElementById('kline');
            while (divKLine.hasChildNodes()) 
            {
                divKLine.removeChild(divKLine.lastChild);
            } 
            
        },
        
        //对外接口
        ChangePeriod(period)  //周期切换
        {
            this.Period=period;
            if (!g_KLine.JSChart) 
                this.CreateKLineChart();
            else 
                g_KLine.JSChart.ChangePeriod(period);
        },
        
        ChangeSymbol(symbol)   //切换股票
        {
            this.Symbol=symbol;
            if (g_KLine.JSChart) g_KLine.JSChart.ChangeSymbol(symbol);
            else if (g_Minute.JSChart) g_Minute.JSChart.ChangeSymbol(symbol);
        },
        
        ChangeDays(dayCount)
        {
            this.DayCount=dayCount;
            if (!g_Minute.JSChart)
                this.CreateMinuteChart();
            else
                g_Minute.JSChart.ChangeDayCount(dayCount);
        },
        
        ClearChart()
        {
            if (g_KLine.JSChart)
            {
                g_KLine.JSChart.StopAutoUpdate();
                g_KLine.JSChart=null;
            }
            
            if (g_Minute.JSChart)
            {
                g_Minute.JSChart.StopAutoUpdate();
                g_Minute.JSChart=null;
            }
        },
        
        ChartOperator(value)
        {
            switch(value.ID)
            {
            case 1:
                this.ChangePeriod(value.Value);
                break;
            case 2:
                this.ChangeSymbol(value.Value);
                break;
            case 3:
                this.ClearChart();
                break;
            case 4:
                this.ChangeDays(value.Value);
                break;
            }
        }
    }
};
</script>
<style lang="scss">
.kline {
}
</style>

HQChart代码地址

地址:github.com/jones2000/HQChart

如果教程或hqchart对你有帮助, 请在git上star,教程点下赞 。谢谢~~

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
6个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Souleigh ✨ Souleigh ✨
3年前
前端性能优化 - 雅虎军规
无论是在工作中,还是在面试中,web前端性能的优化都是很重要的,那么我们进行优化需要从哪些方面入手呢?可以遵循雅虎的前端优化35条军规,这样对于优化有一个比较清晰的方向.35条军规1.尽量减少HTTP请求个数——须权衡2.使用CDN(内容分发网络)3.为文件头指定Expires或CacheControl,使内容具有缓存性。4.避免空的
Wesley13 Wesley13
3年前
Java爬虫之JSoup使用教程
title:Java爬虫之JSoup使用教程date:201812248:00:000800update:201812248:00:000800author:mecover:https://imgblog.csdnimg.cn/20181224144920712(https://www.oschin
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
HQChart使用教程1
@TOC(快速创建一个K线图页面)效果图!在这里插入图片描述(https://imgblog.csdnimg.cn/20190516213202367.png?xossprocessimage/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4