没想到你是这样的进度条
xsobi 2024-12-09 18:23 1 浏览
学习 Axure 其实很容易上手,不过要熟练应用 Axure,最重要的是学会综合应用 Axure 的各种事件和属性,本文作者通过进度条这个简单的案例,讲解如何综合应用 Axure 的各种特性。
本文是一篇写给刚学完 Axure 基础的新手读者,大佬请勿喷,主要为刚上手 Axure 的产品经理提供一种综合应用的思路,所以本文我不是讲解如何绘制出一个高保真的进度条,而是介绍通过什么组件的什么属性来完成什么样的功能的思路来介绍。
一、动态面板拖动事件
首先来绘制进度条的雏形,用【矩形】绘制出进度条的容器,用【圆形】绘制进度游标,然后右键将圆形【转化为动态面板】
首先我们来完成的就是按住游标的时候可以进行左右拖动的功能,因为动态面板有一个拖动的事件,所以这也是要将游标转化为动态面板的原因,接下来开始实操,操作如下:
注意,因为进度条一般都是水平拖动的,所以这里移动要选择【跟随水平拖动】,接下来我们预览一下看看在浏览器中的效果:
拖动的效果实现了,但进度条的游标应该是在进度条内部拖动的,这里却可以拖到进度条外部去,我们对游标的拖动事件稍微改造一下,给拖动的范围加一个界限,我们可以看到,拖动的动作中,有个【添加界限】的功能:
点开的时候,发现可以给拖动的组件增加上下左右的边界,这里我们应该是要给游标增加【左侧】和【右侧】的边界,但关键是,边界怎么来确定呢,我们来分析一下:
如上图,如果我们要确保游标在进度条容器范围内活动,就需要确保游标向左移动时,游标的 x 坐标不会超过进度条容器左边的 x 值,向右移动时,不会超过进度条容器右边的 x 值,左边的 x 值好确定,实际上就是进度条容器的 x 值,从图中我们可以看出,进度条容器的 x = 300,因此,我们左边界就确定了;
右边界没法直接看出来,但是我们可以发现,右边界的 x 坐标实际上就是左边界的坐标+进度条容器的宽度,同样,我们从图中可以看到,进度条的宽度 w=300,因此,右边界 = 左边界x + 进度条容器宽度 w = 300 + 300 =600,左右边界确定了,我们来设置一下:
再来看看效果:
效果对了。
二、函数表达式
目前这个进度条是简陋而粗糙的,看起来也不直观,一般进度条左侧表示已经走完的进度,右侧表示还剩余的进度,已经走完的进度一般会用一个填充色来表现,接下来我们来画出这个效果:
这个就比刚刚那个看起来更加直观,但目前这个进度条不会随着游标的拖拽变化,因此,我们要给这个游标添加一个交互,让游标左右拖动的时候,进度条能跟着游标变化,这里我们可以给游标【拖动时】添加一个事件,就是让进度条尺寸跟着变化:
如上图可以看到,设置尺寸要求我们给定两个参数,分别是元件的宽度 w 和 高度 h,以及设置锚点。
先解释一下这个锚点,锚点的意思就是以哪个位置作为原点来进行缩放,比如图中选择左上角,就表示当图形在进行缩放的时候,左上角的位置是固定的,不会随着元件的缩放而变化,而我们在拖拽的时候,是需要左侧固定,右侧进行缩放的效果,所以这里的锚点应该是选择左侧中间的点。
再说说宽度和高度,我们这里是不需要改变进度条的高度的,所以高度这里我们按默认的20就可以,不用改;而宽度,由于游标是动态变化的,所以进度条的宽度 w 也应该是随着动态变化,首先我们得知道进度条的宽度跟游标的关系:
通过上方图片,我们很容易得出结论,进度条 x 是已知的,就是300,而游标是活动的,所以游标的 x 是活动的,因此,这里就需要用到函数表达式来表示游标 x,我们先点开宽度 w 旁边的 fx:
就弹出了下面的弹窗:
这里的“119”是当前进度条的宽度,是固定的值,我们不需要,把它删掉,然后点击【插入变量或函数】,输入 x:
我们是需要获取元件的 x,所以点击【元件】分类下的 x:
可以看到自动添加了一个表达式,This 表达的就是当前元件,也就是游标,This.x表达的就是游标的 x,现在有了游标 x,我们还需要减去进度条的 x,也就是300:
保存后就设置好了,我们来看看效果:
效果是有了,但有没有感觉这个进度条奇奇怪怪的,拉到最右边的时候,进度条也没有办法填满,中间还隔着一个游标:
所以我们可以对这个表达式再做一个优化,就是再加上当前游标的宽度,添加方法类似刚刚添加游标 x,添加完的设置如下:
这次我们再来看一下效果:
怎么样,是不是你想象中的完美样子?
三、局部变量
虽然图形看起来很直观,但是却始终没有数字精确,接下来我们就来做个百分比显示的功能,精准显示当前进度条走了多少。先在进度条右侧添加一个占位文本,待会用来显示百分比:
进度条百分比好算,就是拿已经走完的进度条的宽度 / 完整的进度条容器的宽度 * 100%就可以了,
完整的进度条宽度我们是能知道的,但已经走完的进度条宽度是动态的,我们怎么知道呢?是不是可以用我们上面讲到的函数表达式来做呢?那就来试试,我们给百分比的占位文案【设置文本】,文本的值同样采用函数表达式(fx)的方式:
我们先用上面相同的方法添加宽度,然后除以完整进度条的宽度300:
保存后来看看效果:
可以看到,拖动的时候,文字确实变了,但是这个数值明显跟实际进度不一样,而且数值是固定的,并不会随着进度条的拖动而变化,我们来分析一下原因:刚刚我们讲过,This 指代的是当前元件,我们是在游标里面的拖动事件中设置的,所以 This 指代的就是游标,因此上述图片实现的效果是用游标的宽度/300,得出来的显然不是我们要的结果,那我们这里要怎么获得已走过的进度条的宽度呢,这就涉及到另外一个概念叫【局部变量】了。
我们看到,上述图片下半部分有个【局部变量】的区域,我们点击【添加局部变量】,发现它自动添加了一个 LVAR1 的变量:
由于我们是需要获得进度条这个元件,所以第二个字段类型我们选择【元件】,【目标】选择进度条:
这个时候,我们可以理解为,LVAR1 就等同于进度条这个组件,这样就好办了,我们如果需要获得进度条的宽度,就类似上述的 This.width 一样,用 LVAR1.width 就可以了:
保存之后再来看看效果:
这下就对了,但是我们想要的是百分比,不是小数,我们只需要对上述的表达式做一个小小的优化即可,把获得的数值乘以100,然后再加上%,注意,因为%是拼接上去,不参与数值的运算,所以要放在[[]]外面,%放在[[]]里面是一个错误的表达式,无法正确计算出结果:
再来看看效果:
看起来一切都很完美,但美中不足的是,在某些进度下,百分比的数值过长,如果我们只需要保留小数点后2位,可以怎么做呢?
Axure 中有一个函数,叫 toFixed(decimalPoints),可以取某个小数的小数点后几位,decimalPoints 表示要取的位数:
我们改一下表达式:
再看一下效果:
到这里,我们的进度条就画完了,但是……
四、通用化设计
有时候我们的一些设计做起来复杂,但是通用性又很高,在很多设计作品中都能重复用到,我们希望在设计其他产品的时候,可以直接复制粘贴,做一些位置和尺寸的微调就能用,这就叫通用化设计,我们来看看我们刚刚做的进度条是否是通用化设计,我把进度条换了个位置,并拉长了进度条容器的长度,我们看一下效果:
这已经完全不能看了,拖动的时候游标乱飘,无法拖动到最左端和最右端,百分比计数也是完全不对的,等于说我们上面所做的设置都无效了,这其实是因为我们在做这个进度条的时候,很多的位置和尺寸的数值都是固定的,也就是说,这个进度条只有在特定位置和特定宽度下才能按照我们所设定的逻辑呈现,一旦位置或尺寸任意一个数值发生了变化,都可能导致原来的设计出现问题,那如何才能改成通用化设计呢?
实际上,一个元件要复用,在复用的时候最可能调整的,除了样式,就是位置和尺寸,样式不会影响功能的实现,剩下的就是位置和尺寸,如果要使一个元件在调整了位置和尺寸后还能正常使用,那么这个元件的位置和尺寸参数就要做成动态的,结合我们上面讲到的局部变量,我们来对这个进度条做一个通用化的调整。
首先是拖动时候游标的边界,上方的动图可以看出,由于我们把游标边界设为固定值,那么游标就只能在固定的区域内活动,我们要确保在改变位置和尺寸后,游标依然能够正常识别进度条的真正边界,就需要把这个边界设成动态的。在前文中我们已经总结过,游标的左边界=进度条容器的 x 值,右边界=进度条容器 x + 进度条容器宽度 w,我们来把下方游标的左右边界改成函数表达式:
下方是游标左边界的函数表达式:
接着是游标右边界的函数表达式:
保存之后我们看看游标的拖动是否正常:
这样,游标的拖动就恢复成我们要的效果了,但是已经走完的进度条还是错的,不会跟随游标,我们也将进度条的参数改成函数表达式:
这里进度条的高度没有影响到我们的设计,所以高度维持不变,我们对宽度进行改造,将进度条容器的 x 值换成动态的:
保存看看效果:
现在进度条正常了,但是百分比还是错误的,我们对百分比的函数表达式也做一个调整,将进度条容器的宽度也换成动态的:
再来看一下效果:
为了验证这个进度条是不是可以真的可以通用化,我们再重新调整它的位置和尺寸看一下:
可以看到,这个进度条依旧是正常的,这样我们就完成了进度条的通用化设计,这才是我真正想分享给你的通用化进度条设计,各位读者如果有看不明白的地方欢迎在评论区留言指出。
本文由 @产品锦李 原创发布于人人都是产品经理,未经许可,禁止转载。
题图来自Unsplash,基于CC0协议。
该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务。
相关推荐
- 斗鱼针针成旻云个人资料 针针年龄身高演艺经历介绍
-
[闽南网]针针成旻云曾是七煌旗下签约艺人,经常在斗鱼进行直播身高超过170cm的她更因为有一双大长腿而被称为“斗鱼第一美腿”、“电竞第一腿”。本文这就来对针针的个人资料进行详细介绍,想知道她的年龄身高...
- 轻量级RTSP服务模块和RTSP推流模块适用场景区别
-
好多开发者一直搞不清轻量级RTSP服务SDK和RTSP推流SDK的区别,以下是相关区别:1.轻量级RTSP服务模块:轻量级RTSP服务解决的核心痛点是避免用户或者开发者单独部署RTSP或者RTMP服...
- 《新·奥特曼》11月18日国内视频平台上线
-
《新·奥特曼》海报。新京报讯11月14日,由上海新创华文化发展有限公司授权引进电影《新·奥特曼》宣布正式定档11月18日(周五)00:00上线视频平台,上线版本为日语配音中文字幕版。影片由庵野秀明(...
- 剑指Apple Watch!Android Wear也将支持视频功能
-
想必智能手表发展到现在,大家最期待的还是视频功能,近日AndroidWear就实现了这一功能,以后就能在手表上看视频了,想想就挺激动的,快来看看吧!其实早在WWDC大会上,老对手AppleWatc...
- QT应用编程:基于VLC开发音视频播放器(句柄方式)
-
一、环境介绍操作系统:win1064位QT版本:QT5.12.6编译器:MinGW32VLC版本:...
- OBS 源码分析 obs开发
-
本文将按照数据源的获取、渲染、推送的直播流程来让大家深入了解一下。1、直播源数据获取obs在启动时会优先加载libobs核心库,这个库初始化obs很多内容,包括crash模块、com、性能监...
- Android和iOS端Moments更新:支持视频分享功能
-
Moments是社交网络巨头Facebook推出的一款私人照片分享应用,今天公司宣布对Android端和iOS端应用同时升级,新增对视频分享功能的支持。事实上早在数周之前,Facebook就曾表示Mo...
- 您很快就可以在Android Galaxy设备之间传输视频通话
-
在阅读此文之前,辛苦点击右上角的“关注”,既方便您进行讨论与分享,又能给您带来不一样的参与感,感谢您的支持!导语:在科技领域,每时每刻都有新的发展,令人兴奋的创新不断涌现。早在八月份,Android系...
- 一篇文章带你FFmpeg到流媒体服务器开发
-
安装ffmpeg:下载FFmpeg和libx264的包ffmpeg-2.4.1.tar.bz2last_x264.tar.bz2libx264需要yasm,所以先安装yasmapt-getinst...
- YouTube 为 Android 平台提供 1440P 视频
-
安锋网8月10日消息,Android从起初的480P的屏幕分辨率发展到2014年的1440P花了将近六年的时间,一般认为1080P的屏幕分辨率已经是人眼可以识别的极限,但是...
- FFmpeg 调用 Android MediaCodec 进行硬解码(附源码)
-
FFmpeg在3.1版本之后支持调用平台硬件进行解码,也就是说可以通过FFmpeg的C代码去调用Android上的MediaCodec了。在官网上有对应说明,地址如下:trac....
- Android FFmpeg + OpenGL ES YUV Player
-
1、FFmpeg解出YUV帧数据1.1方法介绍打开封装格式上下文...
- 基于WebRTC的Android移动端无线视频传输
-
摘要:视频传输技术在现代社会广泛应用,人们对其的要求也越来越高,其发展的趋势是方便、快捷、随时随地。传统的视频传输过于依赖线路,线路的走向限制了传输的很多可能,所以无线传输才是发展的方向。本文提出...
- 使用python爬取抖音app视频 python爬取抖音视频数据
-
记录一下如何用python爬取app数据,本文以爬取抖音视频app为例。编程工具:pycharm...
- Android IOS WebRTC 音视频开发总结(七七)-- WebRTC的架构和协议栈
-
本文主要介绍WebRTC的架构和协议栈(我们翻译和整理的,译者:litie),最早发表在【编风网】为了便于理解,我们来看一个最基本的三角形WebRTC架构(见下图)。在这个架构中,移动电话用“浏览器M...
- 一周热门
- 最近发表
- 标签列表
-
- grid 设置 (58)
- 移位运算 (48)
- not specified (45)
- patch补丁 (31)
- strcat (25)
- 导航栏 (58)
- context xml (46)
- scroll (43)
- element style (30)
- dedecms模版 (53)
- vs打不开 (29)
- nmap (30)
- c 视频教程下载 (33)
- paddleocr (28)
- listview排序 (33)
- firebug 使用 (31)
- transactionmanager (30)
- characterencodingfilter (33)
- getmonth (34)
- commandtimeout (30)
- hibernate教程 (31)
- label换行 (33)
- curlpost (31)
- android studio 3 0 (34)
- android开发视频 (30)