FramerX从入门到放弃

最近研究了一下framer新出的工具framerX,写了一个简单的控件。本人水平有限,仅从一个懂一点代码的设计师角度来谈谈framerX使用中的一些感受和弃坑的理由。

framerX相对于之前工具的改进

1.放弃了coffeescript 改用ES6和react框架

2018年已经没什么人用coffeescript了,ES6和react是当下的主流,这样对于已经熟悉这套体系的人来说没有什么学习的成本。react框架的特性也使得组件可以更加模块化的去编写,使得UI更加规范。

2.组件库的建立

在这里你可以找到别人已经编写好了的控件,然后去下载使用,你也可以修改组件中一些设置好的参数来达到你想要的效果。值得一提的是,你从控件库下载的控件只是能在该项目中使用,这种方法有点像前端的npm安装包。当然安装起来也很方便,点击“install”即可。控件页面也有作者编写的相关介绍和使用方法。

FramerX提供了大量的组件库

3.使用外部编辑器

官方推荐Visual Studio 编辑器来编辑,当然你还可以使用其他顺手的编辑器来打开项目文件。对于习惯了某些代码编辑器的人来说这个比原先内置编辑器要好用很多。

FramerX控件编写实例

1.首先新建一个code模块

输入控件的名称,在Components中选择‘from Code’,点击‘Create and Edit’ ,如果你有安装Visual Studio会直接打开一个tsx的文件,编写代码就在这里进行。保存文件你可以在Components中看到新建的控件和预览图,如果没有那说明代码有错误,检查下代码。

2.给出可控制的变量和默认值

framerX提供了ControlType的方法你可以将一些参数作为可控制的变量来给使用者进行修改,如图所示,我将边框和阴影的颜色、字的颜色、间距的大小和选择框内容作为参数呈现给用户。react中的defaultProps可以设定了这些变量的初识值。其中宽度不需要用户去输入只要拉伸控件即可获得,所以不需要给使用者输入变量。

 static propertyControls: PropertyControls = {
        paddingSize: { type: ControlType.Number, title: "padding" },
        color: { type: ControlType.Color, title: "color" },
        fontColor: { type: ControlType.Color, title: "fontcolor" },
        listDatas:{ type: ControlType.String, title: "selectData" },
    };
 static defaultProps = {
        width: 300,
        color: '#D9BFEF',
        paddingSize: 20,
        fontColor:"#333",
        listDatas:"Sketch,Photoshop,FramerX,React"
    };

3.控制react中state来进行交互

与之前framer的编写方式不同,react需要先给元素绑定事件和state,通过事件去触发函数,然后函数去改变state从而使得元素产生变化。如图所示,将用户输入的列表内容变成数组后传到state中去,然后下拉框的列表根据state中的该数组进行遍历渲染。

state = {
        width: this.props.width,
        listDatas: this.props.listDatas.split(","),
        tagDatas: [],
        toggleDropDown:false,
    };
{this.state.listDatas.map((listdata, index) => {
   return <div onClick={() => { this.handleListClick(index) }}
            key={index}
            style={{paddingTop: this.props.paddingSize / 3 * 2,
                        paddingBottom: this.props.paddingSize / 3 * 2,
                        color: this.props.fontColor, }}>
             {listdata}
           </div>
})}

之后给点击事件绑定函数,通过函数去修改state中的列表数组,达到让点击list改list消失,输入框中显示对应的list内容。同时点击输入框标签中的删除按钮需要将标签删掉并把标签的值返回到下拉列表中。

    handleListClick(key) {
        let tagDatasNow = this.state.tagDatas
        tagDatasNow.push(this.state.listDatas[key])
        let arrData = this.state.listDatas
        delete arrData[key] //!!!不能用splice 因为splice会造成key与新的state数组的值不匹配
        this.setState({
            listDatas: arrData,
            tagDatas: tagDatasNow
        })
    }
    handleTagClick(e, key) {
        e.stopPropagation();//事件冒泡 防止与input框事件冲突
        let arrData = this.state.listDatas;
        arrData.unshift(this.state.tagDatas[key]);
        let tagDatasNow = this.state.tagDatas;
        delete tagDatasNow[key]
        this.setState({
            listDatas: arrData,
            tagDatas: tagDatasNow,
            toggleDropDown: true,
        })
    }
4.完善交互细节

主要的功能实现后需要给细节完善下,比如下拉框列表内容为空时,下拉框需要隐藏;点击输入框展开下拉框同时点击标签删除按钮时需要添加事件冒泡;输入框默认值在内容不为空时要隐藏,为空时要显示等等。

5.编写样式

framerX给出的官方写法为建立一个常量里面存储样式的,然后在对于元素里面用style去引用这些样式,对于某些变量则直接写在style里面,这有些类似于react-native的写法。

const input: React.CSSProperties = {
    display: "flex",
    alignItems: "center",
    justifyContent: "row",
    textAlign: "center",
    overflow: "hidden",
    borderRadius: 6,
    transition: 'all .5s',
    backgroundColor: '#fff',
    flexWrap: 'wrap',
    transition: 'all .5s',
};

const container: React.CSSProperties = {

};

const dropDownContainer: React.CSSProperties = {
    background: '#fff'
    borderRadius: 6,
    transition: 'all .5s',

};

后来发现其实可以找到项目对应的目录建一个css文件,然后就可以用css来编写样式了,这样会方便许多。当然这个项目里面你也可以通过npm安装其他的库然后来引用这些库。

在目录中新建一个css文件然后在code文件中引用

import * as React from "react";
import { PropertyControls, ControlType, FramerAppleThunderboltDisplay } from "framer";
require('./css/style.css'); //这里引用css
import "bootstrap";

效果预览

6.发布控件

发布控件同生成控件的操作类似,点击发布即可发布到控件库中。你可以编辑README文件,具体的语法可以参考markdown语言的规范。

以下为实例中控件的名称,您可以在framerX的store里面去搜索然后安装下来体验下,代码写的搓,且没有备注,大家见谅>_<

FramerX弃坑原因

1.组件之间不能通信

目前发现只能做控件内的交互行为,如果使用多个控件且需要控件之间有相互影响的交互行为则很难进行。目前只能将一个页面编写成一个大的控件然后在控件中引入小的模块才能解决这个问题。

2.动画支持不够友好

与之前framer集成了许多动效的糖果包不同,framerX则没有找到做动效的官方解决办法,目前需要引入css做动效或者引入其他的一些react动效库来解决这些问题,当然你也可以自己去写react动画,但这样无疑使得制作动效的成本变的高了许多。目前看来framerX更像是一个制作UI的工具而非动效和原型工具。

3.调试不方便

保存代码之后界面上是实时更新的,但需要打开预览然后才能打开调试界面,调试的工具也没有正常浏览器的好用。当然出错后界面上会有红字写出出错的原因。但相对于react的其他环境,这个报错的内容还是略显简单。

总结

FramerX更适合纯UI的设计工作,因为可以将UI控件做统一规范化的处理,在很多方面做UI其实比sketch更好用。在原型和动效方面目前可视化界面中只提供了link和scroll的方法,其他交互需要自己去写,但组件之间却不能通信,使用复杂的方法去组合控件还不如直接在代码环境去编写。因而作为一个经常做动效的交互设计师这个不太符合当前的需求。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355