热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微信小程序如何实现时间轴

这篇文章主要介绍了微信小程序如何实现时间轴的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序如何实现

这篇文章主要介绍了微信小程序如何实现时间轴的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序如何实现时间轴文章都会有所收获,下面我们一起来看看吧。

一、显示样式

微信小程序如何实现时间轴

二、代码 

1.wxml:


    
        {{selectedDay.year}}/{{selectedDay.month}}/{{selectedDay.day}}
    
    
        回到今天
    

 


    
    
 
        
        
            周{{item.week}}
            {{item.day}}
        
    

2.js: 

Page({
 
    data: {
        //日期数组,每个元素都是一个对象,共有21个元素    {day: 10, month: 11, week: "二", year: 2020}
        dayList: [],
        // 一天的毫秒数
        millisecond: 86400000,
        // 生命周期函数中设置为 view7,用来控制 scroll-view 的滑动,滑动到指定项(该项的id和intoView的值相同)
        intoView: '',
        // 当前项的下标,初始值是7。从0开始,“今天”之前有7天,所以“今天”的下标是7
        currentIndex: 7,
        // 选中的日期(用户通过点击上面的按钮)
        selectedDay: {},
        // 滑动动画时长
        duration: 500,
        // swiper里面的数据,是一个对象数组。每一个元素都代表一条记录。 
        /*
            所有的代办事项,是一个数组,每一个元素依旧是一个数组。任何里面的每一个元素就是一个对象,代表一条代办记录
            {gmtCreate: 1605023745000, gmtModify: 1605023750000, id: 1, importance: 1, isFinished: 0,remark: "测试备注",timeFlag: 1 title: "微信小程序" uId: 1}
        */
        targetList: [],
        // swiper的高度
        widHeight: 350,
        // 用户id,页面加载时从全局 globalData 中获取
        uid: "1",
        // // 完成按钮图标对应的 url: ../../icon/target.png   或者  ../../icon/target_ok.png
        // imageUrl: "",
        // iconClass: ""
    },
 
    clickTargetItem: function (e) {
        console.log("clickItem");
        console.log(e.currentTarget.dataset);
        this.setData({
            "message": e.currentTarget.dataset
        })
        console.log("本条记录的id为:", e.currentTarget.dataset.id);
        console.log(this.data.targetList[this.data.currentIndex]);
    },
    // 中部 swiper 滑动触发的点击事件
    siwperChange: function (e) {
 
 
        // console.log(e.detail);
        // 1. 设置 data 中的 index 的值,然后上面的日历部分的index也会改变。这样上面日历部分和下面的swipper部分就可以同步
        this.setData({
            "currentIndex": e.detail.current
        })
        // 2. 重新设置 siwper 的高度(先更改 currentIndex,然后在设置对应 siwper 的高度)
        // console.log("slide");
        // console.log(this.data.targetList);
        // console.log("currentIndex", this.data.currentIndex);
        // console.log(this.data.targetList[this.data.currentIndex].length);
        // console.log("myheight", myHeight);
 
        var myHeight = this.data.targetList[this.data.currentIndex].length * 135 + 3 * 70 + 176 + 100;
 
 
        wx.getSystemInfo({
            success: (result) => {
                console.log("页面高度", result.screenHeight);
                if (myHeight < result.screenHeight) {
                    myHeight = result.screenHeight;
                }
            },
        });
 
        // 设置页面高度和当前选择的日期
        this.setData({
            &#39;widHeight&#39;: myHeight,
            "selectedDay": this.data.dayList[e.detail.current]
        })
 
    },
 
    // 点击日历上面的日期
    clickDate: function (event) {
        console.log(event.currentTarget.dataset);
        // 设置数组下标
        this.setData({
            &#39;intoView&#39;: "view" + event.currentTarget.dataset.index,
            &#39;currentIndex&#39;: event.currentTarget.dataset.index
        })
 
        // 更改用户选中的日期,然后在页面中渲染选中的日期
        this.setData({
            "selectedDay": this.data.dayList[event.currentTarget.dataset.index]
        })
        this.onPullDownRefresh()
    },
 
    // “回到今天” 按钮对应的点击事件
    returnToday: function () {
        console.log("回到今天");
        this.setData({
            "intoView": "view7",
            "currentIndex": 7,
            "selectedDay": this.data.dayList[7]
        })
        this.onPullDownRefresh()
    },
 
    // 封装的 js 函数,生成一个 dayList,里面有最近3个礼拜的日期信息
    weekDate: function () {
 
        var dayList = [];
 
        // 获取当前时间对应的 date 对象
        var myDate = new Date();
 
        // 因为要最近3个礼拜的日期信息,可能涉及到月份的变化所以不能简单的对天数加1或者减1,可以先计算出毫秒数,然后转换为日期
        var millisecond = myDate.getTime();
 
        // 为 "上一个礼拜的时间" 加入 dayList 中
        for (var i = 7; i > 0; i--) {
            // 根据毫秒数构造一个 Date 对象
            var tempDate = new Date(millisecond - i * this.data.millisecond);
 
            dayList.push({
                &#39;day&#39;: tempDate.getDate(),
                &#39;month&#39;: tempDate.getMonth() + 1,
                &#39;week&#39;: this.toWeekDay(tempDate.getDay()),
                &#39;year&#39;: tempDate.getFullYear()
            });
        }
 
        // 将 “今天” 加入 dayList 中
        dayList.push({
            &#39;day&#39;: myDate.getDate(),
            &#39;month&#39;: myDate.getMonth() + 1,
            &#39;week&#39;: this.toWeekDay(myDate.getDay()),
            &#39;year&#39;: myDate.getFullYear()
        })
 
 
        // 将 “未来2周” 加入 dayList 中
        for (var i = 1; i <= 13; i++) {
            var tempDate = new Date(millisecond + i * this.data.millisecond);
            dayList.push({
                &#39;day&#39;: tempDate.getDate(),
                &#39;month&#39;: tempDate.getMonth() + 1,
                &#39;week&#39;: this.toWeekDay(tempDate.getDay()),
                &#39;year&#39;: tempDate.getFullYear()
            })
        }
 
        return dayList;
    },
 
    // 传入数据  讲一周的某一天返回成中文状态下的字符
    toWeekDay: function (weekDay) {
        switch (weekDay) {
            case 1:
                return &#39;一&#39;;
                break;
            case 2:
                return &#39;二&#39;;
                break;
            case 3:
                return &#39;三&#39;;
                break;
            case 4:
                return &#39;四&#39;;
                break;
            case 5:
                return &#39;五&#39;;
                break;
            case 6:
                return &#39;六&#39;;
                break;
            case 0:
                return &#39;日&#39;;
                break;
            default:
                break;
        }
        return &#39;传入未知参数&#39;;
    },
 
    
    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {
 
        // 加载数据,调用封装的方法
        this.loadingData();
 
    },
 
    // 生命周期函数:用户下拉刷新
    onPullDownRefresh: function () {
        console.log("refresh");
 
        // 加载数据,调用封装的方法
        this.loadingData();
    },
 
    // 封装出来的加载数据的函数
    loadingData: function () {
        wx.showLoading({
            title: &#39;加载中&#39;,
        })
    
        // 1. 获取最近3周的日期信息,存入 this.data 中
        var dayList = this.weekDate();
        // 通过 scroll-into-view 设置一开始的位置
        this.setData({
            "dayList": dayList,
            "intoView": "view7"
        });
 
        // 1.1 设置当前选中的日期
        this.setData({
            "selectedDay": this.data.dayList[7]
        })
 
 
        // 2. 从 globalData 中获取用户openid
        var app = getApp();
        this.setData({
            "uid": wx.getStorageSync(&#39;openid&#39;)
        })
 
        // 2. 获取代办事项信息,根据用户id获取
        // 向后端服务器发送请求
        // 将当前的日期发送给后端服务器
        var myDate = new Date();
        var millisecond = myDate.getTime();
    var that=this;
        wx.request({
            url: app.globalData.url + &#39;api/wx/getTargetByUserId&#39;,
            method: "GET",
            data: {
                "uid": this.data.uid,
                "millisecond": millisecond,
                "currentIndex": this.data.currentIndex
            },
            success: res => {
                console.log("请求成功!")
                console.log(res.data.length);
 
                // 设置待办事项,同时设置 swiper 的高度
                // “今天” 对应的 swiper-item 下标是7,所以选择数组第7个元素
 
                var myHeight = res.data.length * 70 +250;
                console.log(myHeight);
                //console.log("今天的代办事项有:", res.data[7].length)
                //console.log("myheight", myHeight);
 
                // 为了让 swiper 能够覆盖整个页面(只有这样,按住其他地方进行滑动时,也可以成功的滑动 siwpper)
                /*
                    判断 myHeight 的高度
                    为了让 swiper 能够覆盖整个页面(只有这样,按住其他地方进行滑动时,也可以成功的滑动 siwpper)
                */
 
                wx.getSystemInfo({
                    success: (result) => {
                        console.log("页面高度", result.screenHeight);
                        if (myHeight < result.screenHeight-250) {
                            myHeight = result.screenHeight-250;
                        }
                    },
                })
 
                this.setData({
                    &#39;targetList&#39;: res.data,
                    &#39;winHeight&#39;: myHeight,
 
                })
 
                // 隐藏提示框
                wx.hideLoading();
 
                // 停止下拉刷新
                wx.stopPullDownRefresh()
            }
        })
    },
 
})

3.wxss: 

/* 顶部时间展示区域 */
.header {
    width: 100%;
    height: 125rpx;
    /* background-color: palegreen; */
}
 
.header-left {
    float: left;
}
 
.header-left-top {
    height: 62.5rpx;
    line-height: 62.5rpx;
    margin-left: 25rpx;
    font-size: 40rpx;
    font-weight: 500;
    margin-top: 25rpx;
}
 
.header-left-bottom {
    height: 62.5rpx;
    margin-left: 25rpx;
}
 
.header-right {
    float: right;
    margin-right: 30rpx;
    margin-top: 25rpx;
}
 
 
/*  顶部日历部分   */
.scroll-view_H {
    white-space: nowrap;
}
 
.scroll-view-item_H {
    display: inline-block;
    width: 14.4%;
    height: 140rpx;
    /* background-color: pink; */
    /* border: 2px solid; */
    border-bottom: 1px solid #cccccc;
 
    /* opacity: 0.5; */
    color: #96989D;
    font-size: 32rpx;
    font-family: CenturyGothic-Bold;
    font-weight: bold;
 
    padding-bottom: 30rpx;
}
 
.scroll-week {
    text-align: center;
    height: 70rpx;
    line-height: 70rpx;
}
 
.scroll-day {
    text-align: center;
    height: 70rpx;
    line-height: 70rpx;
}
 
.active .scroll-day {
    border-radius: 90rpx;
    background-color: #4e8a8d;
    color: white;
}
 
/* 中部的 swiper-item */
swiper {
    height: 100%;
}
 
.swiper-box{ display: block; height: 100%; width: 100%; overflow: hidden; }

关于“微信小程序如何实现时间轴”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“微信小程序如何实现时间轴”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程笔记行业资讯频道。


推荐阅读
  • 本文详细探讨了使用纯JavaScript开发经典贪吃蛇游戏的技术细节和实现方法。通过具体的代码示例,深入解析了游戏逻辑、动画效果及用户交互的实现过程,为开发者提供了宝贵的参考和实践经验。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 重要知识点有:函数参数默许值、盈余参数、扩大运算符、new.target属性、块级函数、箭头函数以及尾挪用优化《深切明白ES6》笔记目次函数的默许参数在ES5中,我们给函数传参数, ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 本地存储组件实现对IE低版本浏览器的兼容性支持 ... [详细]
  • ES6引入了Symbol这一新型原始数据类型,其核心特性在于能够生成独一无二的值。起初,对于“独一无二”的概念我并未完全理解,但通过查阅相关资料并结合个人见解,逐步掌握了其精髓。Symbol的独特之处不仅在于其唯一性,还在于它在编程中的多种应用场景,如防止属性名冲突等。本文将深入探讨Symbol的特性和实际应用,帮助读者全面理解这一重要特性。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 利用 JavaScript 和 Node.js 验证时间的有效性
    本文探讨了如何使用 JavaScript 和 Node.js 验证时间的有效性。通过编写一个 `isTime` 函数,我们可以确保输入的时间格式正确且有效。该函数利用正则表达式匹配时间字符串,检查其是否符合常见的日期时间格式,如 `YYYY-MM-DD` 或 `HH:MM:SS`。此外,我们还介绍了如何处理不同时间格式的转换和验证,以提高代码的健壮性和可靠性。 ... [详细]
  • 在PHP中,高效地分割字符串是一项常见的需求。本文探讨了多种技术,用于在特定字符(如“或”)后进行字符串分割。通过使用正则表达式和内置函数,可以实现更加灵活和高效的字符串处理。例如,可以使用 `preg_split` 函数来实现这一目标,该函数允许指定复杂的分隔符模式,从而提高代码的可读性和性能。此外,文章还介绍了如何优化分割操作以减少内存消耗和提高执行速度。 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
  • 本文将继续探讨 JavaScript 函数式编程的高级技巧及其实际应用。通过一个具体的寻路算法示例,我们将深入分析如何利用函数式编程的思想解决复杂问题。示例中,节点之间的连线代表路径,连线上的数字表示两点间的距离。我们将详细讲解如何通过递归和高阶函数等技术实现高效的寻路算法。 ... [详细]
author-avatar
mobiledu2502923193
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有