[Framer教程]一起做個(gè)豆瓣電影滑動(dòng)效果

沒(méi)有寫(xiě)代碼的命,但有一顆寫(xiě)代碼的心,F(xiàn)ramer就是為你而生。Framer語(yǔ)法類(lèi)似于javascript但又有些不同,我們可以使用簡(jiǎn)單的代碼實(shí)現(xiàn)一些動(dòng)態(tài)效果。對(duì)于“望碼生畏”的人來(lái)說(shuō),只要用一次就會(huì)愛(ài)上它的。甚至于,時(shí)間久了你還能對(duì)代碼知曉一二。

那就和我一起來(lái)做吧!先看下效果:

動(dòng)效演示

拆解一下動(dòng)作,可以發(fā)現(xiàn)其實(shí)很簡(jiǎn)單:隨著手指拖動(dòng)內(nèi)容上滑,海報(bào)小幅度上滑,topBar逐漸顯示,當(dāng)內(nèi)容到達(dá)頂部時(shí),電影名稱(chēng)顯示出來(lái)。好了我們開(kāi)始吧。

一、準(zhǔn)備工作:

①首先點(diǎn)擊頂部File->New創(chuàng)建一個(gè)新的文件,會(huì)出現(xiàn)一個(gè)默認(rèn)工程,里面已經(jīng)有一個(gè)實(shí)例了。

新建文件

②再次點(diǎn)擊File->Save將該文件保存在某個(gè)文件夾下,默認(rèn)以.framer結(jié)尾。

保存文件

③打開(kāi)剛才那個(gè)文件夾,里面已經(jīng)有了這些文件,其中images里面可以放一些你要用到的圖片。

文件詳情

④我們用到三個(gè)圖片:內(nèi)容、海報(bào)和頂部圖標(biāo)。

圖片文件

二、寫(xiě)layers

Framer是用一個(gè)個(gè)layer(層)來(lái)組織視圖的,和PS的原理類(lèi)似。先生成的layer一般會(huì)在最下面,一層層疊加。Framer最新版新增了層級(jí)視圖,我們可以清楚地看到該文件層級(jí)如下:

層級(jí)視圖

接下來(lái)我們就一個(gè)個(gè)去寫(xiě)每一個(gè)層:

layers圖解

模糊背景層,就是海報(bào)下方的模糊背景,命名為posterBg,代碼如下:

posterBg

我們會(huì)通過(guò)一些屬性來(lái)給layer布局,這段代碼的意思是,新建一個(gè)layer,命名為posterBg,它的一些屬性如下:

y即縱向坐標(biāo),手機(jī)屏幕上坐標(biāo)原點(diǎn)為左上角,橫向向右為X軸,縱向向下為Y軸,這里-40表示該圖片向上移動(dòng)40像素;width即寬度,這里為1000,比屏幕寬,主要是為了完全覆蓋屏幕;height為高度,設(shè)為900;blur即模糊度;style就是它的一些樣式,在其內(nèi)部我們可以定義背景為一張圖片,不重復(fù),背景圖片自動(dòng)100%寬度,可以參考給電腦設(shè)置壁紙的選項(xiàng)。最后為了讓這個(gè)圖片居中顯示,我們加了一句:posterBg.centerX(0),表示其中心坐標(biāo)在屏幕中心處。

類(lèi)似的,我們可以定義poster、scroll、content、topBar、topIcon。這里要做特別說(shuō)明的是scroll這個(gè)layer,這是Framer里面一種特殊的layer,主要為了方便制作可以滾動(dòng)瀏覽的視圖。它的定義方式和其他layer不一樣,用new ScrollComponent來(lái)創(chuàng)建,里面的scrollHorizontal:false代表禁止水平滾動(dòng),directionLock:true代表鎖定方向,即只可以縱向滑動(dòng)。

content是滾動(dòng)視圖的內(nèi)容頁(yè),里面的superlayer:scroll.content表示其父級(jí)layer是scroll下面的content,等于是把content嵌入到scroll的content中,就可以滾動(dòng)它了。

scroll

最后,我們要給scroll的移動(dòng)添加事件監(jiān)控,如下:

事件監(jiān)控

這里事件監(jiān)控就是說(shuō)在監(jiān)控到有觸摸事件時(shí),要執(zhí)行一定的響應(yīng)動(dòng)作。結(jié)合代碼,這里監(jiān)控的是scroll的Move(注意大小寫(xiě))事件:scroll.on Events.Move表示監(jiān)控scroll移動(dòng)的事件。這里我們要執(zhí)行的是,topBar的透明度變化,poster的位置變化,topIcon中的文字顯示和隱藏。

topBar.opacity = Utils.modulate(scroll.scrollY, [0, 500], [0, 1], true)

這一句中的Utils.modulate()是Framer提供的范圍轉(zhuǎn)換函數(shù),簡(jiǎn)單來(lái)說(shuō)就是將scroll縱向移動(dòng)的距離scrollY在0到500范圍內(nèi)等比例轉(zhuǎn)換到0到1內(nèi),true表示超出部分使用用邊界值。比如scroll.scrollY=300,處于0到500中五分之三的位置,而0到1中五分之三的位置是0.6,所以就返回0.6。而scroll.scrollY=600時(shí),超出了0到500的范圍,就返回500。

類(lèi)似的,我們還要小海報(bào)poster隨著滑動(dòng)時(shí)改變位置,所以就使用下面這句代碼給其賦予一個(gè)位置。

poster.y = Utils.modulate(scroll.scrollY, [0, 500], [150, 80], true)

同時(shí),當(dāng)內(nèi)容滾動(dòng)到頂部時(shí),就要顯示出電影名稱(chēng),否則就不顯示,于是就有了下面的代碼:

if(scroll.scrollY>500)

? ? topIcon.html = "《夏天的尾巴》臺(tái)灣青春劇"

? ? else topIcon.html = ""


※本文系原創(chuàng)文章,轉(zhuǎn)載請(qǐng)務(wù)必注明:轉(zhuǎn)載自leadream的簡(jiǎn)書(shū)。謝謝!


最后附上源代碼,如有問(wèn)題歡迎一起探討。

posterBg = new Layer({

y:-40,

width:1000,

height:900,

blur:60,

style:{

"background": "url(images/poster.png) no-repeat"

"background-size":"100%"

}

})

posterBg.centerX(0)

poster = new Layer({

y:150,

width:300,

height:500,

style:{

"background": "url(images/poster.png) no-repeat"

"background-size":"100%"

}

})

poster.centerX(0)

scroll = new ScrollComponent({

width:Screen.width,

height:Screen.height,

scrollHorizontal: false,

directionLock: true

})

content = new Layer({

y:600,

width:Screen.width,

height:1600,

superLayer:scroll.content,

style:{

"background": "url(images/content.png) no-repeat"

"background-size":"100%"

}

})

topBar = new Layer({

width:Screen.width,

height:100,

opacity:0,

style:{

"background": "#49db9c"

}

})

topIcon = new Layer({

y:25,

width:Screen.width,

height:50,

style:{

"background": "url(images/topIcon.png) no-repeat"

"background-size":"100%"

"text-align":"center"

"line-height":"1.5"

}

})

scroll.on Events.Move, ->

topBar.opacity = Utils.modulate(scroll.scrollY, [0, 500], [0, 1], true)

poster.y = Utils.modulate(scroll.scrollY, [0, 500], [150, 80], true)

if(scroll.scrollY>500)

topIcon.html = "《夏天的尾巴》臺(tái)灣青春劇"

else topIcon.html = ""

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

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

  • 各種純css圖標(biāo) CSS3可以實(shí)現(xiàn)很多漂亮的圖形,我收集了32種圖形,在下面列出。直接用CSS3畫(huà)出這些圖形,要比...
    劍殘閱讀 9,977評(píng)論 0 8
  • 1. tab列表折疊效果 html: 能源系統(tǒng)事業(yè)部 崗位名稱(chēng): 工作地點(diǎn) 崗位名...
    lilyping閱讀 2,007評(píng)論 0 1
  • 在iOS中隨處都可以看到絢麗的動(dòng)畫(huà)效果,實(shí)現(xiàn)這些動(dòng)畫(huà)的過(guò)程并不復(fù)雜,今天將帶大家一窺iOS動(dòng)畫(huà)全貌。在這里你可以看...
    F麥子閱讀 5,260評(píng)論 5 13
  • 一、CAShapelayer 我們知道可以不使用圖片情況下利用CGpath去構(gòu)建任意形狀的陰影。其實(shí)我們也可...
    小貓仔閱讀 1,780評(píng)論 0 5
  • 夜深人靜時(shí)你便能夠體會(huì)一座城市的孤獨(dú),每座城市的孤獨(dú)感有不一樣的味道。 廣州現(xiàn)人口1404.35萬(wàn)人(2016)其...
    Edenn_閱讀 254評(píng)論 0 0

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