Framer 10天交互動效特訓 - 6

Framer 特訓6

第二個案例實踐饭庞,圖片流的滾動界面

最終效果

我們先用 Sketch 把靜態(tài)界面做出來,導入Framer沽损。注意只有建組的元素才能被 Framer 操作袖外。導入圖片推薦大家使用 Craft 插件。

靜態(tài)圖

操作重點:

  1. 滾動的圖片流
  2. 大圖的顯示
  3. 大圖的隱藏
  4. 實際交互優(yōu)化

滾動的圖片流

Framer 15天交互動效特訓 - 4 中我們討論過了 ScrollComponent 組件略吨,這里直接使用即可集币。

# Define variables
navBar = sketch.navBar
images = [sketch.img1, sketch.img2, sketch.img3, sketch.img4, sketch.img5]

# Interaction part
# 滾動區(qū)域設(shè)置
scroll = ScrollComponent.wrap sketch.content
scroll.scrollHorizontal = false
content = [navBar, scroll]

注意事項

  1. 學會使用數(shù)組,方便一次性把事件給所有需要綁定的元素

大圖的顯示

當點擊縮略圖后翠忠,大圖顯示鞠苟。注意此時,其他所有內(nèi)容要隱藏秽之。

# 給所有圖片綁定點擊事件
for image in images
    image.borderRadius = 6
    
    # 監(jiān)聽點擊事件
    image.on Events.Click, (e, layer)->
        # 復制當前圖片
        curImage = layer.copy()
        # 移動到原圖片位置
        curImage.parent = sketch.screen
        curImage.placeBehind(navBar)
        curImage.x = layer.screenFrame.x
        curImage.y = layer.screenFrame.y
        # 隱藏原圖片
        layer.visible = false
        
        # 移動復制圖片至中心
        dis = Math.abs(Screen.midY - image.midY)
        # 根據(jù)移動距離修改移動時間
        if dis < image.hei  / 4
            curImage.animate
                midY: Screen.height / 2
                scale: Screen.width / curImage.width
                options: 
                    time: .3
                    delay: .2
                    curve: Spring(damping: .8)
        else
            curImage.animate
                midY: Screen.height / 2
                scale: Screen.width / curImage.width
                options: 
                    time: .6
                    delay: .2
                    curve: Spring(damping: .8)          
        
        # 隱藏其他元素
        for element in content
            element.animate
                opacity: 0
                options: 
                    time: .2
        
        # 禁止點擊其他元素
        for image in images
            image.ignoreEvents = true   

注意事項

  1. layer.copy() 用于復制原圖層当娱,避免直接操作原圖層帶來的麻煩。
  2. screenFrame 記錄圖層的絕對定位位置

大圖的隱藏

再次點擊大圖后考榨,大圖消失跨细,隱藏內(nèi)容再次顯示。

        # 點擊大圖返回
        curImage.on Events.Click, ->
            curImage.animate
                scale: 1
                x: layer.screenFrame.x
                y: layer.screenFrame.y
                options:
                    time: .2
        
            # 顯示其他元素
            for element in content
                element.animate
                    opacity: 1
                    options: 
                        time: .2
            
            # 顯示原圖層董虱,刪除復制圖片圖層
            curImage.on Events.AnimationEnd, -> 
                layer.visible = true
                curImage.destroy()
                # 允許點擊其他元素
                for image in images
                    image.ignoreEvents = false                                      

注意事項

  1. 監(jiān)聽動畫事件扼鞋,在動畫結(jié)束后申鱼,再顯示其他元素
  2. 刪除復制的圖層, 使用 destroy() 函數(shù)

實際交互優(yōu)化

很多操作上的細節(jié)愤诱,只有用代碼寫出來的時候才能發(fā)現(xiàn),這也是我覺的 Framer 相比視頻動效的一個優(yōu)點捐友。

第一個優(yōu)化是禁止點擊事件淫半。雖然內(nèi)容隱藏了,視覺上看不到匣砖,但是點擊該區(qū)域還是會觸發(fā)事件科吭,因此需要手動禁用。

# 禁止點擊其他元素
        for image in images
            image.ignoreEvents = true       

第二個是根據(jù)圖片距離屏幕中心的距離猴鲫,來設(shè)置移動時間的長短对人。距離長移動 0.6s,距離短移動 0.3s.

# 根據(jù)移動距離修改移動時間
        if dis < image.hei  / 4
            curImage.animate
                midY: Screen.height / 2
                scale: Screen.width / curImage.width
                options: 
                    time: .3
                    delay: .2
                    curve: Spring(damping: .8)
        else
            curImage.animate
                midY: Screen.height / 2
                scale: Screen.width / curImage.width
                options: 
                    time: .6
                    delay: .2
                    curve: Spring(damping: .8)      

第三個是 time 和 curve 數(shù)值的設(shè)置拂共,這個需要你不斷調(diào)試牺弄,一直到你視覺上滿意的程度。短動畫盡量控制在 0.3s 左右宜狐。有時需要使用 delay 讓動畫有次序势告,避免 2 個動畫同時發(fā)生蛇捌,讓視覺上產(chǎn)生沖突。

完整代碼


# Coded by Joey in April, 2017

# Import file "photoFeed"
sketch = Framer.Importer.load("imported/photoFeed@1x")

# Define variables
navBar = sketch.navBar
images = [sketch.img1, sketch.img2, sketch.img3, sketch.img4, sketch.img5]

# Interaction part
# 滾動區(qū)域設(shè)置
scroll = ScrollComponent.wrap sketch.content
scroll.scrollHorizontal = false
content = [navBar, scroll]

# 給所有圖片綁定點擊事件
for image in images
    image.borderRadius = 6
    
    # 監(jiān)聽點擊事件
    image.on Events.Click, (e, layer)->
        # 復制當前圖片
        curImage = layer.copy()
        # 移動到原圖片位置
        curImage.parent = sketch.screen
        curImage.placeBehind(navBar)
        curImage.x = layer.screenFrame.x
        curImage.y = layer.screenFrame.y
        # 隱藏原圖片
        layer.visible = false
        
        # 移動復制圖片至中心
        dis = Math.abs(Screen.midY - image.midY)
        # 根據(jù)移動距離修改移動時間
        if dis < image.hei  / 4
            curImage.animate
                midY: Screen.height / 2
                scale: Screen.width / curImage.width
                options: 
                    time: .3
                    delay: .2
                    curve: Spring(damping: .8)
        else
            curImage.animate
                midY: Screen.height / 2
                scale: Screen.width / curImage.width
                options: 
                    time: .6
                    delay: .2
                    curve: Spring(damping: .8)          
        
        # 隱藏其他元素
        for element in content
            element.animate
                opacity: 0
                options: 
                    time: .2
        
        # 禁止點擊其他元素
        for image in images
            image.ignoreEvents = true       
            
        # 點擊大圖返回
        curImage.on Events.Click, ->
            curImage.animate
                scale: 1
                x: layer.screenFrame.x
                y: layer.screenFrame.y
                options:
                    time: .2
        
            # 顯示其他元素
            for element in content
                element.animate
                    opacity: 1
                    options: 
                        time: .2
            
            # 顯示原圖層咱台,刪除復制圖片圖層
            curImage.on Events.AnimationEnd, -> 
                layer.visible = true
                curImage.destroy()
                # 允許點擊其他元素
                for image in images
                    image.ignoreEvents = false                          

Reference

Youtube 原教程地址:https://www.youtube.com/watch?v=kJYI4oYrHik
Framer 原型展示:https://framer.cloud/UegKC

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末络拌,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子回溺,更是在濱河造成了極大的恐慌春贸,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件馅而,死亡現(xiàn)場離奇詭異祥诽,居然都是意外死亡,警方通過查閱死者的電腦和手機瓮恭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門雄坪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人屯蹦,你說我怎么就攤上這事维哈。” “怎么了登澜?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵阔挠,是天一觀的道長。 經(jīng)常有香客問我脑蠕,道長购撼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任谴仙,我火速辦了婚禮迂求,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘晃跺。我一直安慰自己揩局,他們只是感情好,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布掀虎。 她就那樣靜靜地躺著凌盯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪烹玉。 梳的紋絲不亂的頭發(fā)上驰怎,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機與錄音二打,去河邊找鬼县忌。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的芹枷。 我是一名探鬼主播衅疙,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鸳慈!你這毒婦竟也來了饱溢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤走芋,失蹤者是張志新(化名)和其女友劉穎绩郎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翁逞,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡肋杖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了挖函。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片状植。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖怨喘,靈堂內(nèi)的尸體忽然破棺而出津畸,到底是詐尸還是另有隱情,我是刑警寧澤必怜,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布肉拓,位于F島的核電站,受9級特大地震影響梳庆,放射性物質(zhì)發(fā)生泄漏暖途。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一膏执、第九天 我趴在偏房一處隱蔽的房頂上張望驻售。 院中可真熱鬧,春花似錦胧后、人聲如沸芋浮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至镇草,卻和暖如春眶痰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背梯啤。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工竖伯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓七婴,卻偏偏與公主長得像祟偷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子打厘,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 書寫的很好修肠,翻譯的也棒!感謝譯者户盯,感謝感謝嵌施! iOS-Core-Animation-Advanced-Techni...
    錢噓噓閱讀 2,299評論 0 6
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復雜莽鸭,今天將帶大家一窺iOS動畫全貌吗伤。在這里你可以看...
    F麥子閱讀 5,113評論 5 13
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,187評論 25 707
  • 【說明:本文是從Principle官網(wǎng)翻譯過來的,因個人能力和水平有限硫眨,部分術(shù)語可能不準確足淆,對軟件功能的理解也可能...
    shea閱讀 42,376評論 23 117
  • 我的家在山西大同,它還有一個別稱“中國煤都”礁阁,想必這個名字缸浦,大家都不陌生。還記得第一次向外省人說到家鄉(xiāng)時氮兵,他們問的...
    瑤YY閱讀 240評論 2 6