原标题:Axure教程:如何实现爱彼迎App首页Banner的切换效果

本文分享一个用Axure实现爱彼迎App首页Banner切换效果的方法,供大家参考,欢迎一起交流。

作者最近闲暇时间试着将爱彼迎App的Banner切换效果用Axure实现出来,网上类似的教程不多,所以给大家分享一下。本文没有将每一个步骤分享出来,而是提供一个实现的思路。对Axure的初学者来说可能有点难懂,后面会提供源文件下载。

下图是将要实现的效果截屏:

几个需求点 1. 到边界时的拖动阻尼&回弹效果(见下图)

2. 停止拖动时若为非正常位置,则自动归位(见下图)

3. 快速拖动时,自动切换到下一个Banner(见下图)

4. 左右拖动时,限制页面上下拖动;上下拖动时,限制Banner左右拖动(见下图)

因为该Banner区域即能左右拖动,切换Banner,也能上下拖动进行页面的拖动,所以如果不做限制,则会出现拖动时Banner与页面同时移动的情况。

需要处理的几个需求点明确了,再就是如何通过Axure的函数功能来实现了。本文会用到以下几种函数:

1. TotalDragx和TotalDragy

获取拖动元件从开始到结束的沿X或Y轴移动距离

2. DragTime

获取拖动元件从开始到结束的时间,单位毫秒ms。

3. Math.abs(x)

获取x的绝对值

4. Math.pow(x,y)

获取x的y次幂

接下来,来解决刚才提到的四个需求点

本文先把四个需求的拖动事件和拖动结束事件拆分开,最后会把四个需求的事件写在一起。

(设计原型屏幕尺寸为375*812)

1. 到边界时的拖动阻尼&回弹效果

拖动阻尼效果其实就是随着水平拖动距离(x轴)的增加,Banner的移动距离(Y轴)增量减少。见下图:

这个函数关系可以用函数实现。尝试了几个函数,发现函数y=4*x^(0.5)图像基本满足要求。

再加上条件限制就OK了:

左侧的阻尼效果:

【条件】当Banner模块的X坐标>20时(Banner模块距离屏幕左侧边距为20,以下同)

【动作】拖动时==>>移动Banner模块到达位置:X坐标[[4*Math.pow(TotalDragX,0.5)+20]],Y坐标[[this.y]]

右侧的阻尼效果:

在右侧的时候,阻尼的效果在Banner模块往左拖动时出现,所以其TotalDragX的值会是负数,需要加上绝对值函数。

【条件】当Banner模块的X坐标

【动作】拖动时==>>移动Banner模块到达位置:X坐标[[4*Math.pow(Math.abs(TotalDragX),0.5)-670]],Y坐标[[this.y]]

回弹效果可与自动归位效果函数写在一起,请往下看。

2. 停止拖动时若为非正常位置,则自动归位

拖动结束时,通过判断Banner模块的X坐标来定义归位的Banner位。

归位Banner1的情况:

【条件】当Banner模块的X坐标小于-160

【动作】拖动结束时==>>移动Banner模块到Banner1的正常位,X坐标为20,Y坐标为[[this.y]],动画线性,时间400ms

归位Banner2的情况:

【条件】当Banner模块的X坐标≥-500且≤-160

【动作】拖动结束时==>>移动Banner模块到Banner2的正常位,X坐标为-325,Y坐标为[[this.y]],动画线性,时间400ms

归位Banner3的情况:

【条件】当Banner模块的X坐标大于-500

【动作】拖动结束时==>>移动Banner模块到Banner3的正常位,X坐标为-670,Y坐标为[[this.y]],动画线性,时间400ms3. 快速拖动时,自动切换到下一个Banner

当拖动的距离未达到自动归位的条件时,可通过拖动的速度来判断是否移动至下一个Banner位。

可通过鼠标拖动的距离和拖动的时间来判断。此时需要加入全局变量来记录当前Banner模块的位置数(后面会用到)。

添加全局变量,如名称设为“BannerState”,默认值为1。定义值1=Banner位为1,值2=Banner位为2,值3=Banner位为3。

在上文自动归位的【动作】中,再加入变量设置,结果如下:

归位Banner1的情况:

【条件】当Banner模块的X坐标<-160

【动作1】拖动结束时==>>移动Banner模块到Banner1的正常位,X坐标为20,Y坐标为[[this.y]],动画线性,时间400ms

【动作2】拖动结束时==>设置变量“BannerState”值为1。

归位Banner2的情况:

【条件】当Banner模块的X坐标≥-500且≤-160

【动作1】拖动结束时==>>移动Banner模块到Banner2的正常位,X坐标为-325,Y坐标为[[this.y]],动画线性,时间400ms

【动作2】拖动结束时==>设置变量“BannerState”值为2。

归位Banner3的情况:

【条件】当Banner模块的X坐标>-500

【动作1】拖动结束时==>>移动Banner模块到Banner3的正常位,X坐标为-670,Y坐标为[[this.y]],动画线性,时间400ms

【动作2】拖动结束时==>设置变量“BannerState”值为3。

有了全局变量记录Banner模块的位数,就可以通过拖动的方向(TotalDragX的正负)和拖动的时间(DragTime),来判断需要移动的下一个Banner位数。本文快速拖动定义为400ms内拖动距离为50。

快速拖动自动至Banner1的情况(由Banner2至Banner1):

【条件1】Math.abs(TotalDragX)≥50(移动的距离判断)

and【条件2】DragTime≤400ms(移动的时间判断)

and【条件3】TotalDragX>0(移动的方向判断)

and【条件4】变量BannerState=2(当前Banner位数的判断)

【动作1】拖动结束时==>>移动Banner模块到Banner1的正常位,X坐标为20,Y坐标为[[this.y]],动画线性,时间400ms

【动作2】拖动结束时==>设置变量“BannerState”值为1。

快速拖动自动至Banner2的情况(由Banner1至Banner2):

【条件1】Math.abs(TotalDragX)≥50(移动的距离判断)

and【条件2】DragTime≤400ms(移动的时间判断)

and【条件3】TotalDragX<0(移动的方向判断)

and【条件4】变量BannerState=1(当前Banner位数的判断)

【动作1】拖动结束时==>>移动Banner模块到Banner2的正常位,X坐标为-325,Y坐标为[[this.y]],动画线性,时间400ms

【动作2】拖动结束时==>设置变量“BannerState”值为2。

快速拖动自动至Banner2的情况(由Banner3至Banner2):

【条件1】Math.abs(TotalDragX)≥50(移动的距离判断)

and【条件2】DragTime≤400ms(移动的时间判断)

and【条件3】TotalDragX>0(移动的方向判断)

and【条件4】变量BannerState=3(当前Banner位数的判断)

【动作1】拖动结束时==>>移动Banner模块到Banner2的正常位,X坐标为-325,Y坐标为[[this.y]],动画线性,时间400ms

【动作2】拖动结束时==>设置变量“BannerState”值为2。

快速拖动自动至Banner3的情况(由Banner2至Banner3):

【条件1】Math.abs(TotalDragX)≥50(移动的距离判断)

and【条件2】DragTime≤400ms(移动的时间判断)

and【条件3】TotalDragX<0(移动的方向判断)

and【条件4】变量BannerState=2(当前Banner位数的判断)

【动作1】拖动结束时==>>移动Banner模块到Banner3的正常位,X坐标为-325,Y坐标为[[this.y]],动画线性,时间400ms

【动作2】拖动结束时==>设置变量“BannerState”值为3。4. 左右拖动时,限制页面上下拖动;上下拖动时,限制Banner左右拖动

此需求可以通过判断拖动时的沿X轴与Y轴的距离大小来判断。

若Math.abs(TotalDragX)>Math.abs(TotalDragY),即瞬时水平移动>垂直移动,则限制页面垂直方向的拖动。

若Math.abs(TotalDragX)<math.abs(TotalDragY),即瞬时水平移动<垂直移动,则限制Banner模块的水平拖动。

同时还需要利用变量来记录判断的结果,其相当于一个开关的作用,需加入到上文的【条件】和【动作】中。

添加变量,如名称为“Movable”,默认值为0。定义值0=限制水平拖动,1=限制垂直拖动。

在拖动时,进行TotalDragX和TotalDragY的对比判断,并且置于最前。

【条件】Math.abs(TotalDragX)>Math.abs(TotalDragY)

【动作】拖动时==>>设置变量“Movable”值为1

【条件】Math.abs(TotalDragX)<Math.abs(TotalDragY)

【动作】拖动时==>>设置变量“Movable”值为0

至此,Banner模块的拖动事件以及拖动结束时间基本就可以写全了。合并后如下:

Banner模块拖动时事件(case1~case6)

#先置判断#

case1

if【条件】Math.abs(TotalDragX)>Math.abs(TotalDragY)

【动作】拖动时==>>设置变量“Movable”值为1

case2

if【条件】Math.abs(TotalDragX)<Math.abs(TotalDragY)

【动作】拖动时==>>设置变量“Movable”值为0

#垂直拖动#

case3

if【条件】变量Movable值=0

【动作】拖动时==>>移动:垂直拖动

#水平拖动#

case4(左侧阻尼)

if【条件1】当Banner模块的X坐标>20时

【条件2】变量Movable值=1

【动作】拖动时==>>移动Banner模块到达位置:X坐标[[4*Math.pow(TotalDragX,0.5)+20]],Y坐标[[this.y]]

case5(右侧阻尼)

if【条件1】当Banner模块的X坐标

【条件2】变量Movable值=1

【动作】拖动时==>>移动Banner模块到达位置:X坐标[[4*Math.pow(Math.abs(TotalDragX),0.5)-670]],Y坐标[[this.y]]

case6(无阻尼水平拖动)

if【条件】变量Movable值=1

【动作】拖动时==>>移动:水平拖动

Banner模块拖动结束时事件(case1~case8)

case1

if【条件】无

【动作】设置变量Movable值=0

#自动归位#

case2(归位Banner1的情况)

if【条件】当Banner模块的X坐标<-160

【动作1】拖动结束时==>>移动Banner模块到Banner1的正常位,X坐标为20,Y坐标为[[this.y]],动画线性,时间400ms

【动作2】拖动结束时==>设置变量“BannerState”值为1。

case3(归位Banner2的情况)

else if【条件】当Banner模块的X坐标≥-500且≤-160

【动作1】拖动结束时==>>移动Banner模块到Banner2的正常位,X坐标为-325,Y坐标为[[this.y]],动画线性,时间400ms

【动作2】拖动结束时==>设置变量“BannerState”值为2。

case4(归位Banner3的情况)

else if【条件】当Banner模块的X坐标>-500

【动作1】拖动结束时==>>移动Banner模块到Banner3的正常位,X坐标为-670,Y坐标为[[this.y]],动画线性,时间400ms

【动作2】拖动结束时==>设置变量“BannerState”值为3。

#快速拖动切换#

case5(由Banner2至Banner1)

else if【条件1】Math.abs(TotalDragX)≥50(移动的距离判断)

and【条件2】DragTime≤400ms(移动的时间判断)

and【条件3】TotalDragX>0(移动的方向判断)

and【条件4】变量BannerState=2(移动至的Banner位数的判断)

【动作1】拖动结束时==>>移动Banner模块到Banner1的正常位,X坐标为20,Y坐标为[[this.y]],动画线性,时间400ms

【动作2】拖动结束时==>设置变量“BannerState”值为1。

case6(由Banner1至Banner2)

else if【条件1】Math.abs(TotalDragX)≥50(移动的距离判断)

and【条件2】DragTime≤400ms(移动的时间判断)

and【条件3】TotalDragX<0(移动的方向判断)

and【条件4】变量BannerState=1(移动至的Banner位数的判断)

【动作1】拖动结束时==>>移动Banner模块到Banner2的正常位,X坐标为-325,Y坐标为[[this.y]],动画线性,时间400ms

【动作2】拖动结束时==>设置变量“BannerState”值为2。

case7(由Banner3至Banner2)

else if【条件1】Math.abs(TotalDragX)≥50(移动的距离判断)

and【条件2】DragTime≤400ms(移动的时间判断)

and【条件3】TotalDragX>0(移动的方向判断)

and【条件4】变量BannerState=3(移动至的Banner位数的判断)

【动作1】拖动结束时==>>移动Banner模块到Banner2的正常位,X坐标为-325,Y坐标为[[this.y]],动画线性,时间400ms

【动作2】拖动结束时==>设置变量“BannerState”值为2。

case8(快速拖动自动至Banner3的情况,由Banner2至Banner3)

else if【条件1】Math.abs(TotalDragX)≥50(移动的距离判断)

and【条件2】DragTime≤400ms(移动的时间判断)

and【条件3】TotalDragX<0(移动的方向判断)

and【条件4】变量BannerState=2(移动至的Banner位数的判断)

【动作1】拖动结束时==>>移动Banner模块到Banner3的正常位,X坐标为-325,Y坐标为[[this.y]],动画线性,时间400ms

【动作2】拖动结束时==>设置变量“BannerState”值为3。

以上为所需的全部拖动时事件和拖动结束时事件。

最后说一下如何用Axure发布链接,添加在手机主屏上。

1. 按F6发布,配置如下,点击确定发布,得到发布的链接。

2. 用手机自带的浏览器打开链接,添加到home主屏上。

本文没有贴源文件的用例截图,而是将思考的步骤拆分出来一步步地得到所需的结果(希望大家能看明白,作者注),欢迎一起交流学习,有什么问题建议可以留言。后期有时间再做更多的效果出来分享给大家!

原型下载链接:(上传的原型文件不是完全与这次分享一致,作者后续又加了点特效,Duang!而且作者画图喜欢用动态面板封装母版,层级较多)

链接:https://pan.baidu.com/s/19knKvUCwHAc9GOnEQsxXDg 密码:y6nw

预览链接:(建议用手机自带浏览器打开,添加到主页上再预览)

https://ho1abp.axshare.com

本次分享到此结束,感谢各位同学观看!

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

题图来自 Unsplash ,基于 CC0 协议返回搜狐,查看更多

责任编辑:

xbanner 动画特效设置android,Axure教程:如何实现爱彼迎App首页Banner的切换效果相关推荐

  1. Axure教程:一个通用的app注册/登录页

    今天给大家分享一套APP注册/登录界面模板,其中包括本机登录页面,短信验证登录页面,密码登录页面,人脸登录页面,微博.微信.QQ.支付宝登录页面,注册页面,用户协议和隐私条款.该原型使用简单,交互完善 ...

  2. html首页 slider图片切换效果,jQuery插件Slider Revolution实现响应动画滑动图片切换效果...

    jQuery插件Slider Revolution实现响应动画滑动图片切换效果 2018-12-31 编程之家 https://www.jb51.cc 这是一款非常强大的内容切换插件,它基于jQuer ...

  3. 设置android启动器,教程:在任意 Android 设备上安装 HTC 专属桌面启动器

    HTC 手机的标志性 Sense UI 几乎是伴随着 Android 系统成长起来的,BlinkFeed 作为 Sense 5 的新特性进入了人们的视野之中.经历了几代更新,BlinkFeed 受到更 ...

  4. Axure 教程:知识竞赛/答题app、小程序原型

    今天教大家用中继器做一个知识竞赛/答题app的原型,该原型使用方便简单,制作完成后,所有交互都已经设定好,您只需要在中继器中导入问题.答案.每题的分数即可完成! 原型演示及下载地址:https://a ...

  5. Mockplus教程:分分钟搞定APP首页原型设计

    Mockplus是一款快速原型设计工具,支持包括APP原型在内的多种原型与线框图设计.除了快速,Mockplus广受欢迎更因为它极低的上手门槛.今天小编就为大家展示如何用Mockplus在3分钟内完成 ...

  6. 安卓微信名字彩色字体怎么设置? 微信名字特效设置教程

    近日,微信名字又整出了新活.用户可以把自己的微信名字设置为彩色或者带特效的字.小编直呼内行!那么微信名字怎么弄成彩色字体呢?游综宅马上为您呈上设置教程. 微信名字增加特效 设置彩色字体教程步骤: 1. ...

  7. 精致的动画特效源代码

    动画特效 css简介 代码部分 纯css3云彩动画效果 css3放大镜动画效果 jQuery游戏图片手风琴收缩切换特效 js百叶窗图片3D旋转切换特效 纯CSS3制作飞舞的火箭动画 简单易用的纯CSS ...

  8. 10大炫酷的HTML5文字动画特效欣赏

    文字是网页中最基本的元素,在CSS2.0时代,我们只能在网页上展示静态的文字,只能改变他的大小和颜色,显得枯燥无味.随着HTML5的发展,现在网页中的文字样式变得越来越丰富了,甚至出现了文字动画,HT ...

  9. html5下拉幻灯片插件,支持多种动画特效的响应式jQuery幻灯片插件

    jcSlider是一款效果非常炫酷的支持多种动画特效的响应式jQuery幻灯片插件.该幻灯片插件的文件体积效果,支持各种HTML元素,并且可以使用内置的60多种CSS3动画效果来制作幻灯片的过渡动画. ...

最新文章

  1. 在路由器上设置虚拟ftp服务器,怎么在路由器上开启ftp服务器配置
  2. tsf php,TSF:腾讯推出的 PHP 协程方案
  3. c++   string类
  4. mysql zip 安装
  5. MATLAB GUI程序设计中ListBox控件在运行期间消失的原因及解决方法
  6. 爬虫项目——xpath练手(1)
  7. 【渝粤教育】国家开放大学2018年春季 0248-22T电工电子技术 参考试题
  8. Debian忘记密码修改
  9. linux总线驱动程序,Linux驱动程序中的platform总线详解
  10. php 工业通讯录,PHP 制作通讯录(六)
  11. 使用Intellij Idea生成可执行文件jar,转为exe文件步骤
  12. jsp代码没有错,但是总是有红叉(一招解决)
  13. 机器视觉技术在当前各行各业中的应用
  14. 新手入门|计算机科普
  15. h, w = img.shape什么意思?
  16. 怎么编写微博爬虫 图片爬虫
  17. 前装车联网常见术语解释
  18. MySQL 部门员工工资表 综合练习
  19. 鸿蒙系统研究之五:替换 AOSP 预编译库,关闭 SELinux
  20. Greedy search与beam search

热门文章

  1. seven days later
  2. 【codevs1166】【noip07TG】矩阵取数游戏,新的开始
  3. cpp mqtt paho 使用_MQTT--Paho C Client 的实现和详解
  4. 怎样下载python模块sublime text3中_python安装环境配置、python模块添加、sublime text编辑器配置...
  5. 2017.9.19 Gcd 思考记录
  6. 【Openstack】实录手动部署Openstack Rocky 双节点(6)- Horizon
  7. Canny边缘检测算法原理及其VC实现详解(一)
  8. 简单地理解 Python 的装饰器
  9. 未来函数在线检测_嵌入式实时操作系统任务栈溢出检测原理
  10. java获取语言_如何在java中获取语言环境对象?