小程序 跑步 记录跑步代码 记时间和位置更新

html部分

<view class="head" style="flex-direction:row;">
        <image class="icon" src="/resources/joyrun.png" mode="aspectFill" />
        <button bindtap="openLocation">打开位置</button>
        <button bindtap="starRun">开始跑步</button>
        <button bindtap="stopRun">暂停跑步</button>
        <text>\n里程数:{{meters}}km</text>
        <text>\n\n时间:{{time}}</text>
</view>
<view class="mainView">
        <map class="mapView" style="width: 100%; height: 375px;" latitude="{{latitude}}" longitude="{{longitude}}" markers="{{markers}}" covers="{{covers}}">
        </map>
</view>

js部分

var countTooGetLocation = 0;
var total_micro_second = 0;
var starRun = 0;
var totalSecond = 0;
var oriMeters = 0.0;
/* 毫秒级倒计时 */
function count_down(that) {
        if (starRun == 0) {
                return;
        }
        if (countTooGetLocation >= 100) {
                var time = date_format(total_micro_second);
                that.updateTime(time);
        }
        if (countTooGetLocation >= 5000) { //1000为1s
                that.getLocation();
                countTooGetLocation = 0;
        }
        setTimeout
        setTimeout(function() {
                countTooGetLocation += 10;
                total_micro_second += 10;
                count_down(that);
        }, 10)
}
// 时间格式化输出,如03:25:19 86。每10ms都会调用一次
function date_format(micro_second) {
        var second = Math.floor(micro_second / 1000);
        var hr = Math.floor(second / 3600);
        var min = fill_zero_prefix(Math.floor((second - hr * 3600) / 60));
        var sec = fill_zero_prefix((second - hr * 3600 - min * 60)); // equal to => var sec = second % 60;
        return hr + ":" + min + ":" + sec + " ";
}
function getDistance(lat1, lng1, lat2, lng2) {
        var dis = 0;
        var radLat1 = toRadians(lat1);
        var radLat2 = toRadians(lat2);
        var deltaLat = radLat1 - radLat2;
        var deltaLng = toRadians(lng1) - toRadians(lng2);
        var dis = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(deltaLat / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(deltaLng / 2), 2)));
        return dis * 6378137;
        function toRadians(d) {
                return d * Math.PI / 180;
        }
}
function fill_zero_prefix(num) {
        return num < 10 ? "0" + num : num
}
Page({
        data: {
                clock: '',
                isLocation: false,
                latitude: 0,
                longitude: 0,
                markers: [],
                covers: [],
                meters: 0.00,
                time: "0:00:00"
        },
        //****************************
        onLoad: function(options) {
                // 页面初始化 options为页面跳转所带来的参数
                this.getLocation()
                console.log("onLoad")
                count_down(this);
        },
        //****************************
        openLocation: function() {
                wx.getLocation({
                        type: 'gcj02', // 默认为 wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标
                        success: function(res) {
                                console.log("打开高德地图")
                                console.log(res)
                                wx.openLocation({
                                        latitude: res.latitude, // 纬度,范围为-90~90,负数表示南纬
                                        longitude: res.longitude, // 经度,范围为-180~180,负数表示西经
                                        scale: 908, // 缩放比例
                                })
                        },
                })
        },
        starRun: function() {
                if (starRun == 1) {
                        return;
                }
                starRun = 1;
                count_down(this);
                this.getLocation();
        },
        stopRun: function() {
                starRun = 0;
                count_down(this);
        },
        updateTime: function(time) {

                var data = this.data;
                data.time = time;
                this.data = data;
                this.setData({
                        time: time,
                })

        },
        getLocation: function() {
                var that = this
                wx.getLocation({
                        type: 'gcj02', // 默认为 wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标
                        success: function(res) {
                                console.log("res----------")
                                console.log(res)
                                //make datas 
                                var newCover = {
                                        latitude: res.latitude,
                                        longitude: res.longitude,
                                        iconPath: '/resources/redPoint.png',
                                };
                                var oriCovers = that.data.covers;
                                console.log("oriMeters----------")
                                console.log(oriMeters);
                                var len = oriCovers.length;
                                var lastCover;
                                if (len == 0) {
                                        oriCovers.push(newCover);
                                }
                                len = oriCovers.length;
                                var lastCover = oriCovers[len - 1];
                                console.log("oriCovers----------")
                                console.log(oriCovers, len);
                                var newMeters = getDistance(lastCover.latitude, lastCover.longitude, res.latitude, res.longitude) / 1000;
                                if (newMeters < 0.0015) {
                                        newMeters = 0.0;
                                }
                                oriMeters = oriMeters + newMeters;
                                console.log("newMeters----------")
                                console.log(newMeters);
                                var meters = new Number(oriMeters);
                                var showMeters = meters.toFixed(2);
                                oriCovers.push(newCover);
                                that.setData({
                                        latitude: res.latitude,
                                        longitude: res.longitude,
                                        markers: [],
                                        covers: oriCovers,
                                        meters: showMeters,
                                });
                        },
                })
        }
})
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容

  • 引言 在整理小程序开发教程的过程中,是按照一定的逻辑顺序来整理的。 首先得安装自己的编辑器,不管是使用微信开发者工...
    OzanShareing阅读 2,259评论 0 4
  • 1.最初设计 null为空的对象,转化为数值为0 undefined表示原始值,转化为数值为NaN 2.目前的用法...
    星月西阅读 293评论 0 0
  • ©文章由「更好时代」原创发布,保留所有权,全网违反相关法律的抄袭行为将受到更好时代专业法律团队相应的严重法律追责。...
    更好时代阅读 291评论 0 4
  • 生活中我们会与很多人相遇,当自己融入一个环境中时不合群需要改吗?这应该几乎是每个人都会遇到的问题。 人与人相处愉快...
    Cleanlyking阅读 358评论 1 0
  • 一直很喜欢听某人的音频节目,有时候并不是因为喜欢他讲的内容,而仅仅是喜欢他说话的口音和口气。尤其闷的时候听会莫名地...
    小小俏阅读 249评论 0 1