介绍
如今,您无需使用Adobe Photoshop或Gimp之类的图像编辑软件即可为移动应用创建用户界面模型。 符合Google的Material Design语言的应用通常仅由简单的几何形状,纯色,图标和文本组成。 仅使用代码即可轻松创建此类应用程序的用户界面原型。
在这个由两部分组成的系列文章中,您将学习Framer的基础知识, Framer是一个开放源代码Javascript框架,可让您以编程方式创建互动和逼真的原型,并为iOS和Android应用提供漂亮的动画。
先决条件
要遵循本教程,您将需要:
- Framer框架的最新版本
- Google Chrome或任何其他基于WebKit的浏览器
- Python 2.7或更高版本
- 文字编辑器
- 基本了解HTML,CSS和Javascript
1.初始设置
步骤1:建立HTML网页
因为Framer原型不过是用HTML,CSS和Javascript编写的普通网页,所以我们从创建空白HTML页面开始。 我将这个页面称为index.html 。
<!doctype html>
要在此页面上使用Framer的API,您应该添加一个script
标记,该标记指向您下载的framer.js文件。
步骤2:建立HTTP伺服器
由于Framer利用协议相对URL加载各种资源,因此您不能简单地双击创建的文件以在浏览器中打开它。 这样做会导致网络错误。 相反,您应该通过HTTP服务器访问它。
为了快速创建能够为您的网页提供服务的HTTP服务器,您可以使用Python的SimpleHTTPServer
模块。
打开终端,导航到包含您创建的网页的目录,然后执行以下命令。
python -m SimpleHTTPServer 8000
这将启动默认情况下在端口8000上运行的服务器。 现在,您可以通过访问http:// localhost:8000 /打开Google Chrome浏览器并查看您的网页。
步骤3:绘制装置
为了使您的原型在桌面浏览器上看起来逼真,您应该在移动设备的框架内显示其所有元素。 利用Framer,您可以绘制各种流行的移动设备,例如iPhone,Nexus手机和平板电脑,iPad,Apple Watch等。 对于本教程,我将使用粉红色的iPhone 5c。
要绘制设备,您首先应该创建DeviceComponent
类的实例并调用其setupContext
方法。 然后,您可以将其deviceType
更改为您选择的设备。 将另一个script
标签添加到您先前创建HTML页面中,并向其中添加以下代码:
var device = new Framer.DeviceComponent();
device.setupContext();
device.deviceType = "iphone-5c-pink";
刷新网页时,您应该在浏览器窗口中看到以下内容:
如果需要,还可以通过在deviceType
字符串的末尾添加-hand来呈现握住设备的手。 如果设备看起来太大或太小,可以使用setDeviceScale
方法更改其大小。
// Display a hand with the device
device.deviceType = "iphone-5c-pink-hand";
// Change the size
device.setDeviceScale(0.3);
这样就完成了初始设置。 结果应如下所示:
2.工程图框,文本和图像
Framer原型中的几乎每个元素都将是Layer
类的实例。 Layer
与HTML div
元素非常相似,可用于绘制矩形,图像和文本。
要创建Layer
您必须调用其构造函数并将其传递给JSON对象,该对象定义Layer
各种属性。 创建Layer
,通常需要指定其尺寸( width
和height
)和位置( x
和y
)。 您还可以使用centerX
和centerY
方法将其水平和垂直居中。 这是有关如何创建Layer
的示例。
// Draw a white square
var whiteSquare = new Layer(
{
backgroundColor: "#FFFFFF",
width: 400,
height: 400,
y: 20
}
);
// Center horizontally
whiteSquare.centerX();
要显示图像,您必须创建一个Layer
其image
属性指向要显示的图像文件。
// Draw an image
var pic = new Layer(
{
image: "painting.jpg",
width: 400,
height: 400,
y: 440
}
);
pic.centerX();
要显示文本(或HTML),可以使用html
属性。 您还可以使用其style
属性将CSS样式添加到Layer
。
// Write text
var text = new Layer(
{
width: Screen.width,
height: 100,
y: 860,
html: "This is a prototype",
style: {
fontSize: "50px",
textAlign: "center",
color: "#f1f2f3",
paddingTop: "18px"
}
}
);
有了我们在此步骤中创建的三个Layer
对象,原型将如下所示:
3.添加事件
您可以使用on
方法将事件处理程序附加到Layer
。 on
方法非常类似于Javascript的addEventListener
方法。 它以事件的名称为第一个参数,以函数为第二个参数。
将click
处理程序添加到上一步中创建的text
层的方法如下:
text.on("click", function(){
text.html = "I was clicked";
});
在本教程的后面,您将看到更多的事件处理程序。
4.添加动画
Framer凭借其先进的动画效果在竞争中脱颖而出。 使用Framer,您可以使用animate
方法来为Layer
对象的几乎每个属性animate
。 animate
方法将指定应设置动画的属性的JSON对象作为输入。
JSON对象还可以包含动画的各种配置详细信息,例如其持续时间和行为。
作为示例,让我向您展示如何创建动画, whiteSquare
是通过更改其borderRadius
将whiteSquare
变成一个圆形。
// Animate borderRadius
whiteSquare.animate({
properties: {
borderRadius: whiteSquare.width/2
},
time: 2, // duration is two seconds
curve: "ease-in-out" // apply easing
});
这是另一个示例,显示了如何在单击whiteSquare
的阴影时为其设置动画。
// Animate Shadow
whiteSquare.on("click", function(){
// Set the shadow color first
whiteSquare.shadowColor = "#555555";
whiteSquare.animate({
"properties": {
shadowBlur: 40,
shadowSpread: 10,
}
});
});
请注意,只有那些值为数字的属性才可以设置动画。 由于shadowColor
不是数字,因此应在调用animate
之前进行animate
。
5.使用状态
如果您使用的是Framer,则可能正在尝试创建具有很多动画的高度交互的原型。 在Layer
上多次调用animate
方法可能会很乏味。 相反,您可以将状态列表与Layer
相关联,并仅在需要时在状态之间切换。
每个Layer
都有一个states
属性,该属性是LayerStates
类的实例。 要将新状态添加到Layer
,请在states
属性上调用add
方法。 在下面的代码片段中,我们向pic
对象添加了两个新状态。
// Add two states
pic.states.add({
"myState1" : {
borderRadius: 100
},
"myState2": {
borderRadius: 200
}
});
添加状态不会立即导致视觉变化。 但是,当Layer
从一种状态切换到另一种状态时,您将能够看到动画。 要更改Layer
的states
,请在Layer
对象的states
属性上调用switch
方法。 以下代码段向您展示了单击pic
时如何更改其状态。
// Change state when clicked
pic.on("click", function() {
// Switch to myState2
pic.states.switch("myState2");
});
要遍历Layer
的状态,可以调用其states
对象的next
方法。
pic.states.next();
6.改变背景
要将背景颜色或图像添加到原型中,请创建BackgroundLayer
对象。 BackgroundLayer
是一个Layer
其尺寸等于设备屏幕的尺寸。 这是添加灰色BackgroundLayer
:
var bg = new BackgroundLayer({
backgroundColor: "#BDBDBD"
});
因为Framer原型只是一个普通HTML页面,所以您也可以使用CSS对其进行样式设置。 例如,如果您对设备周围的白色颜色感到不满意,则可以通过对网页的body
标签应用新样式来更改它。
进行了这些更改之后,动画完成后,原型将如下所示:
7.处理拖动操作
要使Layer
可拖动,您要做的就是将其draggable.enabled
属性设置为true
。
// Allow dragging
pic.draggable.enabled = true;
如果Layer
是可拖动的,则可以向其添加事件侦听器,以响应各种与拖动相关的事件,例如dragend
和dragmove
。 例如,这是一个dragend
事件处理程序,可将pic
返回其原始位置:
// Handle dragend
pic.on("dragend", function(){
pic.animate({
"properties": {
x: Screen.width/2 - pic.width/2, // Place at Center
y: 440 // Original Y
}
});
});
结论
在本教程中,您学习了使用Framer为移动应用程序创建交互式原型的基础。 由于Framer原型是静态网页,因此您可以将其上传到任何HTTP服务器以与您的朋友和客户共享。
我还想告诉您,如果您具备Adobe Photoshop的能力,则无需以编程方式创建原型的用户界面元素。 您可以在Photoshop中设计布局,并将PSD中的图层组转换为Framer的Layer
对象。 您还可以选择购买和使用Framer Studio ,它是专门为处理Framer项目而构建的IDE。
要了解有关Framer框架的更多信息,可以参考Framer的文档 。 在本系列的第二部分中,我将更深入地研究导航,滚动和动画。