Axure 教程 | 详解实践日历中继器

12 评论 26147 浏览 65 收藏 11 分钟

 昨天看了大神RAEDME大鹏的中继器日历原型讲解,平时很少用到这些高级的,跃跃欲试。利用昨天的女神假期,原理+实践,尝试做出了这个日历,将详细的实践步骤分享给大家~

相信很多和我一样的,看了大神的原理,却苦于难实现的,捂脸jpg。大神的实践讲解总是很少。。。

准备工作,打开你电脑的axure,拉出两个控件(表格和中继器),表格保留一行,左右填充“上月”和“下月”,中间命名为“当前”;再拉出一个表格,保留一行7列,分别填充“日 一 二 三 四 五 六”,设置单元格40*40(这个大小随意设置);中继器命名为“日历”,双击中继器,进入详细页面,设置矩形为40*40(宽度与星期的单元格保持一致,美观),命名为“日历详情”,给方格添加交互状态(选中控件,右键,添加鼠标划入,选中,禁用的状态),中继器属性区添加42行空白内容,中继器样式选择水平布局,每行7个(对应周日-周六)。

以上,准备部件放置完成,请看下图实践:

接下来详细说明下实践原理,看过大神的原理介绍并能吃透的,自动下滑页面看实践,如果连实践也会的,那你就关了此页面吧(不要看妹纸献丑了,捂脸.jpg)

原理篇

原型分成上下两部分,上面控制月份变化,下面控制对应月份的详细日期显示。

页面加载完成后,日历显示当前月份日期,当前时间(举栗子:2017/3/9),当天时间被选中高亮,非当月时间置灰(实现的是显示当前月份内容)。点击”上月“和”下月“,”当前“单元格的时间与下方日历随之变化。

实现上会用到几个日期函数:Now,getDate(),getDay(),getMonth(),addMonths(months),addDays(days),toLocalDateString(),index。

Now:返回当前时间详细值,栗子:Thu Mar 09 2017 10:51:59 GMT+0800 (中国标准时间)

getDate():返回月的日期,栗子:9,今天是9号

getDay():返回日期是一周中的第几天(返回值为0-1,对应日-六),栗子:4,今天是周四

getMonth():返回日期所在月份,栗子:3,这个月是3月份

addMonths(months):对月份进行加减,前一个月后一个月的变化,括号内的months数值可正可负,正代表月份向未来变化,负代表月份向过去变化

addDays(days):对日期进行加减,前一天后一天的变化,括号内的days数值可正可负,正代表日期向未来变化,负代表日期向过去变化

toLocalDateString():将时间详细值转化为可读的”年月日“字符串,栗子:Now的时间”Thu Mar 09 2017 10:51:59 GMT+0800“,变成”2017/3/9“

index:位置排序的索引数值,栗子:42个方格,当前选中是第16个放个,则返回16

PS:日期函数示例http://share.yuanxingku.com/tutorial/datefunctions/#p=date_functions

页面添加3个全局变量,表示当前日期的变量”Date_Now“,表示当前日期所在月份的1号日期的变量”Date_Now_1“,表示1号日期的索引序值的变量”Date_Now_1_Index“

Date_Now_1的日期=Date_Now的日期+/-相差的天数,Date_Now的日期=Now获得的数值,相差天数=1-Date_Now的日期,栗子:今天9号,与1号相差8天,即8=9-1

函数表达:Date_Now_1=[[Date_Now.addDays(1-Date_Now.getDate())]]

getDay()的”日-六“对应返回”0-6“,首行的索引数值为”1-7“,即索引数值=”0-6“+1(假定了每月的1号出现在第一行或者第二行),Date_Now_1_Index的数值=Date_Now_1的索引值

函数表达:Date_Now_1_Index=[[Date_Now_1.getDay()+1]]

其他日期=日期+/-与1号日期的差值天数,与1号日期的差值天数=其他日期的索引值-Date_Now_1_Index

函数表达:其他日期=[[其他日期.addDays(Item.index-Date_Now_1_Index).getDate()]]

原理绕了一圈,估计你可能有点”黑人问号脸“(我自己都有点绕蒙B了。。。)

下面进行实践,实践与原理对应起来了,就会豁然开朗了~

实践篇

开始给准备好的部件添加用例咯~

分成三部分来说,上面的控制月份的部件,下面中继器的部件,然后是月份与中继器的结合。

在页面载入时,先把3个全局变量赋值,并填充”当前“单元格的内容:

Date_Now=[[Now]],获取当前日期

Date_Now_1=[[Date_Now.addDays(1-Date_Now.getDate())]],获取当前日期月份1号日期

Date_Now_1_Index=[[Date_Now_1.getDay()+1]],获取1号日期的索引值

当前=[[Date_Now.toLocaleDateString()]],当前日期转化为”年月日“格式显示

设置上月,下月点击用例,以上月点击为例:

Date_Now=[[Date_Now_1.addMonths(-1)]],当前日期为向过去移动一个月的1号日期

Date_Now_1=[[Date_Now_1.addMonths(-1)]],当前日期月份的1号向过去移动一个月

Date_Now_1_Index=[[Date_Now_1.getDay()+1]],移动一个月后的1号索引位置

当前=[[Date_Now.toLocaleDateString()]]

下月点击用例同理,将addMonths(-1)修改为addMonths(1)即可。

浏览器预览一下吧,看看点击上月,点击下月,当前的时间显示是否有变化呢?

接着对中继器添加用例。对当前日期高亮选中,非当月日期置灰禁用。点击中继器,右侧属性”每项加载时“添加用例。

添加用例1,高亮当前日期:

用例条件:[[Date_Now_1.addDays(Item.index-Date_Now_1_Index)]]==[[Date_Now]],当前中继器的选项正好是当前日期,有点绕口,慢慢理解。。。

满足条件的进行操作:

日历详细=[[Date_Now_1.addDays(Item.index-Date_Now_1_Index).getDate()]],获得当前日期

日历详细,启用,鼠标划入有状态变化

日历详细,选中状态=true,设置被选中

添加用例2,显示当月的日期:

用例条件:[[Date_Now_1.addDays(Item.index-Date_Now_1_Index).getMonth()]]==[[Date_Now_1.getMonth()]],当前日期所在月份与1号日期月份相同

满足条件的进行操作:

日历详细=[[Date_Now_1.addDays(Item.index-Date_Now_1_Index).getDate()]],获得当前日期

日历详细,选中状态=false,设置未选中

日历详细,启用,鼠标划入有状态变化

添加用例3,非当月的日期置灰:

用例条件直接为非以上两种情况,无需添加特殊说明

满足条件的进行操作:

日历详细=[[Date_Now_1.addDays(Item.index-Date_Now_1_Index).getDate()]],获得当前日期

日历详细,禁用,鼠标划入无效果

中继器的用例添加完了,预览下,看看是不是已经能够显示全部日期了呢?

接下来,把月份切换与中继器日期显示结合啦~

以点击上月为例,点击时,更新中继器的内容,且切换到上一个月时,日期定为到1号且高亮(看下电脑的日期,月份切换时,选中高亮每月1号日期)。

选择中继器的”更新行“,添加用例,满足条件[[TargetItem.index>0]]更新内容。

点击下月同理操作。

日历操作就完成了,快去浏览器里预览下吧~

原型预览:http://59lgso.axshare.com

 

作者:Lprecious,成长中的产品汪

本文由 @Lprecious 原创发布于人人都是产品经理。未经许可,禁止转载。

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 特意注册账号来回复的,按照教程成功了,谢谢兄弟,我自己还在梳理思路

    来自湖南 回复
  2. 我按照你给的函数试了一下,发现不能正常显示出来日期,方便给下rp文件吗?

    来自福建 回复
  3. Date_Now=[[Date_Now_1.addMonths(-1)]],当前日期为向过去移动一个月的1号日期
    这里错了喔,应该为
    Date_Now=[[Date_Now.addMonths(-1)]]

    来自广东 回复
  4. 我是特地注册了账号来表示感谢的。多谢楼主分享!

    来自广东 回复
  5. 给你点赞

    来自北京 回复
  6. 好厉害!就是不太懂那些函数和公式怎么解读

    来自湖南 回复
  7. 一直点下个月,过几个月后会有2个日期都选中了的情况

    来自广东 回复
  8. 为什么Date_Now_1=[[Date_Now.addDays(1-Date_Now.getDate())]]而不是Date_Now.getDate()-1??

    来自北京 回复
  9. 厉害啊,曾经尝试过,发现有点麻烦,就直接下载了一个时间控制器,需要的时候就把它拖进去

    来自北京 回复
    1. 我只是融入了自己思考的搬运工,也是看了大神的作品后,自己思索慢慢做出来的,实践起来确实有点麻烦

      来自上海 回复
  10. 原型下载:https://pan.baidu.com/s/1bpFzaHL 密码: t9iv

    来自上海 回复
    1. 感谢楼主分享,不过我发现翻到上一月后全变成禁用了,请问楼主知道什么情况么?百度云被吞啦

      来自北京 回复