热门标签 | 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; }

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


推荐阅读
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • switch语句的一些用法及注意事项
    本文介绍了使用switch语句时的一些用法和注意事项,包括如何实现"fall through"、default语句的作用、在case语句中定义变量时可能出现的问题以及解决方法。同时也提到了C#严格控制switch分支不允许贯穿的规定。通过本文的介绍,读者可以更好地理解和使用switch语句。 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
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社区 版权所有