圖層 Layers丨Framer 文檔 Code

Code

要是用過任何一個設(shè)計軟件兒,那對圖層的概念應(yīng)該很熟悉了。沒有給圖層添加內(nèi)容前,一個圖層就是一個矩形。圖層里也可以包含圖片、視頻、音頻、文本等。

指定 Inserting & Targeting

插入圖層跟在設(shè)計模式中畫個東西,再切回代碼模式一樣簡單。
在設(shè)計模式中添加了圖層并指定 targetable 后,就已經(jīng)開始寫代碼了。要定位在Framer中添加的圖層,只用給圖層插入名稱,添加要添加的圖層。

# 給my_layer圖層指定一個動畫
my_layer.animate
  y: 200
  options:
    time: 1
   curve: Bezier.ease 

屬性 Properties

圖層在Framer中屬性種類還是挺多的。所有的屬性都可以直接用代碼寫。在設(shè)計模式中創(chuàng)建的圖層定義屬性后,在代碼模式中還可以覆蓋原來的屬性的。比如設(shè)計模式創(chuàng)建了畫板A,并且給背景填充了紅色,在代碼模式中你可以再覆蓋成藍色:

A.backgroundColor = "#28affb"

瀏覽窗口中看到的背景色就變成了藍色。

圖層的屬性都可以做成可交互動畫,定義兩個不同的角度、縮放值、透明度就可以實現(xiàn)旋轉(zhuǎn)、縮放、隱藏等。

# 圖層layerB的圓角4pt
layerB.borderRadius = 4

# 圖層layerB的角度是45度
layerB.rotation = 45

# 圖層layerB的不透明度是50%
layerB.opacity = 0.5

# 圖層layerB的縮放是50%大
layerB.scale = 0.5

一個熟悉圖層屬性的方法是使用自動代碼,自動代碼什么意思呢,就是說Framer已經(jīng)把動畫、交互等變成了選項,只需要從窗口最左側(cè)的 Animate、State、Event、Snippet里選中你需要的動畫、狀態(tài)、事件等,代碼那兒就會自動寫好你剛選的操作和屬性。

位置 Positioning

圖層位置可以直接使用x、y定義,這倆屬性是指圖層左上那點到屏幕左上的距離。

# 圖層layerA的位置
layerA.x = 200
layerA.y = 200

圖層也可以用動態(tài)屬性定位。假設(shè)你想定圖層B相對與圖層A的位置,又不想手動計算倆圖層的中心點,可以用 midX、midY這類屬性,文檔中又全部關(guān)于定位屬性的說明。

# 圖層B的X軸對齊圖層A的x軸中心 
layerB.x = layerA.midX
 
# 圖層B的y軸對齊圖層A的y軸中心 
layerB.y = layerA.midY

Align 屬性可以在父層級內(nèi)居中 (center),如果圖層沒有父級那使用Align 標簽時對齊的是屏幕 。parent-child(父級 - 子級)層級關(guān)系可以在設(shè)計模式中定義,代碼模式中同樣可以覆蓋。圖層還可以只定水平方向或垂直方向的相對位置。下面是所有的對齊屬性:

  • Align.left (x)
  • Align.right (x)
  • Align.top (y)
  • Align.bottom (y)
  • Align.center (x and y)
# layerB 父級是 layerA 
layerB.parent = layerA
 
# 定義 layerB 對齊父級的右下角 
layerB.x = Align.right
layerB.y = Align.bottom

層級 Hierarchy

設(shè)計模式中的組對應(yīng)代碼模式中的層級,同樣代碼模式中的層級可以覆蓋設(shè)計模式中的層級。被放在一個圖層中的圖層是子級 child,上層容器是父級 parent,圖層從父層級繼承屬性,如不透明度、位置。

# 兩個方法定義層級:layerB的父級是layerA、layerA添加一個子級layerB
layerB.parent = layerA
layerA.addChild(layerB)

如果需要把一個圖層放在另一個圖層的前面,可以用placeBefor,放在后面用 placeBehind

layerA = new Layer
layerB = new Layer
 
# layerB 在 LayerA 上面 
layerB.placeBefore(layerA)

暫時沒看到啥變化

圖層類型 Layer Types

圖層幾乎可以是背景、圖片、視頻、文字等等。在設(shè)計模式中可以添加標準圖層(就是指容器啦),然后在設(shè)計模式中將視頻、音頻插入到圖層。
例如要插入一個視頻,直接將文件拖拽到Framer的代碼編輯其中。

# 視頻
video = new VideoLayer
  video: "fish.mp4"

文本圖層 Text Layers

可以直接在設(shè)計模式中添加文本,要給文本添加交互改變文字或顏色之類的,在代碼模式中用 TextLayer 圖層。文本圖層又自己的屬性,寬度高度可以自動計算也可以手動設(shè)置,取決于文字和樣式。

# 新建一個文本圖層
title = new TextLayer
  text: "Hello!"

基本上文字樣式來源CSS。全部屬性查看文檔。

# 創(chuàng)建文本圖層
title = new  TextLayer
  text: "Hello!"
  fontSize: 64
  fontWeight: 600
  x: Align.center
  y: Align.center

可以用強大的模版控制文字的某一部分,或者做動畫。用{ }標簽框出文本的值。

# 用模板標簽創(chuàng)建文本圖層,speed 是可以被替換的值
layerA = new TextLayer
  text: "{speed}KM/h"

# 再設(shè)置要用一個什么值替換 speed 
layerA.template =
  speed: 50

# 如果只有一個值可以用這個寫法,如果是有多個值就必需用??的寫法,不然不知道對應(yīng)的值是什么
layerA.template = 50

# 用這個兩個寫法預(yù)覽窗口中都會顯示 "50KN/h"

文本模版還可以用來設(shè)置固定的格式和計算各種值。

# 創(chuàng)建個文本圖層模板,這次來定兩個值
  layerA = new TextLayer
  text:"{speed}{unit}/h"

# 設(shè)置模板的格式,值有兩位小數(shù)點
layerA.templateFormatter =
  speed: (value) ->
    Utils.round(value, 2)

# 值的動畫從 0 到 100
layerA.animate
  template:
    speed: 100
    unit: "KM"

單個標簽可以用簡寫

layerA.templateFormatter = (value) ->
  Utils.round(value, 2)

看完也不知道別的格式要咋定義啊!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容