首页 > 小程序教程 > 微信小程序股市分时图demo设计制作开发教程

微信小程序股市分时图demo设计制作开发教程

上一篇 下一篇
本文给大家带来的是微信小程序股市分时图demo设计制作开发教程,制作好以后效果图如下:
一、wxml页面代码如下:
<view class="container">
    <view class="tab">
        <text class="{{tabName == 'ts' ? 'current': ''}}" data-type="ts" bindtap="tabChart">分时</text>
        <text class="{{tabName == 'ts5' ? 'current': ''}}" data-type="ts5" bindtap="tabChart">五日</text>
    </view>
    <view class="content tab-content" wx:if="{{tabName == 'ts'}}">
        <view class="stock">
            <text>股票:{{stock}} - {{code}}</text>
            <text>时间:{{time}}</text>
            <text>昨收:{{yc}}</text>
        </view>
        <view class="canvas-wrap">
            <canvas canvas-id="time-sharing" class="stage" style="width: 100%; height: 200px">
            </canvas>
            <canvas canvas-id="time-sharing-b" class="stage" style="width: 100%; height: 80px">
            </canvas>
            <canvas canvas-id="time-sharing-axis" class="stage axis-stage" style="width: 100%; height: 280px" bindlongtap="axisStart" bindtouchmove="axisMove" bindtouchend="axisStop">
            </canvas>
        </view>
        <view class="btn-area">
            <text class="btn" hover-class="btn-hover" bindtap="reset">重置</text>
            <text class="btn" hover-class="btn-hover" bindtap="dynamic">模拟动态变化</text>
            <picker class="btn" mode="selector" value="{{timerIndex}}" range="{{timerArray}}" bindchange="bindTimeChange">
                <view class="picker">
                    动态变更频率: {{timerArray[timerIndex]}}
                </view>
            </picker>
            <text class="p text">data index: {{dataIndex}}</text>
            <text class="p text">ts1 render time: {{ts1RenderTime}}ms</text>
            <text class="p text">ts2 render time: {{ts2RenderTime}}ms</text>
            <text class="p text">本demo的模拟数据前16条是未开盘的数据,实际情况请根据各业务接口变化,metaData1()和metaData2()方法同理。</text>
        </view>
    </view>
    <view class="content tab-content" wx:if="{{tabName == 'ts5'}}">
        <view class="stock">
            <text>股票名称:{{stock}} - {{code}}</text>
            <text>时间:{{time}}</text>
            <text>昨收:{{yc}}</text>
        </view>
        <canvas canvas-id="time-sharing-5day" class="stage" style="width: 100%; height: 200px">
        </canvas>
        <canvas canvas-id="time-sharing-5day-b" class="stage" style="width: 100%; height: 80px">
        </canvas>
        <view class="btn-area">
            <text class="p text">ts1 render time: {{ts1RenderTime}}ms</text>
            <text class="p text">ts2 render time: {{ts2RenderTime}}ms</text>
            <text class="p text">5日图相当于5天的分时图连接起来,所以其实还是分时图,只有时间轴上有区别。</text>
        </view>
    </view>
</view>
 
二、wxss样式文件代码如下:
.stock{
    padding-bottom: 20rpx;
    font-size: 24rpx;
}
.stock text{
    display: block;
}
.canvas-wrap{
    position: relative;
}
.canvas-wrap .axis-stage{
    position: absolute;
    top: 0;
    left: 0;
}
三、js页面代码如下:
/**
 * Created by ChenChao on 2016/9/27.
 */

var app = getApp();
var storage = require('../../utils/storage');
var ts = require('../../utils/wxChart/time-sharing');
var axisShow = require('../../utils/wxChart/axis-show');
var ts1, ts2;     //分时
var tsd51, tsd52; //五日
var tsAxisShow;   //分时手势坐标
var getOptionTimeSharing1 = function (type, width) {
    return {
        name: type || 'time-sharing',
        width: width || 'auto',
        height: 200,
        axis: {
            row: 4,
            col: 4,
            paddingTop: 0,
            paddingBottom: 0,
            paddingLeft: 0,
            paddingRight: 0,
            color: '#cdcdcd'
        },
        xAxis: {
            data: []
        },
        yAxis: [
            {
                type: 'line',
                lineColor: '#2F6098',
                background: 'rgba(53,125,222,0.1)',
                /*background: function () {  //渐变背景在IOS上会影响均线颜色,这个应该是小程序canvas的bug
                    return ['rgba(53,125,222,0.3)', 'rgba(0,0,0,0)'];
                },*/
                data: []
            },
            {
                type: 'line',
                lineColor: '#A96F3E',
                data: []
            }
        ],
        callback: function (time) {
            var page = getCurrentPages();
            page = page[page.length - 1];
            page.setData({
                ts1RenderTime: time
            });
        }
    };
};
var getOptionTimeSharing2 = function (type, width) {
    return {
        name: type || 'time-sharing-b',
        width: width || 'auto',
        height: 80,
        axis: {
            row: 2,
            col: 4,
            showEdg: true,
            showX: true,
            showY: true,
            paddingTop: 5,
            paddingBottom: 14,
            paddingLeft: 0,
            paddingRight: 0,
            color: '#cdcdcd'
        },
        xAxis: {
            times: ['09:30', '15:00'],
            data: []
        },
        yAxis: [
            {
                type: 'bar',
                color: [],
                data: [],
                showMax: true
            }
        ],
        callback: function (time) {
            var page = getCurrentPages();
            page = page[page.length - 1];
            page.setData({
                ts2RenderTime: time
            });
        }
    };
};
var getOptionTimeSharingAxis = function () {
    return {

    };
};
var timer = null;

Page({
    data: {
        tabName: '',
        ts: {},
        ts5: {},
        stock: '',
        code: '',
        time: '',
        yc: '',
        dataIndex: 0,
        ts1RenderTime: 0,
        ts2RenderTime: 0,
        timerIndex: 4,
        timerArray: ['50ms', '100ms', '200ms', '500ms', '1000ms'],
        isShowAxis: false
    },
    onLoad: function () {
        var tsData = storage.getTsData();
        var ts5Data = storage.getTs5Data();
        this.setData({
            dataIndex: 0,
            ts: tsData,
            ts5: ts5Data
        });
        this.tabChart({
            target: {
                dataset: {
                    type: 'ts'
                }
            }
        });
    },
    onHide: function() {
        clearInterval(timer);
    },
    tabChart: function (e) {
        this.clearTimer();
        var type = e.target.dataset.type;
        var data = this.data[type];
        this.setData({
            tabName: type,
            stock: data.name,
            code: data.code,
            time: data.info.time,
            yc: data.info.yc
        });
        this['init-' + type]();
    },
    'init-ts': function () {
        var data = this.data.ts;
        ts1 = ts('time-sharing').init(getOptionTimeSharing1());
        this.renderTs1(data);
        ts2 = ts('time-sharing-b').init(getOptionTimeSharing2());
        this.renderTs2(data);
        tsAxisShow = axisShow('time-sharing-axis', {
            //todo: 配置项
            type: 'ts',
            height: 280,
            width: 'auto',
            maxY: 100,
            minY: 0
        });
        tsAxisShow.init();
    },
    'init-ts5': function () {
        var data = this.data.ts5;
        tsd51 = ts('time-sharing-5day').init(getOptionTimeSharing1('time-sharing-5day'));
        tsd52 = ts('time-sharing-5day-b').init(getOptionTimeSharing2('time-sharing-5day'));
        tsd51.metaData1(data, getOptionTimeSharing1('time-sharing-5day'));
        tsd51.draw();
        tsd52.metaData2(data, getOptionTimeSharing2('time-sharing-5day'));
        tsd52.draw();
    },
    renderTs1: function (data) {
        ts1.metaData1(data, getOptionTimeSharing1());
        ts1.draw();
    },
    renderTs2: function (data) {
        ts2.metaData2(data, getOptionTimeSharing2());
        ts2.draw();
    },
    clearTimer: function () {
        clearInterval(timer);
        this.setData({
            dataIndex: 0
        });
    },
    reset: function () {
        this.clearTimer();

        var data = storage.getTsData();
        this.renderTs1(data);
        this.renderTs2(data);
    },
    dynamic: function () {
        var that = this;
        var data = storage.getTsData();
        var origin = data.data.slice(0);
        var index = 0;
        var times = [50, 100, 200, 500, 1000];
        clearInterval(timer);
        timer = setInterval(function () {
            index += 1;
            if(index > 241 + 16){
                clearInterval(timer);
                return;
            }
            data.data = origin.slice(0, index);
            that.renderTs1(data);
            that.renderTs2(data);
            that.setData({
                dataIndex: index
            });
        }, times[this.data.timerIndex]);
    },
    bindTimeChange: function (e) {
        var index = e.detail.value;
        this.setData({
            timerIndex: index === '' ? 4 : index
        });
        this.dynamic();
    },
    axisStart: function (e) {
        var x = e.touches[0].x;
        var y = e.touches[0].y;
        this.data.isShowAxis = true;
        tsAxisShow.start(x, y);
    },
    axisMove: function (e) {
        if(this.data.isShowAxis){
            var x = e.touches[0].x;
            var y = e.touches[0].y;
            tsAxisShow.move(x, y);
        }
    },
    axisStop: function () {
        this.data.isShowAxis = false;
        tsAxisShow.stop();
    }
});

模板简介:该模板名称为【微信小程序股市分时图demo设计制作开发教程】,大小是,文档格式为.,推荐使用打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【小程序教程】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 22,956次
  • 使用软件
  • 文件格式
  • 文件大小
  • 上传时间 07-25
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
html5 自适应 微信文章 微信模板 微信素材 微信图片 微信公众平台 单页式简历模板 响应式 企业网站
您可能会喜欢的其他模板