如果您想訂閱本博客內(nèi)容,每天自動(dòng)發(fā)到您的郵箱中, 請點(diǎn)這里
在傳統(tǒng)行業(yè)打滾數(shù)年后的設(shè)計(jì)師,總是難以回避靈氣和匠氣的博弈,日常創(chuàng)作逐漸走入某種定式,失去了挑戰(zhàn) Brief 的膽量和與打破規(guī)則的底氣。與此同時(shí),異軍突起的新媒體互動(dòng)設(shè)計(jì)卻似乎毫無包袱,以一股體驗(yàn)式的視覺狂潮快速站穩(wěn)了自己的商業(yè)位置,既保留了創(chuàng)意人的酷,也能為新型體驗(yàn)創(chuàng)造服務(wù)。2012年,Random International 的作品《雨屋》正式開啟了大眾對沉浸式體驗(yàn)的認(rèn)識(shí),近年隨著 teamLab、Punchdrunk 等互動(dòng)體驗(yàn)展演的火爆,沉浸式新媒體設(shè)計(jì)不僅成為了炙手可熱的包裝概念,同時(shí)也透露出人們對于新型互動(dòng)的好奇心與強(qiáng)需求。提起新媒體作品,我們通常會(huì)自動(dòng)聯(lián)想到黑科技和腦洞,卻容易忽視這些作品除了具有前衛(wèi)的藝術(shù)性表征,同時(shí)也暗含著嚴(yán)謹(jǐn)而延展的設(shè)計(jì)內(nèi)核。
2019 年初夏,Mindpark 邀請了兩位數(shù)字媒體界的先鋒代表:Moment Factory與Studio Swine,和我們共同探討了沉浸式設(shè)計(jì)在商業(yè)性實(shí)踐與實(shí)驗(yàn)性探索上的思路與價(jià)值。
總部位于蒙特利爾的 Moment Factory 是一家專業(yè)打造沉浸式互動(dòng)體驗(yàn)設(shè)計(jì)的多媒體公司,以跨界和合作著稱的他們擁有一個(gè)超 350 人的龐大團(tuán)隊(duì)。自千禧年成立以來,MF 已經(jīng)成功打造了近 400 個(gè)場景設(shè)計(jì)商業(yè)項(xiàng)目,客戶包括微軟、索尼、NFL、麥當(dāng)娜等,形式從立體光雕、數(shù)據(jù)互動(dòng)到空間展覽、演唱會(huì)工程都樣樣精通,幾乎每個(gè)作品在面世時(shí)都顛覆了人們對驚艷的定義。
△ Demo Reel ©?Moment Factory
Moment Factory 的業(yè)務(wù)主要分為三大模塊:內(nèi)容、互動(dòng)與場景。植根于公眾場域創(chuàng)作的他們,善于根據(jù)場地的特點(diǎn)策劃和開發(fā)因地制宜的故事內(nèi)容,繼而在聲光電的效果設(shè)計(jì)上加強(qiáng)環(huán)境與人之間的聯(lián)結(jié),最后兩者結(jié)合形成互動(dòng)閉環(huán)以構(gòu)造出全局的沉浸式體驗(yàn)。
△ ©?Moment Factory
Moment Factory 的工作流也基于這三大模塊多線程并行。與傳統(tǒng)行業(yè)不同的是,客戶對于 MF 而言并不是甲方爸爸,而是項(xiàng)目的共創(chuàng)者。他們會(huì)邀請客戶參與并確認(rèn)每一個(gè)設(shè)計(jì)環(huán)節(jié),一來可以增加客戶對項(xiàng)目的認(rèn)知與信任度,二是考慮到多媒體物料制作成本較高,也預(yù)防階段性推翻對項(xiàng)目進(jìn)程造成影響。
△ ©?Moment Factory
「Aura」是 Moment Factory 耗時(shí)超過一年,動(dòng)用超過 100 人團(tuán)隊(duì)制作的夢幻級沉浸式光雕作品。它集合了極其的視效投影技術(shù)及獨(dú)立打造的交響樂聲效,為蒙特利爾圣母大教堂打造了 40 分鐘震撼而靈動(dòng)的超感官體驗(yàn)。
△ AURA ©?Moment Factory
基于天主教堂自身「誕生-受難-升天-審判」的故事脈絡(luò),AURA 的設(shè)計(jì)概念以 the Path of Light(光明之路)為主線,并根據(jù)建筑動(dòng)線分為 the Birth of Light(光的誕生), the Obstacles(苦路),the Open Sky(升天)三個(gè)章節(jié)。
△ ©?Moment Factory
在確定故事線與情緒板同時(shí),考慮到教堂內(nèi)部結(jié)構(gòu)的復(fù)雜性及壁畫的還原準(zhǔn)確性,團(tuán)隊(duì)使用 3D 掃描重塑建筑模型,并進(jìn)行了大量的動(dòng)效推演及真實(shí)光影測試,最終利用自研的工業(yè)投影體系,讓建筑實(shí)體與投影內(nèi)容的結(jié)合達(dá)到型與神的高度統(tǒng)一。
△ Behind the Scenes ©?Moment Factory
在細(xì)節(jié)的雕刻上,作品對主殿圣像的層級結(jié)構(gòu)進(jìn)行分解,營造出空間錯(cuò)位的效果。另外也對苦路長廊的畫像進(jìn)行精準(zhǔn)投影,以光的擴(kuò)散作為線索,一步一步引導(dǎo)觀眾的視線,展開故事敘述。
△ Behind the Scenes©?Moment Factory
無論是故事設(shè)定還是效果設(shè)計(jì),Aura 都根據(jù)教堂題材順勢而為,在不破壞建筑原有氣質(zhì)的前提下,放大環(huán)境硬件中的可用元素,從而達(dá)到「概念-動(dòng)線-效果」的全方位合一。視覺互動(dòng)的起承轉(zhuǎn)合不但將觀眾的沉浸式體驗(yàn)最大化,同時(shí)也升華了圣母大教堂的神性與歷史精神。
LAX 項(xiàng)目是 Moment Factory 在 2013 年為洛杉磯機(jī)場打造,以時(shí)間旅行為主題的商業(yè)項(xiàng)目。它既是全美最大的機(jī)場多媒體環(huán)境設(shè)計(jì)項(xiàng)目,也是品牌體驗(yàn)拓展的空間實(shí)驗(yàn)。
雖然洛杉磯機(jī)場整體以「時(shí)間旅行」作為品牌主題,但出發(fā)者和到達(dá)者的動(dòng)線終歸不同:除了機(jī)場主體以外,旅客的體驗(yàn)還涉及到另外兩個(gè)環(huán)境——旅行目的地和洛杉磯。因此,本項(xiàng)目根據(jù)不同的觸點(diǎn)(登機(jī)口與到達(dá)大廳)針對性地設(shè)計(jì)了不同互動(dòng)內(nèi)容,讓出發(fā)者與到達(dá)者都能找到與環(huán)境的聯(lián)結(jié)和延伸,使整個(gè)機(jī)場體驗(yàn)形成通路。
Moment Factory 為登機(jī)口都設(shè)計(jì)了實(shí)時(shí)更新的互動(dòng)墻,不但能捕捉行人的動(dòng)態(tài)并融入畫面,更能實(shí)時(shí)切換目的地的本土特色內(nèi)容作為動(dòng)畫元素,使準(zhǔn)備出發(fā)的游客身未動(dòng)而心先遠(yuǎn)。
△ THE PORTALS ©?Moment Factory
與登機(jī)口不同的是,到達(dá)大廳的巨幕內(nèi)容則根據(jù)機(jī)場的建筑結(jié)構(gòu)設(shè)計(jì),以跳水、跳躍等蒙太奇片段營造出洛杉磯愜意、清爽、驚喜的城市品牌形象;系列影片也同時(shí)在長廊和行李大廳中展映,以保持品牌語意的一致性與連續(xù)性。
△ WELCOME WALL©?Moment Factory
在機(jī)場中央,MF 團(tuán)隊(duì)還打造了一個(gè)呼應(yīng)主題的重點(diǎn)裝置——時(shí)間鐘樓。除了播放實(shí)時(shí)更新的故事短片外,設(shè)計(jì)師考慮到屏幕過于虛擬和冷感,故以機(jī)械咕咕鐘為靈感,讓鐘樓和環(huán)繞屏幕在準(zhǔn)點(diǎn)切換真人報(bào)時(shí)舞蹈,既達(dá)到提醒旅客時(shí)間的作用,也讓他們在候機(jī)的空隙獲得環(huán)抱式的娛樂化體驗(yàn)。
△ TIME TOWER ©?Moment Factory
從手稿到成型,LAX 項(xiàng)目歷時(shí) 16 個(gè)月,在三個(gè)大洲拍攝了超過 4 小時(shí)的視頻內(nèi)容。而且因?yàn)闄C(jī)場常年不能關(guān)閉,也極大增加了項(xiàng)目的施工與調(diào)試難度。
△ ©?Moment Factory
《通用設(shè)計(jì)法則》中曾提到,「沉浸」即是讓人專注于當(dāng)前環(huán)境,并在設(shè)計(jì)者提供的目標(biāo)情境中進(jìn)行互動(dòng)而獲得愉悅,從而忘記真實(shí)環(huán)境的存在。Moment Factory 十分善于提取及串聯(lián)實(shí)體環(huán)境與觀眾之間的觸點(diǎn),利用不同的互動(dòng)技術(shù)對每一個(gè)觸點(diǎn)進(jìn)行感官的復(fù)合強(qiáng)化,并以完整的敘事結(jié)構(gòu)對品牌進(jìn)行包裝,才屢屢在 Lumina、Kontinuum 等系列作品中打造出連貫又有趣的體驗(yàn)心流。
對互聯(lián)網(wǎng)產(chǎn)品設(shè)計(jì)而言,我們能調(diào)用的觸點(diǎn)也許僅有區(qū)區(qū)一屏,但用戶在獲取虛擬體驗(yàn)時(shí)的沉浸式感知卻和實(shí)境式體驗(yàn)是相似的,因此設(shè)計(jì)師也可以參考以下幾點(diǎn):
We do it in the public. We bring people together.
過去,由于娛樂產(chǎn)品的復(fù)制成本較高,人們大都以群體形式到電影院或劇院里進(jìn)行活動(dòng),因此促進(jìn)了社交互動(dòng)與環(huán)境共融。但隨著媒介的升級,娛樂不僅從大眾走向個(gè)人,同時(shí)也將個(gè)人和群體進(jìn)行隔離,使個(gè)人和社群、環(huán)境之間的互通性越來越弱。Moment Factory 堅(jiān)持在公共場域中探索新型的體驗(yàn)形式,正是因?yàn)樗麄儓?jiān)信娛樂活動(dòng)雖然可以由個(gè)人進(jìn)行,但沉浸式的情感體驗(yàn)仍舊需要透過真實(shí)環(huán)境下的社交互動(dòng)來完成。利用數(shù)字篝火為體驗(yàn)設(shè)計(jì)融合升溫,才能讓人們真正地共聚與共享真實(shí)的情感和生活。
如果說 Moment Factory 利用新媒體在環(huán)境創(chuàng)意、娛樂性與商業(yè)價(jià)值之中找到了發(fā)展的平衡,Studio Swine 則是利用新媒體設(shè)計(jì)的實(shí)驗(yàn)性為人們開辟了觀察世界的全新角度。
Studio Swine 中的「SWINE」全稱是 Super Wide Interdisciplinary New Explorers,意味著無限跨界與探索主義。它由新派英國藝術(shù)家 Alexander Groves 及日本建筑師 Azusa Murakami 于 2011年創(chuàng)立,作品領(lǐng)域涵蓋思辨設(shè)計(jì)、裝置藝術(shù)、電影、雕塑等。他們的創(chuàng)作以獨(dú)特的世界觀、空間感及美學(xué)體系征服了世界各大頂尖藝術(shù)展覽,倫敦V&A博物館、巴黎蓬皮杜藝術(shù)中心與威尼斯雙年展等都曾邀請他們展出。
△ ©?Studio Swine
在西方,越來越多像 Studio Swine 這種設(shè)計(jì)師團(tuán)隊(duì)選擇以跨界的形式進(jìn)行研究及創(chuàng)作,他們也不再拘泥于設(shè)計(jì)與藝術(shù)之間的所謂界限,逐漸衍生出了新的設(shè)計(jì)流派與理論。傳統(tǒng)行業(yè)的設(shè)計(jì)焦點(diǎn)往往會(huì)落在商業(yè)策略與 Design Thinking 上,而新形態(tài)的設(shè)計(jì)則更多地向批判性與未來性上傾斜。
△ An Unresolved Mapping of Speculative Design ©?Elliott P Montgomery | EPMID.COM
2013 年前后,英國設(shè)計(jì)師 Anthony Dunne 和 Fiona Raby 提出了 Speculative Design(思辨性設(shè)計(jì))來概括此類在藝術(shù)與設(shè)計(jì)之間的交疊學(xué)科。對比起傳統(tǒng)設(shè)計(jì)基于現(xiàn)有場景來解決現(xiàn)有問題,思辨性設(shè)計(jì)旨在擴(kuò)充場景的可能性,以引導(dǎo)人們想象和思考未來社會(huì)生活、生產(chǎn)的狀態(tài)或矛盾。Speculative Design 以設(shè)計(jì)作為跨領(lǐng)域的思維實(shí)驗(yàn)及方法,不僅突破了媒介、工藝的疆域,選題上也常常挑戰(zhàn)甚至跳脫社會(huì)倫理、文化定式、現(xiàn)世哲學(xué)的桎梏,而這種敢為人先的創(chuàng)作理念也是此類作品爭議性的源頭。
△ Redrawn from Speculative Design Practice ©? Ivica Mitrovi? | Speculative.hr
New Spring 是 Studio Swine 與 COS 合作的裝置互動(dòng)項(xiàng)目,作品以意大利建筑的拱廊結(jié)構(gòu)及櫻花樹在四季中的形態(tài)為意象設(shè)計(jì),并將氣泡比喻花的綻放與凋亡,旨在討論時(shí)間與物質(zhì)的瞬息性。在創(chuàng)作伊始,設(shè)計(jì)師提出了一個(gè)假設(shè)場景:在未來,物質(zhì)將越來越多,而空間越來越少,植物與園林可能朝著機(jī)械化、人工化的方向發(fā)展,那么我們要怎么去模擬四季變化下生物從生到滅的過程呢?
△ COS x NEW SPRING ©?Studio Swine
為了全感官地營造未來園林的場景感與沉浸感,除了櫻花樹的意境外,Studio Swine 更與化學(xué)家合作,研制出帶有混合香味且不會(huì)立即爆破的氣泡,為互動(dòng)者帶來意料之外的觸感體驗(yàn)。在聽覺上,編曲家 Gavin Singleton 也特意為展覽場景打造了專屬的音樂EP。
△ ©?Studio Swine
2018年,Swine Swine 再度利用氣泡作為原型,以世界上最小且最古老的生物之一——藍(lán)細(xì)菌的光合供氧為主題,制作了高達(dá) 9 米的大型環(huán)境裝置 Infinity Blue 來模擬地球大氣層的歷史,禮贊藍(lán)細(xì)菌賜予了地球第一口呼吸。雕塑中內(nèi)嵌 32 個(gè)旋渦氣孔不斷噴發(fā)出圈裝煙霧,用以比喻光合作用生產(chǎn)氧氣的過程。
△ Infinity Blue ©?Studio Swine
和場景設(shè)計(jì)不同,影片同樣也是另一種常見的沉浸式表現(xiàn)手法。近幾年越來越多的新媒體作品采用紀(jì)錄電影、開放式互動(dòng)短劇、VR 短片等形式對作品進(jìn)行呈現(xiàn):一是影片能突破作品篇幅,更全貌地介紹項(xiàng)目背后的概念與調(diào)研故事;二來基于自媒體環(huán)境的蓬勃,作品能以較低的復(fù)制成本獲得更高的傳播度;三則是影片天然的敘事結(jié)構(gòu)能快速激活觀眾的代入感。
Hair Highway(絲綢之路)是以紀(jì)錄片與家具設(shè)計(jì)復(fù)合呈現(xiàn)的極富爭議性的新媒體實(shí)驗(yàn)。Studio Swine 意識(shí)到在自然資源逐漸減少的情況下,人類毛發(fā)作為一種代謝物質(zhì),也許可以成為新型的可再生資源?;谶@個(gè)洞察,他們嘗試以頭發(fā)作為原料去創(chuàng)造一種近似木料的全新媒材,以挑戰(zhàn)現(xiàn)有的美學(xué)標(biāo)準(zhǔn)和詮釋物質(zhì)的可能性。
△ Hair Highway ©?Studio Swine
亞洲人頭發(fā)的生長速度是熱帶硬木的 16 倍,而中國作為熱帶硬木最大的進(jìn)口國也是人類毛發(fā)最大的出口國,因此也被他們選為了項(xiàng)目的起源地。兩人在創(chuàng)作過程中不僅探訪了 9 個(gè)位于山東的假發(fā)工廠,更拍攝大量假發(fā)制作的工序與買賣流程作為紀(jì)錄片的生態(tài)調(diào)研資料。
△ ©?Studio Swine
Hair Highway 以絲綢為概念,用樹脂封印毛發(fā)制作出一種模擬琥珀、玳瑁紋理的板材,并糅合清代及上海 20 年代裝飾主義的紋理設(shè)計(jì)與西方抽象幾何的輪廓特征,創(chuàng)造出了一套極具古典神韻的系列家飾。
△ ©?Studio Swine
不破不立,Studio Swine 的作品始終緊扣著三個(gè)思辨性的特征:探索時(shí)間性、想象未來社會(huì)的形態(tài)、創(chuàng)造新型的物質(zhì)組合,以新銳的角度挑動(dòng)人們的思維的底線,而量產(chǎn)和商業(yè)化卻從不是他們眼中的第一要義?;蛟S怪誕,或許不安,但設(shè)計(jì)在他們的哲學(xué)里只是一條探索世界的未竟之路,而不是一個(gè)實(shí)用主義誕下的結(jié)果。
新媒體的特點(diǎn)之一,就是他基于時(shí)間的藝術(shù)形式。新媒體的表現(xiàn)很多都是時(shí)間累積的縮影,每一幀,每一個(gè)圖層,每一個(gè)數(shù)據(jù)庫的建立,以及觀眾在與之互動(dòng)的時(shí)候也同時(shí)在進(jìn)行一個(gè)時(shí)間的旅行。我希望互動(dòng)是更加內(nèi)隱和內(nèi)省的,而不是僅僅基于科技的娛樂程度?!旅襟w策展人 Richard Castelli
從對娛樂效果喜聞樂見,對創(chuàng)作理念心悅誠服,再到如今被作品激活出新的靈感、批判或討論,受眾與作品之間的互動(dòng)升維或許才是創(chuàng)作者最樂意觀望的局面。沉浸式新媒體設(shè)計(jì)為人們提供了孵化情感和思想的超感官空間,而互動(dòng)場域中的人才是成就作品的最終環(huán)節(jié)。
真正的沉浸是思維的沉浸,環(huán)境的營造只是想象力的引路人。
藍(lán)藍(lán)設(shè)計(jì)( www.yvirxh.cn )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 、平面設(shè)計(jì)服務(wù)。
如果您想訂閱本博客內(nèi)容,每天自動(dòng)發(fā)到您的郵箱中, 請點(diǎn)這里
更新階段分為兩部分 父組件執(zhí)行 render 或者調(diào)用 this.setState。
componentWillReceiveProps
大部分網(wǎng)上教程為外部 props 發(fā)生改變才觸發(fā) componentWillReceiveProps,其實(shí)不是,當(dāng)父組件進(jìn)入 render 時(shí),無論子組件的 props 發(fā)沒發(fā)生改變,都會(huì)執(zhí)行該生命周期函數(shù)。
函數(shù)參數(shù)有一個(gè),為 nextProps,為將要新的 props。
值得注意的是,在整個(gè)更新階段的生命周期函數(shù),只有在此函數(shù)內(nèi)可以調(diào)用 this.setState 方法,當(dāng)然其他也可以調(diào)用,但是會(huì)造成死循環(huán) 。
shouldComponentUpdate
該函數(shù)需要返回值,如沒定義則默認(rèn)返回 true。當(dāng)返回值為 true 時(shí),進(jìn)入 componentWillIpdate ,如為 false ,則什么都不發(fā)生。所以說這是一個(gè)可以進(jìn)行 React 性能優(yōu)化的地方。函數(shù)參數(shù)有兩個(gè) nextProps 和 nextState。我們需用做的就是在 this.props、this.state、nextState、nextProps之間進(jìn)行對比,來解決重復(fù)渲染的目的。
componentWillUpdate
如果 shouldComponentUpdate 返回值為 true 的話,生命周期會(huì)進(jìn)入該函數(shù)中。在這個(gè)函數(shù)中我們可以根據(jù)實(shí)際情況做一些事情,但是不能調(diào)用 this.setState。
render
在更新階段的 render 來講一講 調(diào)和 過程。 render 返回的 JSX 標(biāo)簽會(huì)保存在內(nèi)存中,react 會(huì)通過 diff 算法來計(jì)算出最小化改動(dòng)完成差異的更新。diff 是逐層遞歸比較,首先比較類型是否一樣。如果發(fā)現(xiàn) <div>和 <span> 的差別的話,react 會(huì)選擇直接放棄之前的 dom 元素, 重新渲染。所以說即使是更新階段的調(diào)和過程,也會(huì)觸發(fā)組件的掛載、卸載階段。
componentDidUpdate
在這個(gè)時(shí)候已經(jīng)更新完 dom 結(jié)構(gòu),可以重新使用 dom 操作。
總結(jié)
總體來說更新的生命周期要做的最重要的事情就是性能優(yōu)化,減少重復(fù)渲染次數(shù)。
在這個(gè)方面已經(jīng)有很多成熟的解決方法了,在我的博客中也會(huì)介紹如何定制更新階段的生命周期函數(shù)。
在使用上,最最重要的一點(diǎn)就是不要在除了 componentWillReceiveProps 之外的其他更新階段生命周期函數(shù)內(nèi)調(diào)用 this.setState。
相關(guān)鏈接:
淺入 React 生命周期相關(guān)(一)掛載生命周期
---------------------
如果您想訂閱本博客內(nèi)容,每天自動(dòng)發(fā)到您的郵箱中, 請點(diǎn)這里
前幾天面試問道 react 的相關(guān)知識(shí),對我打擊比較大,感覺對 react 認(rèn)識(shí)非常膚淺,所以在這里重新梳理一下,想想之前沒有仔細(xì)思考過的東西。
另外有說的不對的地方還請幫我指正一下,先謝謝各位啦。
目錄索引:
React 有一套合理的運(yùn)行機(jī)制去控制程序在指定的時(shí)刻該做什么事,當(dāng)一個(gè)生命周期鉤子被觸發(fā)后,緊接著會(huì)有下一個(gè)鉤子,直到整個(gè)生命周期結(jié)束。
生命周期代表著每個(gè)執(zhí)行階段,比如組件初始化,更新完成,馬上要卸載等等,React 會(huì)在指定的時(shí)機(jī)執(zhí)行相關(guān)的生命周期鉤子,使我們可以有機(jī)在程序運(yùn)行中會(huì)插入自己的邏輯。
我們寫代碼的時(shí)候往往會(huì)有很多組件以及他們的子組件,各自調(diào)用不同的生命周期,這時(shí)就要解決誰先誰后的問題,在 react v16 之前是采用了遞歸調(diào)用的方式一個(gè)一個(gè)執(zhí)行,而在現(xiàn)在 v16 的版本中則采用了與之完全不同的處理(調(diào)度)方式,名叫 Fiber,這個(gè)東西 facebook 做了有兩年時(shí)間,實(shí)現(xiàn)非常復(fù)雜。
具體 Fiber 它是一個(gè)什么東西呢?不要著急,我們先從最基本的生命周期鉤子看起。
首先看一下 React V16.4 后的生命周期概況(圖片來源)
constructor()
- 類構(gòu)造器初始化
static getDerivedStateFromProps()
- 組件初始化時(shí)主動(dòng)觸發(fā)
render()
- 遞歸生成虛擬 DOM
componentDidMount()
- 完成首次 DOM 渲染
static getDerivedStateFromProps()
- 每次 render() 之前執(zhí)行
shouldComponentUpdate()
- 校驗(yàn)是否需要執(zhí)行更新操作
render()
- 遞歸生成虛擬 DOM
getSnapshotBeforeUpdate()
- 在渲染真實(shí) DOM 之前
componentDidUpdate()
- 完成 DOM 渲染
componentWillUnmount()
- 組件銷毀之前被直接調(diào)用
static getDerivedStateFromProps()
這個(gè)鉤子會(huì)在每個(gè)更新操作之前(即使props沒有改變)執(zhí)行一次,使用時(shí)應(yīng)該保持謹(jǐn)慎。
componentDidMount()
和 componentDidUpdate()
執(zhí)行的時(shí)機(jī)是差不多的,都在 render
之后,只不過前者只在首次渲染后執(zhí)行,后者首次渲染不會(huì)執(zhí)行
getSnapshotBeforeUpdate()
執(zhí)行時(shí)可以獲得只讀的新 DOM 樹,此函數(shù)的返回值為 componentDidUpdate(prevProps, prevState, snapshot)
的第三個(gè)參數(shù)
關(guān)于 Fiber,強(qiáng)烈建議聽一下知乎上程墨Morgan的 live 《深入理解React v16 新功能》,這里潛水員的例子和圖片也是引用于此 live。
我們知道 React 是通過遞歸的方式來渲染組件的,在 V16 版本之前的版本里,當(dāng)一個(gè)狀態(tài)發(fā)生變更時(shí),react 會(huì)從當(dāng)前組件開始,依次遞歸調(diào)用所有的子組件生命周期鉤子,而且這個(gè)過程是同步執(zhí)行的且無法中斷的,一旦有很深很深的組件嵌套,就會(huì)造成嚴(yán)重的頁面卡頓,影響用戶體驗(yàn)。
React 在V16版本之前的版本里引入了 Fiber 這樣一個(gè)東西,它的英文涵義為纖維,在計(jì)算機(jī)領(lǐng)域它排在在進(jìn)程和線程的后面,雖然 React 的 Fiber 和計(jì)算機(jī)調(diào)度里的概念不一樣,但是可以方便對比理解,我們大概可以想象到 Fiber 可能是一個(gè)比線程還短的時(shí)間片段。
Fiber 把當(dāng)前需要執(zhí)行的任務(wù)分成一個(gè)個(gè)微任務(wù),安排優(yōu)先級,然后依次處理,每過一段時(shí)間(非常短,毫秒級)就會(huì)暫停當(dāng)前的任務(wù),查看有沒有優(yōu)先級較高的任務(wù),然后暫停(也可能會(huì)完全放棄)掉之前的執(zhí)行結(jié)果,跳出到下一個(gè)微任務(wù)。同時(shí) Fiber 還做了一些優(yōu)化,可以保持住之前運(yùn)行的結(jié)果以到達(dá)復(fù)用目的。
我們可以把調(diào)度當(dāng)成一個(gè)潛水員在海底尋寶,v16 之前是通過組件遞歸的方式進(jìn)行尋寶,從父組件開始一層一層深入到最里面的子組件,也就是如下圖所示。
而替換成了 Fiber 后,海底變成的狹縫(簡單理解為遞歸變成了遍歷),潛水員會(huì)每隔一小段時(shí)間浮出水面,看看有沒有其他尋寶任務(wù)。注意此時(shí)沒有尋到寶藏的話,那么之前潛水的時(shí)間就浪費(fèi)了。就這樣潛水員會(huì)一直下潛和冒泡,具體如下圖所示。
從生命周期那張圖片縱向來看,F(xiàn)iber 將整個(gè)生命周期分成了三個(gè)階段:
componentWillMount()
,componentWillUpdate()
,componentWillReceiveProps()
的三個(gè)生命周期鉤子被加上了 UNSAFE
標(biāo)記
簡而言之:以 render() 為界,之前執(zhí)行的生命周期都有可能會(huì)打斷并多次調(diào)用,之后的生命周期是不可被打斷的且只會(huì)調(diào)用一次。所以盡量把副作用的代碼放在只會(huì)執(zhí)行一次的 commit 階段。
除了上面常用的鉤子,React 還提供了如下鉤子:
static getDerivedStateFromError()
在 render 階段執(zhí)行,通過返回 state 更新組件狀態(tài)
componentDidCatch()
在 commit 階段執(zhí)行,可以放一些有副作用的代碼
理解了生命周期和三個(gè)執(zhí)行階段,就可以比較容易理解組件狀態(tài)的更新機(jī)制了。
這個(gè)方法可以讓我們更新組件的 state 狀態(tài)。第一個(gè)參數(shù)可以是對象,也可以是 updater 函數(shù),如果是函數(shù),則會(huì)接受當(dāng)前的 state 和 props 作為參數(shù)。第二個(gè)參數(shù)為函數(shù),是在 commit 階段后執(zhí)行,準(zhǔn)確的說是在 componentDidUpdate()
后執(zhí)行。
setState() 的更新過程是異步的(除非綁定在 DOM 事件中或?qū)懺?setTimeout 里),而且會(huì)在最后合并所有的更新,如下:
Object.assign( previousState,
{quantity: state.quantity + 1},
{quantity: state.quantity + 1},
...
)
復(fù)制代碼
之所以設(shè)計(jì)成這樣,是為了避免在一次生命周期中出現(xiàn)多次的重渲染,影響頁面性能。
如果我們想強(qiáng)制刷新一個(gè)組件,可以直接調(diào)用該方法,調(diào)用時(shí)會(huì)直接執(zhí)行 render()
這個(gè)函數(shù)而跳過 shouldComponentUpdate()
。
function wait() { return new Promise(resolve => {
setTimeout(() => {
resolve(); console.log("wait");
}, 0);
});
} //......省略組件創(chuàng)建 async componentDidMount() { await wait(); this.setState({ name: "new name" }); console.log("componentDidMount");
}
componentDidUpdate() { console.log("componentDidUpdate");
}
render() { console.log(this.state); return null } //......省略組件創(chuàng)建 // 輸出結(jié)果如下 // wait // {name: "new name"} // componentDidUpdate // componentDidMount // 注意 componentDidUpdate 的輸出位置,一般情況下 // componentDidUpdate 都是在componentDidMount 后面 // 執(zhí)行的,但是這里因?yàn)閟etState 寫在了 await 后面 // 所以情況相反。 復(fù)制代碼
了解 react 生命周期和更新機(jī)制確實(shí)有利于編寫代碼,特別是當(dāng)代碼量越來越大時(shí),錯(cuò)用的 setState 或生命周期鉤子都可能埋下越來越多的雷,直到有一天無法維護(hù)。。。
我的個(gè)人建議如下:
getDerivedStateFromProps()
當(dāng)成是 UNSAFE_componentWillReceiveProps()
的替代品,因?yàn)?nbsp;getDerivedStateFromProps()
會(huì)在每次 render() 之前執(zhí)行,即使 props 沒有改變
藍(lán)藍(lán)設(shè)計(jì)( www.yvirxh.cn )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 、平面設(shè)計(jì)服務(wù)。
如果您想訂閱本博客內(nèi)容,每天自動(dòng)發(fā)到您的郵箱中, 請點(diǎn)這里
這篇文章我們來談?wù)?strong>移動(dòng)端和PC端交互設(shè)計(jì)上的區(qū)別。
經(jīng)常遇到一些設(shè)計(jì)師,他們之前負(fù)責(zé)的都是pc端產(chǎn)品,突然改做移動(dòng)端,會(huì)不自覺的把pc端的一些設(shè)計(jì)理念“移植”到移動(dòng)端,出現(xiàn)了水土不服。有經(jīng)驗(yàn)的設(shè)計(jì)師一看你設(shè)計(jì)的移動(dòng)端頁面就知道你之前做的都是pc端,這是一件非常尷尬的事情。就好像你說了一句“nice to meet you”,別人就知道你老家是哪里一樣。那么移動(dòng)端和pc端交互設(shè)計(jì)上的區(qū)別究竟在哪呢?
大屏到小屏
開門見山,移動(dòng)端和pc端最根本的區(qū)別就是屏幕的大小。屏幕的大小直接決定了界面信息量,pc端一個(gè)頁面可以展示完全的信息可能需要移動(dòng)端好幾個(gè)頁面來承載。
可能有的設(shè)計(jì)師覺得,屏幕尺寸不一樣做自適應(yīng)不就行了,移動(dòng)端頁面做長一點(diǎn),讓用戶滑動(dòng)就可以了。這是一個(gè)非常簡單的處理方案,但是忽略了一個(gè)重要前提:用戶愿不愿意滑動(dòng)?根據(jù)埋點(diǎn)數(shù)據(jù)顯示,多數(shù)移動(dòng)端頁面超過一屏的內(nèi)容的曝光與點(diǎn)擊量會(huì)急劇下滑,說明用戶很少主動(dòng)滑動(dòng)去查看一屏以外的內(nèi)容。對于移動(dòng)端產(chǎn)品來說,一些重要的內(nèi)容必須保證用戶在一屏內(nèi)可以看到。
1)信息架構(gòu)重構(gòu)
因此,如果你要為一個(gè)pc端網(wǎng)站做一個(gè)移動(dòng)端app,首先要做的就是信息架構(gòu)的重構(gòu)。pc端有足夠的空間可以把所有的功能直接展示給用戶,而移動(dòng)端只能展示一些主要的功能,一些次要的功能需要放在下一層級。
例如,appstore中用戶是可以評價(jià)這條評論對自己是否有幫助的。PC端的處理方式很簡單,直接展示給用戶。而移動(dòng)端是需要用戶長按這條評論才可以彈出評價(jià)列表的,可能很多用戶今天看了這篇文章才發(fā)現(xiàn)原來還有這個(gè)功能。沒關(guān)系,之前雖然不知道,但是并沒有影響你正常使用啊。對次要功能進(jìn)行適當(dāng)?shù)慕档托畔蛹壥且苿?dòng)端設(shè)計(jì)師必須要考慮的。
2)一個(gè)頁面,一個(gè)任務(wù)
對于上面信息架構(gòu)重構(gòu)的觀點(diǎn)可能會(huì)有人存在異議,對于一些表單類頁面來說,例如用戶要借錢、轉(zhuǎn)賬,有些信息是用戶必須要填的。在這些場景中,我們不擔(dān)心用戶不滑動(dòng),因?yàn)橛脩舨换瑒?dòng)就無法完成操作。那么在這種情況下,是否可以繼續(xù)延續(xù)pc端的布局樣式?
以上面的轉(zhuǎn)賬流程為例,pc端是直接在一個(gè)頁面展示,而移動(dòng)端是分成了兩個(gè)頁面。為什么這樣?把備注/付款說明也放在第一個(gè)頁面不行嗎?
因?yàn)橐苿?dòng)端用戶使用環(huán)境更加的復(fù)雜多變,更容易受到干擾,所以必須保證界面信息的簡單直觀。如果在一個(gè)頁面中展示過多的信息量,容易讓用戶混亂。這里所說信息量并不是指絕對信息量,更準(zhǔn)確的說法應(yīng)該是用戶主觀感受上的信息量。同樣的幾個(gè)輸入框,可能在pc端只占了頁面的1/4,而移動(dòng)端占了一整個(gè)頁面,給用戶的感觀是完全不一樣的。頁面塞的滿滿當(dāng)當(dāng),容易讓用戶焦慮。
一個(gè)頁面可以完成的任務(wù)現(xiàn)在要跳轉(zhuǎn)好幾個(gè)頁面,增加了操作步驟。用戶害怕“內(nèi)容多”,難道不害怕“步驟多”嗎?不害怕,因?yàn)轫撁鎯?nèi)容量是用戶一眼就可以看出來的,用戶無法立刻感知這個(gè)任務(wù)有多少步驟。因?yàn)闊o知,所以無畏。等到用戶知道這個(gè)任務(wù)步驟數(shù)的時(shí)候,整個(gè)任務(wù)都已經(jīng)完成了。
借唄的這次改版,用戶要借錢必須先輸入借款金額,其余的借款期限、還款方式和利息等信息才會(huì)展示給用戶。這些信息都是跟用戶借款金額相關(guān)的,用戶沒有輸入借款金額,這些信息展示給用戶意義也不大,不如隱藏,讓用戶的注意力聚焦于完成輸入借款金額。
沒有一個(gè)放之四海而皆準(zhǔn)的設(shè)計(jì)原則,所有的設(shè)計(jì)理論都不能罔顧實(shí)際的應(yīng)用場景而機(jī)械的套用。如果前后步驟關(guān)聯(lián)性比較強(qiáng),我建議不要分頁展示。例如,目前很多的短信驗(yàn)證碼都選擇把“輸入手機(jī)號(hào)”和“輸入短信驗(yàn)證碼”放到兩個(gè)頁面,我個(gè)人對此持保留意見。設(shè)想一個(gè)場景,如果用戶遲遲沒有收到短信驗(yàn)證碼,那么他需要確定是手機(jī)號(hào)輸錯(cuò)了、網(wǎng)絡(luò)故障還是其他什么原因。用戶需要返回到上一個(gè)頁面查看,如果手機(jī)號(hào)和短信驗(yàn)證碼放在同一個(gè)頁面就簡單多了。
3)突出重要信息
前面我們提到的主要是控制移動(dòng)端頁面的信息量。頁面信息量少就可以了?當(dāng)然不是,我們來看一下火車換乘的場景,如果你要從南京去新疆阿克蘇,沒有直達(dá)的車次,只能從西安換乘。我們來看看下面兩款產(chǎn)品的處理方式,左邊是12306,右邊是飛豬。12306還是一股pc端風(fēng)格迎面撲來,問題出現(xiàn)在哪?12306跟飛豬展示信息量差不多,唯一的區(qū)別在于12306展示了兩趟車次各自的起止時(shí)間,而飛豬只告訴用戶整趟旅程的起止時(shí)間。
顯然問題不是出現(xiàn)在信息量上,而是對信息的展示形式上。用戶更關(guān)注的信息,應(yīng)該讓用戶更容易發(fā)現(xiàn)。對于一趟車次來說,用戶更加關(guān)注出發(fā)/到達(dá)站、出發(fā)/到達(dá)時(shí)間和票價(jià)。對飛豬界面進(jìn)行高斯模糊處理,發(fā)現(xiàn)用戶的視覺焦點(diǎn)正好落在這些重點(diǎn)信息上。
12306所有的信息都屬于同一層級,讓人抓不到主次。而且界面中出現(xiàn)了過多的配色,更增加用戶的信息獲取成本。
鼠標(biāo)到手指
pc端用戶與界面進(jìn)行交互靠的是鼠標(biāo),移動(dòng)端用戶靠的是手指。鼠標(biāo)的操作更加精準(zhǔn),因此移動(dòng)端界面中元素的尺寸和間距比pc端的大。以下圖為例,左邊是pc端,右邊是移動(dòng)端。移動(dòng)端的輸入框沿用的還是pc端樣式,而且關(guān)于利率和手續(xù)費(fèi)的詳情icon過小,用戶的手指點(diǎn)擊的時(shí)候容易誤操作。
給你的界面做減法
前面我們主要強(qiáng)調(diào)了移動(dòng)端產(chǎn)品要盡量減少界面中信息量??刹豢梢栽诓桓淖儺a(chǎn)品信息架構(gòu)的前提下,通過交互設(shè)計(jì)上的改動(dòng)來完成目標(biāo)呢?我給大家介紹兩個(gè)方法:場景化和關(guān)聯(lián)化。
1)場景化
在一個(gè)頁面中,雖然內(nèi)容很多,但是用戶真正感興趣并且會(huì)與之交互的內(nèi)容很少。如果我們可以獲知用戶在特定的場景下對于某個(gè)內(nèi)容訴求很高,那么我們突出展示;反之如果訴求很低的話,我們可以隱藏。
舉一個(gè)之前說過的例子,知乎中,用戶在搜索結(jié)果頁滑動(dòng)大概3屏后,會(huì)出現(xiàn)“向知友提問”按鈕。因?yàn)橛脩艋瑒?dòng)了3屏,說明用戶可能對當(dāng)前的搜索結(jié)果不滿意,這時(shí)引導(dǎo)用戶去提問,用戶的意愿更高。如果我們?nèi)陶故具@個(gè)去提問按鈕,反而會(huì)減少用戶的實(shí)際瀏覽區(qū)域,造成干擾。
上面主要提到了,同一個(gè)流程,需要根據(jù)用戶不同的使用場景提供不同的功能。其實(shí)即使是同一個(gè)功能,我們也要根據(jù)用戶不同的使用場景選擇不同的展示形式。
還是知乎,為了方便用戶可以快速的查看下一個(gè)回答,給用戶提供了一個(gè)浮動(dòng)按鈕。但是這個(gè)浮動(dòng)按鈕,當(dāng)用戶開始滑動(dòng)頁面時(shí)候就會(huì)改變樣式。這個(gè)很容易理解,當(dāng)用戶剛進(jìn)入這個(gè)頁面,為了降低用戶的學(xué)習(xí)成本,我們需要直接告訴用戶這個(gè)按鈕是干什么的。當(dāng)用戶開始滑動(dòng)進(jìn)入閱讀答案的狀態(tài),縮小按鈕的形態(tài)避免對界面信息造成遮擋。
2)關(guān)聯(lián)化
我們需要梳理信息之間的關(guān)聯(lián)性,將相互關(guān)聯(lián)的信息整合在一起,進(jìn)而減少頁面中信息量。支付寶賬單的月份篩選功能,對入口進(jìn)行了修改。之前用戶需要點(diǎn)擊日歷圖標(biāo),現(xiàn)在用戶直接點(diǎn)擊月份就可以了。用戶要篩選的就是月份,那么直接把月份作為入口更加合適。
總結(jié)
以上就是我對移動(dòng)端和pc端交互設(shè)計(jì)上區(qū)別的簡單分析和總結(jié),如果你有不同的建議和看法歡迎留言討論。
藍(lán)藍(lán)設(shè)計(jì)( www.yvirxh.cn )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 、平面設(shè)計(jì)服務(wù)。
如果您想訂閱本博客內(nèi)容,每天自動(dòng)發(fā)到您的郵箱中, 請點(diǎn)這里
附Java/C/C++/機(jī)器學(xué)習(xí)/算法與數(shù)據(jù)結(jié)構(gòu)/前端/安卓/Python/程序員必讀書籍書單大全:
書單導(dǎo)航頁(點(diǎn)擊右側(cè) 極客俠棧 即可打開個(gè)人博客):極客俠棧
①【Java】學(xué)習(xí)之路吐血整理技術(shù)書從入門到進(jìn)階最全50+本(珍藏版)
②【算法數(shù)據(jù)結(jié)構(gòu)+acm】從入門到進(jìn)階吐血整理書單50+本(珍藏版)
③【數(shù)據(jù)庫】從入門到進(jìn)階必讀18本技術(shù)書籍網(wǎng)盤吐血整理網(wǎng)盤(珍藏版)
④【W(wǎng)eb前端】從HTML到JS到AJAX到HTTP從框架到全棧幫你走更少彎路(珍藏版)
⑤【python】書最全已整理好(從入門到進(jìn)階)(珍藏版)
⑥【機(jī)器學(xué)習(xí)】+python整理技術(shù)書(從入門到進(jìn)階已經(jīng)整理好)(珍藏版)
⑦【C語言】推薦書籍從入門到進(jìn)階帶你走上大牛之路(珍藏版)
⑧【安卓】入門到進(jìn)階推薦書籍整理pdf書單整理(珍藏版)
⑨【架構(gòu)師】之路史詩級必讀書單吐血整理四個(gè)維度系列80+本書(珍藏版)
⑩【C++】吐血整理推薦書單從入門到進(jìn)階成神之路100+本(珍藏)
?【ios】IOS書單從入門到進(jìn)階吐血整理(珍藏版)
--------------------------------------------------------------------------------------------------------------------
如果您已經(jīng)入門reactjs,請繞道~ 這篇博客只適合初學(xué)者,初學(xué)reactjs的時(shí)候,如果你不會(huì)webpack,相信很多人都會(huì)被官方的例子繞的暈頭轉(zhuǎn)向。 ES6的例子也會(huì)搞死一批入門者。之前一直用的gulp,突然換了webpack,我也非常不習(xí)慣。在這塊也卡住了,對于想學(xué)reactjs的朋友,我的學(xué)習(xí)建議是這樣的:
nodejs => webpack => ES6 => reactjs
官方的很多例子都是ES6語法+webpack打包的,所以在學(xué)習(xí)reactjs之前,最好是會(huì)ES6和webpack,這樣能事半功倍!
1、首先來說說nodejs
先安裝版本的nodejs,npm一般都是自帶的。安裝成全局的比較方便構(gòu)建項(xiàng)目。
npm install -g grunt-cli # 全局安裝
npm可安裝的插件可以在這里去找找 www.npmjs.com/ 如果不能安裝,可以使用淘寶的鏡象資源
2、webpack
webpack是一款打包工具,可以做一些js壓縮,sass,less轉(zhuǎn)換,圖片處理,js代碼合成,ES6轉(zhuǎn)ES5語法等很多功能,如果用過grunt,或者gulp的朋友,webpack也就不陌生了。都是需要寫配置文件。
3、ES6
github上很多案例都是用到了ES6的語法,所以,這里我們可以通過webpack的工具 babel ,把ES6的語法轉(zhuǎn)化為ES5的語法,這樣我們就可以使用github上面的demo了。
比如:
import '../css/common.scss';
import React from 'react'
import { render } from 'react-dom'
import { Router, Route, Link, IndexRoute } from 'react-router'
import { browserHistory } from 'react-router'
這里的import 就是ES6的語法,在webpack里面使用babel工具將其轉(zhuǎn)化為 ES5的語法。我這里用了JSX(reactjs 提供的一種簡潔的語法)如果對JSX不了解的,可以去百度下。
4、快速開發(fā)
每次我們在修改JSX文件,或者SASS文件后,都要執(zhí)行webpack命令進(jìn)行打包,這樣的開發(fā)效率很慢,官方提供了一個(gè)很牛X的工具,react-hot-loader + webpack-dev-server 可以幫助你快速開發(fā),自動(dòng)刷新頁面。
5、DEMO小試牛刀
這里我把自己做的一個(gè)DEMO分享給大家,如果你已經(jīng)安裝了nodejs,并且npm也是全局的。下載后解壓,打開 start.bat,輸入 npm install 安裝所需的插件,安裝成功后執(zhí)行 npm start ,等項(xiàng)目跑起來后,在瀏覽器輸入 http://127.0.0.1:3000 就可以訪問項(xiàng)目了。
這里是一個(gè) react-router 的一個(gè)例子。
github 地址:https://github.com/mtsee/react-router-demo
藍(lán)藍(lán)設(shè)計(jì)( www.yvirxh.cn )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 、平面設(shè)計(jì)服務(wù)。
如果您想訂閱本博客內(nèi)容,每天自動(dòng)發(fā)到您的郵箱中, 請點(diǎn)這里
來源:UI中國
藍(lán)藍(lán)設(shè)計(jì)( www.yvirxh.cn )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 、平面設(shè)計(jì)服務(wù)。
如果您想訂閱本博客內(nèi)容,每天自動(dòng)發(fā)到您的郵箱中, 請點(diǎn)這里
按照這個(gè)來配置就好了,這里相當(dāng)于是幫你把webpack需要的繁瑣的配置給你都弄好了,然后你直接從那里全部下下來就可以
記得先下好nodejs,安裝的代碼記得全都c v,不要自己敲
安裝完nodejs之后再安裝淘寶npm鏡像,安裝完了之后后面的安裝速度會(huì)快一點(diǎn)
npm install -g cnpm --registry=https://registry.npm.taobao.org
1
然后按照下面的五步流程一個(gè)一個(gè)來
1、全局安裝vue-cli
npm install -g vue-cli
1
2、進(jìn)入目錄–初始化項(xiàng)目
vue init webpack my-project //這個(gè)要進(jìn)入項(xiàng)目目錄再用,會(huì)創(chuàng)建一個(gè)my-project的文件夾
1
3、進(jìn)入項(xiàng)目
cd my-project
1
4、安裝依賴
npm install
1
5、啟動(dòng)項(xiàng)目
npm run dev
1
以上執(zhí)行完后會(huì)出現(xiàn)一個(gè) my-project 項(xiàng)目文件夾,用vscode打開后會(huì)看到以下目錄
下面解釋一下這些文件及目錄分別是干什么的
目錄結(jié)構(gòu)的分析
1、bind
├── build // 項(xiàng)目構(gòu)建(webpack)相關(guān)代碼 記憶:(夠賤) 9個(gè)
│ ├── build.js // 生產(chǎn)環(huán)境構(gòu)建代碼
│ ├── check-versions.js // 檢查node&npm等版本
│ ├── dev-client.js // 熱加載相關(guān)
│ ├── dev-server.js // 構(gòu)建本地服務(wù)器
│ ├── utils.js // 構(gòu)建配置公用工具
│ ├── vue-loader.conf.js // vue加載器
│ ├── webpack.base.conf.js // webpack基礎(chǔ)環(huán)境配置
│ ├── webpack.dev.conf.js // webpack開發(fā)環(huán)境配置
│ └── webpack.prod.conf.js // webpack生產(chǎn)環(huán)境配置
2、config
├── config// 項(xiàng)目開發(fā)環(huán)境配置相關(guān)代碼 記憶: (環(huán)配) 3個(gè)
│ ├── dev.env.js // 開發(fā)環(huán)境變量(看詞明意)
│ ├── index.js //項(xiàng)目一些配置變量
│ └── prod.env.js // 生產(chǎn)環(huán)境變量
3、node_modules
├──node_modules// 項(xiàng)目依賴的模塊 記憶: (依賴) *個(gè)
4、src
├── src// 源碼目錄 5
1
│ ├── assets// 資源目錄
│ │ └── logo.png
2
│ ├── components// vue公共組件
│ │ └── Hello.vue
3
│ ├──router// 前端路由
│ │ └── index.js// 路由配置文件
4
│ ├── App.vue// 頁面入口文件(根組件)
5
│ └── main.js// 程序入口文件(入口js文件)
5、static
└── static// 靜態(tài)文件,比如一些圖片,json數(shù)據(jù)等
│ ├── .gitkeep
6、剩余的文件
├── .babelrc// ES6語法編譯配置
├── .editorconfig// 定義代碼格式
├── .gitignore// git上傳需要忽略的文件格式
├── index.html// 入口頁面
├── package.json// 項(xiàng)目基本信息
├── README.md// 項(xiàng)目說明
---------------------
藍(lán)藍(lán)設(shè)計(jì)( www.yvirxh.cn )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 、平面設(shè)計(jì)服務(wù)。
如果您想訂閱本博客內(nèi)容,每天自動(dòng)發(fā)到您的郵箱中, 請點(diǎn)這里
項(xiàng)目概述QQ 20周年,是互聯(lián)網(wǎng)產(chǎn)品長青的一個(gè)傳說,就在 20 周年的時(shí)間節(jié)點(diǎn),QQ 向用戶提供一份關(guān)于他自己的、真誠熱切的 QQ 數(shù)據(jù)總結(jié)。通過數(shù)字,匯集出每個(gè)人自己的 QQ 時(shí)光歷程,從而牽引出每個(gè)人對于成長、青春、溝通、時(shí)代流動(dòng)的感知與回憶,引發(fā) 2019 年一場集體的情感共鳴。
△ QQ 20年來的一路變遷
項(xiàng)目歷時(shí)兩個(gè)月,從項(xiàng)目初期,視覺和產(chǎn)品密集溝通,了解需求,進(jìn)行頭腦風(fēng)暴,輸出多個(gè)視覺方案縱向?qū)Ρ龋詈蟠_定視覺風(fēng)格,分配視覺工作(插畫,動(dòng)畫,3D)。項(xiàng)目后期,包括開發(fā)還原,數(shù)據(jù)調(diào)配等眾多環(huán)節(jié),環(huán)環(huán)相扣,缺一不可,一路過關(guān)斬將,整個(gè) H5 需要不同崗位的高度配合和各專業(yè)的高度默契。
△ H5的項(xiàng)目流程圖
1. 異地合作
本次 H5 聯(lián)動(dòng)了動(dòng)效,3D,插畫設(shè)計(jì)師的共同合作,由于支持 3D 的設(shè)計(jì)師在韓辦公,所以大部分都是在線上全英溝通,包括前期的項(xiàng)目進(jìn)度同步,還有后期的模型調(diào)整等環(huán)節(jié)都能及時(shí)反饋,快速反應(yīng),最后如期打磨出五款 spaceQQ。算是一次順利的異地合作。
△ 五款3D spaceQQ最終效果
2. 3D spaceQQ視覺還原
3D 鵝從設(shè)計(jì)軟件轉(zhuǎn)化為 H5 展示過程中,存在模型文件過大、材質(zhì)缺失等問題,直接影響用戶體驗(yàn)。在開發(fā)的過程中同學(xué)通過模型減面、重新選擇材質(zhì),還有模型拆分等解決方法,在視覺觀感和性能中建立了平衡的杠桿,最終實(shí)現(xiàn)了 15 個(gè) SPACE QQ 的視覺還原。
△ 五款3D spaceQQ最終視覺還原效果
3. 視覺工作的同步進(jìn)行
由于項(xiàng)目時(shí)間比較緊迫,而且 H5 加入了 3D 模型,還有需要大量的動(dòng)效,所以需要在同一時(shí)間線上,同步進(jìn)行,視覺稿輸出,動(dòng)畫制作和 3D 模型打磨??简?yàn)設(shè)計(jì)師的溝通和執(zhí)行能力。與此同時(shí),需要隨時(shí)和開發(fā)同步動(dòng)畫 demo 以確保動(dòng)畫可實(shí)現(xiàn)。和產(chǎn)品密集溝通,及時(shí)根據(jù)文案調(diào)整畫面。
因?yàn)?QQ 是陪伴了大多數(shù)用戶的一個(gè)產(chǎn)品,見證了整個(gè)互聯(lián)網(wǎng)社交的演變過程,容易引起用戶的情感共鳴。設(shè)計(jì)的初期,圍繞「個(gè)人軌跡」的主題發(fā)散了不同方向的視覺概念,在引起客戶共鳴感的復(fù)古元素和傳遞不斷「探索」未來的概念間尋找平衡點(diǎn)。最后沿用了 20 周年的太空概念貼合「探索」的主題,結(jié)合有年代特征的代表性視覺符號(hào)來引起「個(gè)人軌跡」的這一概念的用戶情感共鳴。另外,H5 運(yùn)用了 3D 打造了 15 只太空鵝,打造「個(gè)人軌跡」的專屬感,既聯(lián)動(dòng)用戶溫暖的回憶之余,也增添了一些小驚喜。
1. H5整體視覺風(fēng)格
QQ,是陪伴了大多數(shù)人成長的一個(gè)互聯(lián)網(wǎng)產(chǎn)品,其本身帶有很多高辨識(shí)度的視覺元素,例如對話框,提醒上線的音效等。因?yàn)?H5 本身是一個(gè)大數(shù)據(jù)總結(jié),專屬感非常強(qiáng)的一個(gè)產(chǎn)物,所以希望是喚醒用戶一些封塵已久的記憶,就像打開時(shí)間膠囊般的期待和感動(dòng)。同時(shí)也象征著 QQ 一直陪伴在身邊,從而引起用戶的共鳴。
設(shè)計(jì)方面,除了通過一些標(biāo)志性的視覺元素喚醒用戶的回憶之外,也加入 QQ 20周年的太空「探索」主題的元素,響應(yīng) 20 周年的主題之余,也寓意 QQ 不斷地對外探索,從多個(gè)維度來看世界,尋找有趣的內(nèi)容。
對話框,是承載數(shù)據(jù)的視覺符號(hào),也是貫穿整個(gè) H5 的重要視覺符號(hào)之一。寓意著 QQ 一直致力于「溝通」,而且不同時(shí)代的 QQ 對話框都各有特點(diǎn),也是見證 QQ 時(shí)代變遷的重要元素,所以提取了三個(gè)階段代表性的對話框樣式來承載數(shù)據(jù),并且加入有時(shí)代特征的視覺元素(如bb機(jī),像素化的小箭頭等)作為輔助,增加 H5 的氛圍感,也算是視覺上的「小彩蛋」。
△ QQ原始對話框
H5 加入一些趣味感的元素,如笑臉,愛心等元素,背景輔以流動(dòng)的彩色不規(guī)則圖案,來增加對話框的玩味。也寓意 QQ 20年來給用戶帶來源源不斷的樂趣,留下了不可取代的時(shí)代印記。
△ 重繪對話框
H5 中也加入了很多好玩的元素,不同時(shí)代所用的移動(dòng)設(shè)備,融合貼近太空「探索」主題的背景;利用帶手套的手和不同的元素進(jìn)行互動(dòng);增加重繪經(jīng)典頭像的互動(dòng)動(dòng)畫,加入 QQ 空間的植物等懷舊元素,增加 H5 的可玩性和驚喜感。
△ 經(jīng)典頭像的重繪
△ 經(jīng)典頭像穿插在H5中的小彩蛋
△ 帶手套的手和有時(shí)代標(biāo)簽的元素互動(dòng)
1. 視覺動(dòng)態(tài)化方案
在動(dòng)畫制作前期會(huì)出一份詳細(xì)的動(dòng)態(tài)化分頁策劃,以及一份盡可能表達(dá)完整的動(dòng)畫 demo,能便于設(shè)計(jì)與開發(fā)能準(zhǔn)確的估算出制作周期。在開發(fā)完成預(yù)研測試后,基于動(dòng)畫 demo 共同制定一個(gè)大致的動(dòng)態(tài)化方案──對話框等大面積使用代碼實(shí)現(xiàn),其他裝飾性小元素全部使用序列幀。在觀眾每滑一頁即可觸發(fā)當(dāng)前頁的動(dòng)畫,且能保證大體動(dòng)畫的流暢度。
2. 動(dòng)畫制作
為了盡可能減少 H5 的運(yùn)算體積,又保證畫面動(dòng)態(tài)的流暢程度,導(dǎo)出的序列必須滿足以下所有條件:
△ 設(shè)計(jì)了4個(gè)不同的色塊流動(dòng)loop,方便開發(fā)安插在每頁合適的位置
3. 導(dǎo)出與同步
在配合開發(fā)導(dǎo)出的階段,為了能明確序列的標(biāo)記,所有序列文件命名為 xx-in/xx-loop/xx-out。使用同步工具以實(shí)現(xiàn) AE 動(dòng)畫序列導(dǎo)出和開發(fā)提取素材能同步進(jìn)行,并保持實(shí)時(shí)更新和迭代。
△ 第6頁動(dòng)畫導(dǎo)出序列
創(chuàng)建了四款全新的 spaceQQ,根據(jù)用戶的 QQ 年齡而設(shè)計(jì)。根據(jù)用戶的 QQ 年齡,分了四個(gè)款式的鵝:奢華,智能,閃亮和神秘四個(gè)概念,一個(gè)遞進(jìn)的尊貴程度,刺激用戶分享欲。包括基礎(chǔ)款的 QQ 在內(nèi),共創(chuàng)造了 5 個(gè)類型的 spaceQQ。每個(gè)設(shè)計(jì)都基于基本 spaceQQ 的形式,但是套裝的顏色和細(xì)節(jié)根據(jù)各自的概念各有特色。
△ spaceQQ總覽圖
用戶可以根據(jù)自己的喜好更改這 5 款 spaceQQ 的裝扮顏色。
1. 專屬感
整個(gè) H5 始終緊扣 QQ 20周年的太空「探索」主題,整個(gè) H5,除了用數(shù)據(jù)喚醒用戶和 QQ 多年的點(diǎn)點(diǎn)滴滴之外,5 個(gè) spaceQQ 概念設(shè)定,既能增加用戶的新鮮感,又能刺激用戶的分享欲,C4D 建立的 3D 形象豐富了整個(gè) H5 的視覺層次,深化了 QQ 品牌的影響力,寓意鵝廠一直與時(shí)俱進(jìn),緊貼潮流。
2. 情緒調(diào)動(dòng)
對于當(dāng)下的運(yùn)營活動(dòng)來說,趣味性是引爆轉(zhuǎn)發(fā)量的重要元素,H5 結(jié)合 QQ 用戶創(chuàng)作的背景音樂和能夠調(diào)動(dòng)用戶情感的設(shè)計(jì)語言來釋放用戶的情緒,比如驚喜感(用戶結(jié)合 QQ 的標(biāo)志性音效創(chuàng)作的背景音樂),榮譽(yù)感(不同 Q 齡獲取相應(yīng)的 spaceQQ)等,讓用戶產(chǎn)生持續(xù)的驚喜感,在懷舊和新鮮感中得到滿足,提升用戶活躍性。
QQ 20周年 H5 設(shè)計(jì),嘗試結(jié)合了 3D,動(dòng)畫,插畫等設(shè)計(jì)形態(tài),為每一位用戶打造專屬的「個(gè)人軌跡」,通過數(shù)字,拼湊出和 QQ 的過往朝夕,引起用戶共鳴。鵝廠不斷創(chuàng)新探索的同時(shí),也為用戶溫存屬于用戶自己的專屬回憶,深化 QQ 的品牌價(jià)值。
福利
考慮到部分同學(xué)想更仔細(xì)地查看、保存或收藏高清大圖的需求,我們設(shè)置了關(guān)鍵詞,微信公眾號(hào)后臺(tái)以「spaceQQ+序號(hào)」的方式回復(fù),例如「spaceQQ1」,即可逐一獲取對應(yīng)的高清頭像和壁紙。
掃碼領(lǐng)取專屬「個(gè)人軌跡」:
藍(lán)藍(lán)設(shè)計(jì)( www.yvirxh.cn )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 、平面設(shè)計(jì)服務(wù)。
藍(lán)藍(lán)設(shè)計(jì)的小編 http://www.yvirxh.cn