All Articles

Framer js

Framer code library - 프레이머 코드 정리 🐶

Basic code sample

레이어 생성

layerA = new Layer
	scale:0.5
	opacity: 0.5
	x:0
	y:0
	backgroundColor: "#aaa"

ani = new Animation
	layer:layerA
	properties:
		scale:1.5
		opacity:1
		backgroundColor:"skyblue"
		borderRadius: "100%"
		rotation:360
		x:Align.center
		y:Align.center
	//curve, time 값은 properties 와 같은 선상에
	curve:"spring(67, 8, 3)"
	time:0.8

default animation

기본 애니메이션 설정

Framer.Defaults.Animation = 
	curve: "spring(80,10,4)"
	time: 0.5

psd import

psd 파일 import

//PSD file import 하면 자동으로 생기는 코드
psd = Framer.Importer.load("imported/sample@1x")

//psd 레이어를 globalLayers로 설정
Utils.globalLayers(psd)

//가변사이즈 생성
Device.originX = 0
Device.originY = 0
psdWidth = 750
psdHeight = 1344
Device.scale = Screen.width / psdWidth

//또는

Device.width = Screen.width
Device.scale = Screen.width / psdWidth

animation reverse

애니메이션 reverse 반복

//애니메이션 반복 animation reverse toggle repeat
rec = ani.reverse()
ani.start()

//ani 종료시 revers 저장해둔 rec 실행
ani.onAnimationEnd ->
	rec.start()

//rec 종료시 다시 ani start : 무한반복
rec.onAnimationEnd ->
	ani.start()

animation states

애니메이션 상태 추가

case 01 - states.next()

layer = new Layer
	x:100
	y:100
	scale:0.5

//layer states add 레이어에 상태 추가
layer.states.add
	one:
		x:400
		scale:1
		rotation:180
		backgroundColor: "salmon"
	two:
		y:400
		x:300
		backgroundColor: "pink"
		borderRadius:"100%"
		rotation:-180
		scale:1.3
	three:
		backgroundColor:"skyblue"
		borderRadius:0
		rotation:180
		y:600
		x:200

//default states set 기본 상태 설정
layer.states.switch("one")

//click function 클릭할 때마다 다음 states 전환
layer.onClick ->
	layer.states.next()

case 02 - if / else if

//default states set 기본 상태 설정
layer.states.switch("one")

//현재 states가 무엇인가에 대해 조건문
layer.onAnimationEnd ->
	if layer.states.current is "one"
		layer.states.switch("two")
	else if layer.states.current is "three"
		//default로 가도록
		layer.states.switch("default")
	else
		layer.states.next()

case 03 - onStateDidSwitch

layer.onClick ->
	layer.states.switch("one")

//현재 states가 변하면 default 값으로 돌아감
layer.onStateDidSwitch ->
	layer.states.switch("default")

Touch & Drag Event

터치이벤트

.onTouchStart (event, layer) ->
	this.animate
		rotation: 360
.onDragMove ->

.onDragEnd ->

ETC

기타 자주 사용하는 문법들

//PSD import - layers임, s 꼭 붙이스
Utils.globalLayers(psd)

//random color 랜덤컬러
layer.backgroundColor = Utils.randomColor(1)
layer.backgroundColor = Utils.randomColor(0)

//states setting at start "switchInstant" : 시작할 때 아웃인상태로 시작해라
circle.states.switchInstant("out")

//click hinting area 클릭영역 보라색선 안보이게 ★★★
Framer.Extras.Hints.disable()

클릭할때마다 영역에 보라색 선이 보이는 문제
클릭할수 있는 영역을 힌트로 제공하는 기능

//delay
Utils.delay 1, ->

//clip 클리핑 마스크 : 자식요소가 더 크더라도 부모 요소만큼 보여줌
clip.true

//해당 레이어 뒤로
layerC.placeBeheind(layerB)

//뒤로
this.sendToback()

//앞으로
this.bringToFront()

//child 자식요소
layerA.parent = layerB
layerB.addChild(layerA)
layerA.superLayer = layerB

//drag set 드래그 가능
layer.draggable.enabled = true

//drag area limitation 드래그 영역 제한
layer.draggable.enabled = true

//vertical drag lock : 세로 드래깅 락 (좌우로만 움직임)
layer.draggable.vertical = false

//constraints 드래그 할수 있는 영역
layer.draggable.constraints = 
	width:Screen.width
	height:Screen.height

//onMove 레이어가 움직일때 실행
layer.onMove ->
	//velocity 속도
	print layer.draggable.velocity 
	//direction 방향
	print layer.draggable.direction 
	//angle 각
	print layer.draggable.angle 

//screenFrame 현재 디바이스의 절대좌표, 그만큼을 빼서 붙도록 함
x:this.x - this.screenFrame.x
y:this.y - this.screenFrame.y

//modulate 모듈레이트
layer.opacity = Utils.modulate(layer.x, [0,Screen.width/2], [1,0], true)
첫번째 범위 : x좌표값이 0 부터 화면 width 의 절반으로 변할때
두번째 범위 : 바꿀값 (screen width 1/2에 가까워질수록 0으로 투명해짐)

//ex.Tinder 틴더
card.opacity = Utils.modulate(card.midX, [Screen.width/2, 0], [1,0], true)
card.rotation = Utils.modulate(card.midX, [Screen.width/2, 0], [0, -10], true)

//for 반복문
for i in[0...5]

//center 중앙정렬
layer.center()

//scroll contentInset padding 스크롤의 패딩 값
scroll.contentInset =
	left: -215
	right: -215