最新大地资源网在线观看免费_免费大地资源中文第二页在线观看_大地 ,久久精品黄色网络_日韩黄色三级中文字幕_中文字幕免费乱伦视频_午夜小电影亚洲天

首頁

UI 工作流程指南:需求分析

濤濤

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

完整的 UI 設(shè)計流程到底是怎樣的?從需求到產(chǎn)品上線,要經(jīng)歷多少個階段,每個階段有哪些應(yīng)該掌握的基礎(chǔ)知識,本次優(yōu)設(shè)獨家專題為你從零開始梳理出 UI 工作流程,適合新手閱讀學(xué)習(xí)。

本篇工作流程第一節(jié):需求分析。

UI 設(shè)計工作,包括 APP 設(shè)計、網(wǎng)頁設(shè)計、小程序設(shè)計等方面。而一個產(chǎn)品完整的 UI 設(shè)計流程,是指拿到一個新的項目需求后,從設(shè)計思考開始,產(chǎn)品前期分析,設(shè)計產(chǎn)品,設(shè)計評審,用戶測試,直至產(chǎn)品上線。

我們的工作流程如下:

以上的流程都是與設(shè)計師密切相關(guān)的內(nèi)容,我們的關(guān)注點不能只有視覺效果,孤立的設(shè)計容易脫離產(chǎn)品,反復(fù)修改,因此前期分析與后期支持都值得我們重視。

產(chǎn)品立項后的第一階段是需求分析階段,當(dāng)我們拿到一個新的需求時,首先要了解的就是產(chǎn)品的需求是什么,了解市場背景、產(chǎn)品定位、概念,客戶的需求是什么。

一般來說,我們接到的需求分為三類:全新產(chǎn)品、現(xiàn)有產(chǎn)品新增功能、產(chǎn)品改版。

需求文檔類型

前期分析階段中,需求方主要是與產(chǎn)品經(jīng)理進行溝通,產(chǎn)出文檔有三種:

  • BRD文檔(Business Requirement Document):商業(yè)需求文檔,基于商業(yè)目標(biāo)或價值所描述的產(chǎn)品需求內(nèi)容文檔(報告)。
  • MRD文檔(Market Requirement Document):市場需求文檔,該文檔在產(chǎn)品項目過程中屬于「過程性」文檔,由產(chǎn)品經(jīng)理或者市場經(jīng)理編寫的一個產(chǎn)品說明需求的文檔。
  • PRD文檔(Product Requirement Document):產(chǎn)品需求文檔是將商業(yè)需求文檔(BRD)和市場需求文檔(MRD)用更加專業(yè)的語言進行描述。

分析類網(wǎng)站推薦

產(chǎn)品分析緯度

有了數(shù)據(jù)參考來源后,我們就能從五個緯度分析產(chǎn)品。

1. 產(chǎn)品分析

市場背景、產(chǎn)品業(yè)務(wù)、現(xiàn)有產(chǎn)品各項數(shù)據(jù)。

2. 用戶畫像

  • 顯性畫像:即用戶群體的可視化的特征描述。如目標(biāo)用戶的年齡、性別、職業(yè)、地域、興趣愛好等特征。
  • 隱性畫像:用戶內(nèi)在的深層次的特征描述。包含了用戶的產(chǎn)品使用目的、用戶偏好、用戶需求、產(chǎn)品的使用場景、產(chǎn)品的使用頻次等。

3. 需求確認

產(chǎn)品需求主要是為了滿足用戶或企業(yè)價值,所以一定要確認重要且緊要的需求內(nèi)容是什么,什么功能和內(nèi)容暫時不需要做,什么功能和內(nèi)容放在后期做,因此設(shè)計時也要考慮產(chǎn)品未來的擴展性。

4. 邏輯流程

  • 邏輯流程,整個產(chǎn)品的邏輯、內(nèi)部流程;
  • 用戶路徑,描述用戶在產(chǎn)品內(nèi)部的路徑。

5. 競品分析

和國內(nèi)外同類產(chǎn)品進行比較分析,知己知彼。

競品選擇,從兩個方向出發(fā):

  • 從產(chǎn)品類型出發(fā):比如我們需要設(shè)計的產(chǎn)品是財務(wù)類,選擇的方向也是同類財務(wù)類產(chǎn)品;
  • 從產(chǎn)品功能出發(fā):比如說財務(wù)產(chǎn)品中有著支付購買的功能板塊,選擇的競品也包括了購物、生活類產(chǎn)品。

相關(guān)教程:《視覺設(shè)計師如何做競品分析?來看這份超全面的指南!》

最后,比起產(chǎn)品經(jīng)理來說,設(shè)計師在這個階段能獲三個信息:

  • 自己需要完成什么;
  • 要做到什么程度;
  • 擴展性的考慮,可以在設(shè)計時預(yù)留位置。

文檔整理工具

語雀:https://www.yuque.com

藍藍設(shè)計m.wnxcall.com )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 平面設(shè)計服務(wù)

產(chǎn)品設(shè)計之「取消按鈕」的使用詳解 | 細節(jié)分析

濤濤


如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

通過對「取消按鈕」的分析,指導(dǎo)各位正確的進行對于「按鈕」的設(shè)計。


按鈕,無論是在 Web 還是 App 上都被廣泛地使用,而很少有設(shè)計師會注意到按鈕當(dāng)中的細節(jié),導(dǎo)致在設(shè)計過程中出現(xiàn)一些低級的錯誤,使得用戶在完成任務(wù)的過程中產(chǎn)生阻礙,無法順利達成目的。


在許多優(yōu)秀的產(chǎn)品中,關(guān)于按鈕的設(shè)計已經(jīng)有了一套相應(yīng)的規(guī)范去執(zhí)行。作為設(shè)計師,應(yīng)該總結(jié)這些規(guī)范,并產(chǎn)出一套適用于自家產(chǎn)品的設(shè)計規(guī)則。這也是我寫「按鈕規(guī)范」系列文章的目的。


今天主要先與各位聊聊「取消按鈕」的設(shè)計思路。


關(guān)于「取消」,大多數(shù)人對其理解還停留在 PC 端,認為「取消」的目的就是讓用戶停止操作上的流程。但時至今日,「取消按鈕」的設(shè)計已經(jīng)有許多解法與思路,如果不仔細研究與分析,可能會忽略一些用戶行為上的細節(jié)。


所以我們從下面三個大點來聊聊「取消按鈕」的設(shè)計:

  1. 按鈕中的「召喚行為」(理清按鈕設(shè)計的概念)

  2. 其背后的控制權(quán)(關(guān)于按鈕的權(quán)重信息)

  3. 「取消按鈕」的正確解法(重點)



按鈕中的「召喚行為」


通常,我們在產(chǎn)品中會為了達成某種指標(biāo),需要在界面上引導(dǎo)用戶去完成我們希望其完成的操作。且這類操作是可以達成某種目的的,我們把這類操作稱為「召喚行為」,即從元素的角度引導(dǎo)用戶完成任務(wù)。


這類「召喚行為」最常出現(xiàn)的,是在按鈕設(shè)計的過程中。


用戶如何將元素理解為按鈕?就是通過對形狀和顏色的控制,使該元素看起來像一個按鈕。



它唯一的作用就是讓用戶點擊,并且是主動讓用戶點擊。

我們經(jīng)常在各類設(shè)計中見到這樣的按鈕設(shè)計,或許還有更多樣式,如:



它們的目的一致,都是召喚用戶進行點擊,至于類型的選擇一般根據(jù)功能界面的上下文情況進行判斷。


其重要程度也是以此順序排列:凸起 > 扁平 > 邊框 > 文本。


這類設(shè)計的結(jié)果就是:無需讓用戶思考要點哪里,而是直接判斷下一步是否進行。幫助用戶簡化一個思考點。


注:因為判斷是否進行的操作還取決于功能本身以及文案的提示,與我們今天要聊的不是一回事。所以我們跳過這塊,直接聊「召喚行為」與「取消按鈕」的關(guān)系。


這段內(nèi)容各位只要記?。?strong style="outline:0px;margin:0px;padding:0px;">按鈕的行進與回退,基本遵循「召喚行為」的思路來設(shè)計。


這個概念知道了,我們就可以對后面的內(nèi)容繼續(xù)進行拆解了。



背后的控制權(quán)


接下來我們從多個角度來挖一下「取消按鈕」的設(shè)計,分析其不同地位。


a. 安全性后退


「取消」在多數(shù)情況下,意為安全性地后退,并將界面恢復(fù)到原有的內(nèi)容上,不對界面與功能本身造成破壞,防止對系統(tǒng)進行不必要地更改的「安全措施」。


所以正常來說,「取消按鈕」不是「召喚行為」。以至于通常在設(shè)計上會被弱化,以表示該按鈕在功能的流程中,不是主要的,且是提供給用戶作為回退余地的操作。


如:



在這張圖里,「登錄」是「召喚行為」,所以突出顯示。根據(jù)風(fēng)格定義,用了扁平按鈕。而取消在這個場景里屬于「安全性后退」的操作,于是將其弱化。


這是多數(shù)產(chǎn)品采用的設(shè)計方式。


比如美團的這個頁面:



產(chǎn)品希望用戶登錄,就會強化「登錄」行為的按鈕,弱化「回退」行為的按鈕。


同樣,我們在微信朋友圈的設(shè)計里也能見到這樣的設(shè)計:



我們總是希望用戶持續(xù)操作下去,但也要給用戶提供回退的行為,所以在這些設(shè)計中,「取消按鈕」會被弱化,「行進按鈕」會被強化,因為「取消按鈕」在這里不是產(chǎn)品人員期望的「召喚行為」。


這是一直以來的設(shè)計共識,但如今也發(fā)生了些許變化?!溉∠粹o」也開始具備「召喚行為」的屬性。


b. 強化「取消按鈕」


當(dāng)我們不希望用戶退出某個界面,或停止某個流程時,往往會選擇將「取消按鈕」強化。


如:



或:



通過對字體的加粗,以暗示用戶不要輕易退出。在這個流程里,「取消按鈕」具備了「召喚行為」屬性。


也有產(chǎn)品通過改變「取消按鈕」的文案,讓其具備「召喚行為」的屬性,使得用戶在此過程中輕易不要退出該流程:



這里的「繼續(xù)選座」就是「取消」,因為這里的「取消」成了「召喚行為」,所以通過改變文案的方式,確保用戶留下來繼續(xù)進行流程中的任務(wù)。


但是不可取的是,這里的「返回」反而給了用戶一種需要思考的壓力。返回?是留在這里,還是退出去?思考幾秒后,反應(yīng)過來,是退出去。這樣的文案與只有在看到「繼續(xù)選座」后進行對比,才能反應(yīng)過來具體是什么意思,除非是用戶具備操作習(xí)慣,知道「右邊」是「行進」操作,才能很快理解。(當(dāng)然還有個問題,我們在第三各模塊來說明)


但是多數(shù)用戶還是得思考一下,所以要改,最好兩者文案都能改了,否則思考的「停頓」會讓用戶產(chǎn)生厭惡感。


且在一些產(chǎn)品界面里,為了避免用戶在流程中終止行為,甚至?xí)D(zhuǎn)移「取消」與「行進」兩者的位置,如:



之前截圖了某個產(chǎn)品的界面,寫文這天發(fā)現(xiàn)已經(jīng)改回來,這里就沒放了。


各位謹記,最好不要這樣進行設(shè)計,因為用戶在 App 的操作上已經(jīng)習(xí)慣左邊取消,右邊行進,調(diào)換位置雖然能暫時解決用戶的退出行為,但容易產(chǎn)生誤操作,與用戶的期望不同,導(dǎo)致在產(chǎn)品體驗上會被用戶排斥。


所以到這里,先給一個結(jié)論,即在 App 的設(shè)計上,行進操作在右,回退操作在左,召喚屬性根據(jù)場景對按鈕做突出處理。


但是「取消按鈕」真的應(yīng)該具備召喚屬性么?不著急,我們第三模塊再細聊。下面我們先聊聊 Web 與 App 的之間的差異。


c. Web 與 App 的位置差異


我們現(xiàn)在見到越來越多的 Web 端產(chǎn)品,也開始遵循 App 產(chǎn)品的設(shè)計,把「取消按鈕」放在左邊,「召喚行為」按鈕放在右邊。


但在早期,Web 的「取消按鈕」基本是放在右邊,原因是鼠標(biāo)的移動路徑是根據(jù)眼動規(guī)則來,我們的視線會首先與文案聚焦到「召喚行為」的按鈕上,也就是左邊,這時候鼠標(biāo)輕而易舉地隨之而來。


而手指行為的操作,會以右為前進導(dǎo)向,且右手手勢因為便捷性,也會以右為確認操作。否則單手持機,且行進路徑長的話,用戶想進行確認操作會相對比較吃力。



這就是 Web 與 App 在按鈕位置上的主要區(qū)別。


那會有同學(xué)問到說 Web 的「取消」到底是放在左邊還是右邊?這里我說點自己的想法。


如果根據(jù)眼動規(guī)則與鼠標(biāo)的操作模式來說,Web 「取消按鈕」當(dāng)然是放在右邊更為合適。但如今人們已經(jīng)習(xí)慣了移動產(chǎn)品的「右行進,左取消」屬性,且在界面上的視覺終點一般是在右邊,能引導(dǎo)用戶進行召喚行為。


但這不具備指導(dǎo)性原則,如果要拆開說,里面還有很多說法。


比如 windows 和 macOS 的設(shè)計規(guī)范里「取消按鈕」的位置完全是相反的。win 的取消在右,macOS 的取消在左。



兩套體系的按鈕位置相互矛盾。這件事本身也說明,只要你在你的 Web 產(chǎn)品里規(guī)范好自己的設(shè)計體系,就沒有對錯之分。不要一會兒這個「取消」在左邊,一會兒那個「取消」又在右邊,給用戶造成認知障礙即可。


但是!我更推崇 macOS 的設(shè)計規(guī)范。原因在于成熟度與一致性。


主觀因素:眾所周知,蘋果是更擅長做設(shè)計的公司,體驗過 Mac 的朋友應(yīng)該能理解我說的這句話。一般來說,我只聽過從 Win 切換到 Mac 的,沒有說從 Mac 切換到 Win 的,除了少部分因為工作需求需要同步使用的。


客觀因素:移動產(chǎn)品的普及,已經(jīng)有相當(dāng)成熟的設(shè)計體系支持行進按鈕右側(cè)化設(shè)計,統(tǒng)一 Web 或 PC 產(chǎn)品只會讓用戶的操作行為更方便。


這就是我本小節(jié)想聊的,關(guān)于 Web 與 App 按鈕設(shè)計的差異。



「取消按鈕」的正確解法


我相信,只要是平時稍微有認真觀察的同學(xué),都能知道我上述聊的內(nèi)容。我個人也不認為這些內(nèi)容具備任何需要總結(jié)的價值。但是如果不寫出來,就沒辦法說明我接下來要聊的內(nèi)容,也是我這篇文章的重點部分。


通過上述內(nèi)容,我以不同類型的按鈕案例來解釋「取消按鈕」的控制權(quán)。各位可以看出,即使是不同類型的「取消按鈕」,在權(quán)重上的道理也都是一樣的。


但我上面舉的所有產(chǎn)品功能的例子,都不是最佳設(shè)計方案,包括微信。


那如何設(shè)計才是最佳方式呢?取消按鈕真的具備召喚行為?


a. 界面層與彈框?qū)?/strong>


其實嚴謹點來說,界面層的「取消按鈕」與彈框?qū)拥摹溉∠粹o」的意義是不同的。


雖然都是安全性后退,但是前者多了一層含義:放棄屬性。


還是微信朋友圈的界面:



這里的「取消按鈕」有兩個狀態(tài),一是用戶剛點進來,無任何操作,點擊取消,解散該頁面;二是進來之后,附帶操作行為,這時候點擊取消,不僅僅是解散當(dāng)前頁面,還包括「放棄當(dāng)前編輯的狀態(tài)」。


所以會彈出第二層彈窗:



這時候無論點擊「保留」還是「不保留」都是取消,退出當(dāng)前編輯頁面,不對系統(tǒng)產(chǎn)生變更行為,但都屬于放棄了當(dāng)前操作。

無非就是微信通過加粗「保留」來告訴用戶,這里的召喚行為是它而已。


所以這層「取消」的含義,不僅僅是取消,還多了一步是否把你放棄的內(nèi)容保留下來的邏輯。


因此在這層含義上,「取消按鈕」也需要特殊處理。


如果說微信這里的「取消按鈕」在設(shè)計上沒有突出其特殊性,那 Twitter 同樣的例子,就比微信高明很多:



同樣是發(fā)布行為,Twitter 在「取消按鈕」上選用了品牌色。因為在其編輯狀態(tài)下點擊取消,會出現(xiàn)與微信同樣的情況:




而 Twitter 的高明之處不僅僅在其對于「取消按鈕」的樣式處理,還在于其對是否「保留」做了明確的設(shè)計區(qū)分:微信的保留等于 Twitter 的保存草稿,不保留等于刪除。而在通用型設(shè)計規(guī)范里,刪除內(nèi)容在樣式上應(yīng)該區(qū)別于發(fā)布以及取消。


更甚者是,其彈出的這個彈框中,還保留了真正意義上的「取消」,即解散行為。在 Twitter 的這個設(shè)計上,兩個取消雖然都叫取消,但是通過顏色進行區(qū)分,來表示它們之間在邏輯上的差異,這才是我說的高明之處 —— 對每個按鈕的處理都恰到好處。


類似的還有微博,但是微博對于「取消按鈕」的類型差異沒有做出區(qū)分,原因在于它為了弱化界面層的取消,與彈框?qū)拥娜∠麡邮奖3至艘恢隆?



雖然沒什么太大問題,但從嚴格的邏輯上來說,這兩者取消是存在歧義的。只是用戶已經(jīng)習(xí)慣且理解了,所以沒要造成使用的負擔(dān)。


微信的彈框雖然避免了這層歧義,但在操作上還是不夠直觀,我每次發(fā)微信朋友圈,點取消彈出「保留」與「不保留」我都要停頓一下謹慎地進行選擇,生怕自己點錯。


當(dāng)然,這里面還有關(guān)于顏色的說法。


這時候再對比 Twitter 的界面就能看出設(shè)計師之間的差距了。


b. 彈框?qū)印溉∠诡伾牟町?/strong>


上面提到的許多例子中,還存在一個類似的問題:它們大多選用 iOS 自帶的彈框直接做為操作對象。


我始終覺得在 iOS 提供的彈框中,兩個操作的按鈕顏色保持一致是不對的。


粗細有時候很難被直觀感受,而顏色可以在第一時間被感知。


比如前面提到的這個案例:



理想情況下,即使用戶知道右邊是行進,左邊是取消,但彈出這個彈框的時候,不免還是需要再次閱讀一遍進行確認。


但如果改個顏色,好像就更好理解(當(dāng)然文案也是問題,但優(yōu)先級弱于顏色),畢竟彈框也是設(shè)計的一部分:



需要注意的是,用戶既然已經(jīng)選擇取消,就盡量明確的告知用戶,不要為了留存而留存,以至于模糊化該彈窗的選擇結(jié)果。

所以召喚行為,并不是強迫用戶去做,而是遵循用戶的「旨意」去提供選擇。這里的「返回」才是真正的召喚行為,而「取消」并不具備召喚屬性。硬生生的給「取消」附上召喚屬性,只會讓用戶在操作時摸不著頭腦。


包括下圖,我常常因為在使用 App 時,彈出這樣的彈框,而不能在第一時間進行正確的點擊,選擇退出當(dāng)前的 App。



這樣例子還有很多。


但是我覺得做得好的,應(yīng)該是這樣的:



或:



這就是刻板印象造成的結(jié)果。我們應(yīng)該學(xué)會適當(dāng)?shù)厥褂每丶?,并根?jù)自己的產(chǎn)品對其進行優(yōu)化。而不是一味跟風(fēng)。


綜上所述:界面層的取消,為了表示其作用性的不同,且界面元素眾多,突出顏色是沒問題的;但彈框?qū)拥娜∠c確認在顏色上沒做區(qū)分,直接用不太明顯的粗細效果讓用戶聚焦于這兩個內(nèi)容的選擇上,其實是不友好的設(shè)計。


如果對 iOS 設(shè)計規(guī)范有足夠的了解的同學(xué)就能知道:它們在彈框控件上給出的兩個選擇都不是真正意義上的召喚行為按鈕,只是常規(guī)內(nèi)容,且更適用于產(chǎn)品開發(fā),而不是設(shè)計指導(dǎo)。


如果你仔細觀察 macOS 的設(shè)計,就能發(fā)現(xiàn)他們?yōu)榫邆湔賳拘袨榈陌粹o位置與顏色都做了特殊處理,并不是簡單的同色系,或用粗細表示。如圖:



雖然用 macOS 來反駁 iOS 似乎不太合理,但我只是想說明在設(shè)計結(jié)果上,我們應(yīng)該有自己的思考。


就這個問題,我在 Twitter 上咨詢了前 Apple,后創(chuàng)辦了 UXM 的產(chǎn)品設(shè)計師 Anthony。原因是,他曾經(jīng)也就「取消按鈕」的顏色提出過一些個人看法。


在我說了這些內(nèi)容之后,他跟我說的第一句話是:

Hi Dai — While Apple is very good at design, they are not perfect.(Apple 非常擅長設(shè)計,但它們并不完美。) 

接著他繼續(xù)說道:你這套理論非常棒,所以你完全可以按它去給自己的產(chǎn)品構(gòu)建一套設(shè)計規(guī)范,并不一定要遵循 Apple。


借著這個機會,我還跟他聊了許多其他內(nèi)容。而這件事本身再一次驗證了我的想法:越牛逼的人越謙虛,且平易近人。


哦,不是,跑題了,應(yīng)該是:不存在完美的設(shè)計規(guī)范,設(shè)計師在成長過程中并不一定要循規(guī)蹈矩,受到規(guī)則的限制,認為設(shè)計就該如此。而是學(xué)會獨立思考,突破屏障,去挖掘更深層次的內(nèi)容。


看完這篇文章,再去翻一翻 Google Material Design Guidelines,就會有一種「哇哦!原來如此!」的感觸了。



小結(jié)


所以我這篇文章的內(nèi)容結(jié)論是:

  1. 位置固定,左回退,右行進;

  2. 顏色區(qū)分,左淺色,右深色;

  3. 召喚行為不是用戶想做的事,而是我們應(yīng)該要讓用戶做的事,但不是強迫,所以正常情況下,「取消按鈕」通常不具備召喚屬性。


可能有人會覺得,這么一個小問題,不至于用這么長一篇文章來說明,不過人么,就是存在這樣那樣的區(qū)別。我認為需要就可以了。


本來這篇文章還有一段關(guān)于「手勢按鈕尺寸」的內(nèi)容,不過到目前為止,文章內(nèi)容太長了,所以我暫時去掉了,會在之后的文章里分享給大家。


當(dāng)然,到此為止,我聊的內(nèi)容基本適用于通用場景,且適用于大部分的產(chǎn)品設(shè)計,但在一些特殊場景下的按鈕位置、顏色,也會有不同設(shè)計方式,這就要根據(jù)具體問題來具體分析。


我這里只是把「取消按鈕」的設(shè)計差異、細節(jié)提供給大家,以便幫助各位在工作中有更深入的思考,而不是想當(dāng)然的說就是放左邊或右邊,或者就應(yīng)該是什么顏色等等。包括對待其他內(nèi)容也一樣。

藍藍設(shè)計m.wnxcall.com )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制  用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 平面設(shè)計服務(wù)。


vue 移動端彈出鍵盤導(dǎo)致頁面fixed布局錯亂

seo達人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

話不多說,直接上問題圖片


這里確認按鈕是fixed布局 bottom:0 彈出鍵盤之后按鈕被頂?shù)搅随I盤上面

網(wǎng)上搜到的解決方案有兩種,

一種是監(jiān)聽頁面高度(我采用的這種)

一種是監(jiān)聽軟鍵盤事件(ios和安卓實現(xiàn)方式不同,未采用)

下面是實現(xiàn)代碼

data() {
    return {
        docmHeight: document.documentElement.clientHeight ||document.body.clientHeight,
        showHeight: document.documentElement.clientHeight ||document.body.clientHeight,
        hideshow:true  //顯示或者隱藏footer
    }
  },
watch: {
        //監(jiān)聽顯示高度
      showHeight:function() {
          if(this.docmHeight > this.showHeight){
            //隱藏
              this.hideshow=false
          }else{
            //顯示
              this.hideshow=true
          }
      }
  },
mounted() {
      //監(jiān)聽事件
      window.onresize = ()=>{
          return(()=>{
              this.showHeight = document.documentElement.clientHeight || document.body.clientHeight;
      })()
      }
 
  },
<div class="bottom" v-show="hideshow">
    <div class="btn">
      確認操作
    </div>
  </div>
我這里使用的是方法是:當(dāng)鍵盤彈出時,將按鈕隱藏。如果必須出現(xiàn)按鈕的話,可以修改按鈕回歸到正常的流中。
藍藍設(shè)計m.wnxcall.com )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)

【Vue原理】Watch - 白話版

seo達人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

【Vue原理】Watch - 白話版
簡述 響應(yīng)式
監(jiān)聽的數(shù)據(jù)改變的時,watch 如何工作
設(shè)置 immediate 時,watch 如何工作
設(shè)置了 deep 時, watch 如何工作
舉栗子
結(jié)論
沒有設(shè)置 deep
設(shè)置了 deep
實際證明
專注 Vue 源碼分享,為了方便大家理解,分為了白話版和 源碼版,白話版可以輕松理解工作原理和設(shè)計思想,源碼版可以更清楚內(nèi)部操作和 Vue的美,喜歡我就關(guān)注我的公眾號,公眾號的文章,排版更好看

如果你覺得排版難看,請點擊下面公眾號鏈接

【Vue原理】Watch - 白話版


今天我們用白話文解讀 watch 的工作原理,輕松快速理解 watch 內(nèi)部工作原理。你說,你只懂怎么用的,卻不懂他內(nèi)部是怎么工作的,這樣能有什么用?

近期有篇 《停止學(xué)習(xí)框架》很火,其實本意不是讓我們不要學(xué)框架,而是讓我們不要只停留在框架表面,我們要學(xué)會深入,以一敵十,讓我們也要學(xué)會框架的抽象能力

watch 想必大家用得應(yīng)該也挺多的,用得也很順,如果你順便花一點點時間了解一下內(nèi)部的工作原理,相信肯定會對你的工作有事半功倍的效果

watch 的工作原理其實挺簡單的,如果你有看過我之前講解其他選項的文章,你可以一下子就明白 watch 是如何工作的,所以這邊文章我也?得很快

根據(jù) watch 的 api,我們需要了解三個地方

1、監(jiān)聽的數(shù)據(jù)改變的時,watch 如何工作

2、設(shè)置 immediate 時,watch 如何工作

3、設(shè)置了 deep 時,watch 如何工作



簡述 響應(yīng)式
Vue 會把數(shù)據(jù)設(shè)置響應(yīng)式,既是設(shè)置他的 get 和 set

當(dāng) 數(shù)據(jù)被讀取,get 被觸發(fā),然后收集到讀取他的東西,保存到依賴收集器

當(dāng) 數(shù)據(jù)被改變,set 被觸發(fā),然后通知曾經(jīng)讀取他的東西進行更新

如果你不了解,可以查看下 以前的文章

【Vue原理】響應(yīng)式原理 - 白話版



監(jiān)聽的數(shù)據(jù)改變的時,watch 如何工作
watch 在一開始初始化的時候,會 讀取 一遍 監(jiān)聽的數(shù)據(jù)的值,于是,此時 那個數(shù)據(jù)就收集到 watch 的 watcher 了

然后 你給 watch 設(shè)置的 handler ,watch 會放入 watcher 的更新函數(shù)中

當(dāng) 數(shù)據(jù)改變時,通知 watch 的 watcher 進行更新,于是 你設(shè)置的 handler 就被調(diào)用了



設(shè)置 immediate 時,watch 如何工作
當(dāng)你設(shè)置了 immediate 時,就不需要在 數(shù)據(jù)改變的時候 才會觸發(fā)。

而是在 初始化 watch 時,在讀取了 監(jiān)聽的數(shù)據(jù)的值 之后,便立即調(diào)用一遍你設(shè)置的監(jiān)聽回調(diào),然后傳入剛讀取的值



設(shè)置了 deep 時, watch 如何工作
我們都知道 watch 有一個 deep 選項,是用來深度監(jiān)聽的。什么是深度監(jiān)聽呢?就是當(dāng)你監(jiān)聽的屬性的值是一個對象的時候,如果你沒有設(shè)置深度監(jiān)聽,當(dāng)對象內(nèi)部變化時,你監(jiān)聽的回調(diào)是不會被觸發(fā)的

在說明這個之前,請大家先了解一下

當(dāng)你使用 Object.defineProperty 給 【值是對象的屬性】 設(shè)置 set 和 get 的時候

1如果你直接改變或讀取這個屬性 ( 直接賦值 ),可以觸發(fā)這個屬性的設(shè)置的 set 和 get

2但是你改變或讀取它內(nèi)部的屬性,get 和 set 不會被觸發(fā)的

舉栗子
var inner = { first:1111 }
var test={    name:inner  }

Object.defineProperty(test,"name",{
    get(){         
        console.log("name get被觸發(fā)")         
        return inner
    },
    set(){        
        console.log("name set被觸發(fā)")
    }
})

// 訪問 test.name 第一次,觸發(fā) name 的 get
Object.defineProperty(test.name,"first",{
    get(){        
        return console.log("first get被觸發(fā)")
    },
    set(){        
        console.log("first set被觸發(fā)")
    }
})

// 訪問 test.name 第二次,觸發(fā) name 的 get
var a = test.name
// 獨立訪問 first 第一次
var b= a.first 
// 獨立訪問 first 第二次
b= a.first
// 獨立改變 first
a.first = 5


能看到除了有兩次需要訪問到 name,必不可少會觸發(fā)到 name 的 get

之后,當(dāng)我們獨立訪問 name 內(nèi)部的 first 的時,只會觸發(fā) first 的 get 函數(shù),而 name 設(shè)置的 get 并不會被觸發(fā)

結(jié)論
看上面的例子后,所以當(dāng)你的 data 屬性值是對象,比如下面的 info

data(){    

    return {        

        info:{ name:1 }

    }

}


此時,Vue在設(shè)置響應(yīng)式數(shù)據(jù)的時候, 遇到值是對象的,會遞歸遍歷,把對象內(nèi)所有的屬性都設(shè)置為響應(yīng)式,就是每個屬性都設(shè)置 get 和 set,于是每個屬性都有自己的一個依賴收集器

首先,再次說明,watch初始化的時候,會先讀取一遍監(jiān)聽數(shù)據(jù)的值

沒有設(shè)置 deep
1、因為讀取了監(jiān)聽的 data 的屬性,watch 的 watcher 被收集在 這個屬性的 收集器中

設(shè)置了 deep
1、因為讀取了監(jiān)聽的data 的屬性,watch 的 watcher 被收集在 這個屬性的 收集器中

2、在讀取 data 屬性的時候,發(fā)現(xiàn)設(shè)置了 deep 而且值是一個對象,會遞歸遍歷這個值,把內(nèi)部所有屬性逐個讀取一遍,于是 屬性和 它的對象值內(nèi)每一個屬性 都會收集到 watch 的 watcher

于是,無論對象嵌套多深的屬性,只要改變了,會通知 相應(yīng)的 watch 的 watcher 去更新,于是 你設(shè)置的 watch 回調(diào)就被觸發(fā)了

實際證明
證明 watch 的 watcher 深度監(jiān)聽時是否被內(nèi)部每個屬性都收集

我在 Vue 內(nèi)部給 watch 的 watcher 加了一個 屬性,標(biāo)識他是 watch 的 watcher,并且去掉了多余的屬性,為了截圖短一點
藍藍設(shè)計m.wnxcall.com )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)

FY品牌官網(wǎng)/移動端視覺設(shè)計

濤濤

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

Fucking Young(簡稱 FY) 是一家專注于男性半球的年輕美學(xué),我們自由使用和支配模特及藝術(shù)家合作,從而幫助自己與合作方達到合理的業(yè)務(wù)需求,建立一個擁有創(chuàng)造力的社區(qū),贊助和發(fā)布這些驚艷的作品在我們的官網(wǎng)甚至手機產(chǎn)品上。

帶來的作品有FY品牌官網(wǎng)與移動端設(shè)計,展示部分界面與交互動效,Gif輸出存在色差,實際情況以高保真視覺界面為準(zhǔn)。

FY品牌官網(wǎng)/移動端視覺設(shè)計FY品牌官網(wǎng)/移動端視覺設(shè)計FY品牌官網(wǎng)/移動端視覺設(shè)計FY品牌官網(wǎng)/移動端視覺設(shè)計FY品牌官網(wǎng)/移動端視覺設(shè)計FY品牌官網(wǎng)/移動端視覺設(shè)計FY品牌官網(wǎng)/移動端視覺設(shè)計FY品牌官網(wǎng)/移動端視覺設(shè)計FY品牌官網(wǎng)/移動端視覺設(shè)計FY品牌官網(wǎng)/移動端視覺設(shè)計FY品牌官網(wǎng)/移動端視覺設(shè)計FY品牌官網(wǎng)/移動端視覺設(shè)計FY品牌官網(wǎng)/移動端視覺設(shè)計FY品牌官網(wǎng)/移動端視覺設(shè)計FY品牌官網(wǎng)/移動端視覺設(shè)計FY品牌官網(wǎng)/移動端視覺設(shè)計

文章來源:UI中國

藍藍設(shè)計m.wnxcall.com )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制  用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 平面設(shè)計服務(wù)。

【W(wǎng)eb前端筆記07】列表與超鏈接

seo達人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

1.無序列表
無序列表是網(wǎng)頁中最常用的列表,之所以稱為“無序列表”,是因為其各個列表項之間為并列關(guān)系,沒有順序級別之分,列如:

<ul>
<li>列表1</li>
<li>列表2</li>
<li>列表3</li>
</ul>

2.有序列表
有序列表即為有順序的列表,其各個列表項會按照一定的順序排列,列如:

<ol>
<li>列表1</li>
<li>列表2</li>
<li>列表3</li>
</ol>


注:列表可以嵌套。

3.超鏈接標(biāo)記< a>
1.超鏈接
一個網(wǎng)站通常由多個頁面構(gòu)成,進入網(wǎng)站時首先看到的是其首頁,如果想從首頁跳轉(zhuǎn)到其子頁面,就需要在首頁相應(yīng)的位置添加超鏈接。其基本語法格式為:

<a href="跳轉(zhuǎn)目標(biāo)" target=“目標(biāo)窗口的彈出方式”>文本或者圖像</a>
1
其中,target有兩種取值方式:

–blank (在新窗口中打開)-self(默認在本窗口打開)

2.偽類
超鏈接標(biāo)記< a >的偽類 含義
a:link{ CSS樣式規(guī)則; } 未訪問時超鏈接的狀態(tài)
a:visited{ CSS樣式規(guī)則;} 訪問之后超鏈接的狀態(tài)
a:hover{ CSS樣式規(guī)則;} 鼠標(biāo)經(jīng)過,懸停時超鏈接的狀態(tài)
a:active{ CSS樣式規(guī)則;} 鼠標(biāo)單擊不動時超鏈接的狀態(tài)
--------------------- 
藍藍設(shè)計m.wnxcall.com )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)。

Tab Bar 圖標(biāo)動效設(shè)計類型總結(jié)

濤濤

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

Tab bar 作為整個 APP 的第一觸點,給用戶傳遞的理念及信息在整個 APP 中具有不可替代的重要性。我們的第一感受是粗糙或是精致,都會通過這個簡單的操作切換而感知。因此 tab bar 的設(shè)計,往往也是檢驗整個 APP 設(shè)計是否精致的標(biāo)準(zhǔn)。

Tab bar 設(shè)計中,有一個很重要但卻常常會被設(shè)計師們遺漏的關(guān)鍵點──tab 切換時的 「圖標(biāo)動畫設(shè)計」。如這些 APP 的底部 tab 設(shè)計都使用了這一種方式(以下視頻):

Tab bars圖標(biāo)動畫的作用

精彩的圖標(biāo)動畫,對整體的設(shè)計具有畫龍點睛的作用,降低 tab 切換時的枯燥感,提升操作的愉悅度和期待感。甚至可以通過 tab 的動畫設(shè)計給用戶傳達出整個 APP 設(shè)計的品牌及理念。

1. 動靜對比

動態(tài)的設(shè)計豐富了圖標(biāo)更多可能性的表達,結(jié)合不同的動態(tài)效果表達出不同的情緒或情感。而除了情感的表達之外,最基礎(chǔ)的作用在于動態(tài)比靜態(tài)更加吸引眼球,增加視覺關(guān)注度,因此在切換 tab 時具有更強的視覺沖擊力。

2. 柔和與生硬

緩動的動效過渡,相比于無動效的設(shè)計,在 tab 切換時整體的視覺感受會更加柔和、輕量。過渡直接的反饋,容易造成生硬而不具美感。

3. 趣味的表達

由于動效的加入,我們在設(shè)計 tab 切換時會變得更加多元化,而不是單純的設(shè)計一個動作的反饋。在過渡的時間差中,可以進行很多趣味的表達。

3. 情緒代入

圖標(biāo)結(jié)合表情的設(shè)計,運用動效的設(shè)計,讓整體的情緒感受更加直觀。如下圖案例,默認態(tài)與選中態(tài)通過前后的差異對比,點擊后出現(xiàn)的表情驚喜,具有不一樣的情緒變化。

Tab bar圖標(biāo)動畫的基礎(chǔ)類型

動畫的設(shè)計是多樣化的,Tab bar 圖標(biāo)動畫的類型實際上并沒有明確的劃分,這里主要列舉的是自己在日常瀏覽設(shè)計網(wǎng)站時的收集,以及個人認為比較常見的一些類型。我們可以基于這些常見類型的設(shè)計,對我們的設(shè)計進行再升華,從而提高整體設(shè)計的質(zhì)感和趣味。

1. 縮放動畫

點擊后通過一定的比例 「縮放」 反饋,突出 tab 之前的變化,從而強化了 tab 操作的感知,提升對于操作區(qū)域的視覺聚焦。結(jié)合不同的縮放效果,可以呈現(xiàn)出不同的視覺感知,縮放動畫大致分為線性和彈性兩種類型。

線性縮放

圖標(biāo)在放大或縮小的過程中,使用了勻速的動畫效果,整體動畫一步到位、干凈利落。整體視覺感知較為柔和。

彈性縮放

帶有彈性縮放的 tab 反饋,讓整體的設(shè)計更加具有趣味性,相比線性縮放也更有視覺沖擊力。圖標(biāo)的運動規(guī)則:先從 0 放大到最大(數(shù)值根據(jù)實際情況設(shè)定),然后再回彈至正常大小。

2. 透明度自然過渡

讓 tab 切換之間的過渡更加自然、柔和。相比于純靜態(tài)切換只多了一層透明度變化,但卻具有完全不一樣的視覺感受。

3. 位移

位移出現(xiàn)的圖標(biāo)會產(chǎn)生一定的速度感,但需要控制位移的速度,過快容易忽略中間的運動軌跡,而影響自然過渡的效果。

4. 抖動

通過圖標(biāo)的左右、上下快速位移或旋轉(zhuǎn)形成,整體的動畫效果節(jié)奏較快,具有一定的速度感。情緒表達上較為俏皮。

左右抖動

點擊后,圖標(biāo)反饋進行上下快速位移。建議來回位移次數(shù)不宜太多,控制在 1-2 次左右,次數(shù)太多容易顯得拖沓。

跳動的圖標(biāo)

點擊切換后,圖標(biāo)從底部彈起再回到初始位置,整體視覺感受具有跳動的韻律感。

晃動的圖標(biāo)

旋轉(zhuǎn)抖動的圖標(biāo)比上下或左右會更加具有趣味感。設(shè)定圖標(biāo)的中心點或角點為旋轉(zhuǎn)軸,通過來回晃動而形成的效果。

5. 填充

切換時,默認 tab 由線性向面性的轉(zhuǎn)變。填充類型的動畫效果整體簡單、直接,直觀地表達出圖標(biāo)切換前后的對應(yīng)關(guān)系。關(guān)鍵點在于處理好線性與面性圖標(biāo)的細節(jié)轉(zhuǎn)換。

中心填充

使用某種幾何圖形(可以是圓形或其他)通過發(fā)散放大的設(shè)計方式,結(jié)合一定的節(jié)奏韻律擴展至填滿整個圖標(biāo)。

掃描填充

動畫效果從圖標(biāo)的一側(cè),通過劃動變化至填滿。

6. 畫線-線性軌跡

以線性圖標(biāo)或線面圖標(biāo)中的線運動為主,在設(shè)計整套圖標(biāo)時,運動軌跡需要保持統(tǒng)一(線的初始與結(jié)束的位置/方向等)。軌跡不一致,容易導(dǎo)致圖標(biāo)的一致性被破壞。

局部細節(jié)畫線

選擇圖標(biāo)的關(guān)鍵細節(jié)或圖標(biāo)的特征進行畫線設(shè)計,增強圖標(biāo)的特征細節(jié),提高圖標(biāo)的記憶點。

整體畫線

與局部細節(jié)畫線基本一致,差別的點在于表達了不同的視覺感受。整體畫線從視覺感受上會相對更加飽滿。但需要根據(jù)圖標(biāo)的復(fù)雜程度而定,圖標(biāo)過渡復(fù)雜,可能容易造成拖沓的動畫效果。

7. 結(jié)合容器

結(jié)合不同的幾何形作為選中圖標(biāo)的當(dāng)前態(tài)的背景,在背景上設(shè)計出現(xiàn)的動畫效果。既強化了選中當(dāng)前態(tài),整體的 tab 切換的一致性也較高。

8. 元素介質(zhì)

設(shè)計上結(jié)合某種圖形元素作為當(dāng)前選中態(tài),在切換時通過元素的位移、跳動等方式來達到 tab 切換的動畫效果。

Tab圖標(biāo)動畫的組合形

除了以上單種類型的動畫方式外,還可以嘗試多種方式結(jié)合。通過不同的方式結(jié)合可以產(chǎn)生出更多的可能性,讓你的設(shè)計更加具有創(chuàng)意和打破常規(guī)。

1. 填充+畫線

2. 填充+抖動

3. 彈性縮放+填充

4. 元素介質(zhì)+抖動

5. 位移+透明度

更多案例(來自dribbble)

總結(jié)

tab bar 的圖標(biāo)動畫最大的作用在于解決切換時的枯燥與單調(diào),我們在設(shè)計時除了單純追求動畫的變化及多樣性之外,更多需要思考的是什么樣的動畫更符合我們的設(shè)計。

本文的主旨是分享自己日??吹降囊恍﹦赢嬓Ч?,以及對收集的內(nèi)容進行的分析。實際的動畫樣式或者效果肯定遠遠不只這些,我們可以通過基礎(chǔ)的方法再結(jié)合自己的創(chuàng)意發(fā)揮出更多滿足自我設(shè)計的表達方式。

藍藍設(shè)計m.wnxcall.com )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制  用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)。

HTML 盒子模型div

seo達人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

HTML 中的div定義:

可定義文檔中的分區(qū)或節(jié)(division/section)。

標(biāo)簽可以把文檔分割為獨立的、不同的部分。它可以用作嚴格的組織工具,并且不使用任何格式與其關(guān)聯(lián)。

如果用 id 或 class 來標(biāo)記 div,那么該標(biāo)簽的作用會變得更加有效。
用法

div是一個塊級元素。這意味著它的內(nèi)容自動地開始一個新行。實際上,換行是

固有的唯一格式表現(xiàn)??梢酝ㄟ^ div的 class 或 id 應(yīng)用額外的樣式。
不必為每一個 div都加上類或 id,雖然這樣做也有一定的好處。

可以對同一個 div 元素應(yīng)用 class 或 id 屬性,但是更常見的情況是只應(yīng)用其中一種。這兩者的主要差異是,class 用于元素組(類似的元素,或者可以理解為某一類元素),而 id 用于標(biāo)識單獨的唯一的元素。

實例
<div id = " text"><div> <div class = " text1"><div> <div class = " text1"><div>
//div 中可以設(shè)置id屬性,通過引用id屬性來為div設(shè)置一些樣式

//在style標(biāo)簽中,可以對你寫的代碼進行樣式的設(shè)計,樣式設(shè)計可以通過以下幾種方法來寫
1.通過引用id來設(shè)置樣式,在id名稱前加上# 格式: #id名稱{ }
#text{ }
2.通過class來設(shè)置樣式,class后面的名字可以是一樣的,而id取名唯一,因此在需要設(shè)置同類型的樣式時可以使用class來設(shè)置 格式: .class名稱{ }
.text1{ }
3.通過標(biāo)簽名稱來設(shè)置樣式 格式: div{ }
div{ }

樣式:
1.width :50px; // 寬度
2.height :50px;//高度
3.border : 1px solid red; //邊框,border可以設(shè)置三個屬性,分別是邊框?qū)挾?,邊框樣式(實線,虛線等),邊框顏色
4.margin:屬性定義及使用說明

margin簡寫屬性在一個聲明中設(shè)置所有外邊距屬性。該屬性可以有1到4個值。

實例:

margin:10px 5px 15px 20px;
    上邊距是 10px
    右邊距是 5px
    下邊距是 15px
    左邊距是 20px

margin:10px 5px 15px;
    上邊距是 10px
    右邊距和左邊距是 5px
    下邊距是 15px

margin:10px 5px;
    上邊距和下邊距是 10px
    右邊距和左邊距是 5px

margin:10px;
    所有四個邊距都是 10px
藍藍設(shè)計m.wnxcall.com )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)。

|學(xué)會版式的N個Tips|—線要怎樣用,才能讓你的設(shè)計更加分

濤濤

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

線往往會被設(shè)計師忽略,或許對線的理解有局限性,因而不常使用。那么線要怎樣用才能讓設(shè)計更加分呢?下面給大家分享關(guān)于線的文章

文章來源:站酷

藍藍設(shè)計m.wnxcall.com )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計  ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制  用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 平面設(shè)計服務(wù)。

7個有用的Vue開發(fā)技巧

seo達人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

1 狀態(tài)共享

隨著組件的細化,就會遇到多組件狀態(tài)共享的情況,Vuex當(dāng)然可以解決這類問題,不過就像Vuex官方文檔所說的,如果應(yīng)用不夠大,為避免代碼繁瑣冗余,最好不要使用它,今天我們介紹的是vue.js 2.6新增加的Observable API ,通過使用這個api我們可以應(yīng)對一些簡單的跨組件數(shù)據(jù)狀態(tài)共享的情況。


如下這個例子,我們將在組件外創(chuàng)建一個store,然后在App.vue組件里面使用store.js提供的store和mutation方法,同理其它組件也可以這樣使用,從而實現(xiàn)多個組件共享數(shù)據(jù)狀態(tài)。


首先創(chuàng)建一個store.js,包含一個store和一個mutations,分別用來指向數(shù)據(jù)和處理方法。



import Vue from "vue";

export const store = Vue.observable({ count: 0 });

export const mutations = {

setCount(count) {

store.count = count;

}

};

復(fù)制代碼

然后在App.vue里面引入這個store.js,在組件里面使用引入的數(shù)據(jù)和方法



<template>

<div id="app">

<img width="25%" src="./assets/logo.png">

<p>count:{{count}}</p>

<button @click="setCount(count+1)">+1</button>

<button @click="setCount(count-1)">-1</button>

</div>

</template>

<script>

import { store, mutations } from "./store";

export default {

name: "App",

computed: {

count() {

return store.count;

}

},

methods: {

setCount: mutations.setCount

}

};

</script>

<style>

復(fù)制代碼

你可以點擊在線DEMO查看最終效果


2 長列表性能優(yōu)化

我們應(yīng)該都知道vue會通過object.defineProperty對數(shù)據(jù)進行劫持,來實現(xiàn)視圖響應(yīng)數(shù)據(jù)的變化,然而有些時候我們的組件就是純粹的數(shù)據(jù)展示,不會有任何改變,我們就不需要vue來劫持我們的數(shù)據(jù),在大量數(shù)據(jù)展示的情況下,這能夠很明顯的減少組件初始化的時間,那如何禁止vue劫持我們的數(shù)據(jù)呢?可以通過object.freeze方法來凍結(jié)一個對象,一旦被凍結(jié)的對象就再也不能被修改了。



export default {

data: () => ({

users: {}

}),

async created() {

const users = await axios.get("/api/users");

this.users = Object.freeze(users);

}

};

復(fù)制代碼

另外需要說明的是,這里只是凍結(jié)了users的值,引用不會被凍結(jié),當(dāng)我們需要reactive數(shù)據(jù)的時候,我們可以重新給users賦值。



export default {

data: () => ({

users: []

}),

async created() {

const users = await axios.get("/api/users");

this.users = Object.freeze(users);

},

methods:{

// 改變值不會觸發(fā)視圖響應(yīng)

this.users[0] = newValue

// 改變引用依然會觸發(fā)視圖響應(yīng)

this.users = newArray

}

};

復(fù)制代碼

3 去除多余的樣式

隨著項目越來越大,書寫的不注意,不自然的就會產(chǎn)生一些多余的css,小項目還好,一旦項目大了以后,多余的css會越來越多,導(dǎo)致包越來越大,從而影響項目運行性能,所以有必要在正式環(huán)境去除掉這些多余的css,這里推薦一個庫purgecss,支持CLI、JavascriptApi、Webpack等多種方式使用,通過這個庫,我們可以很容易的去除掉多余的css。


我做了一個測試,在線DEMO



<h1>Hello Vanilla!</h1>

<div>

We use Parcel to bundle this sandbox, you can find more info about Parcel

<a target="_blank" rel="noopener noreferrer">here</a>.

</div>

復(fù)制代碼


body {

font-family: sans-serif;

}

a {

color: red;

}

ul {

li {

list-style: none;

}

} import Purgecss from "purgecss";

const purgecss = new Purgecss({

content: ["**/*.html"],

css: ["**/*.css"]

});

const purgecssResult = purgecss.purge();


終產(chǎn)生的purgecssResult結(jié)果如下,可以看到多余的a和ul標(biāo)簽的樣式都沒了


4 作用域插槽

利用好作用域插槽可以做一些很有意思的事情,比如定義一個基礎(chǔ)布局組件A,只負責(zé)布局,不管數(shù)據(jù)邏輯,然后另外定義一個組件B負責(zé)數(shù)據(jù)處理,布局組件A需要數(shù)據(jù)的時候就去B里面去取。假設(shè),某一天我們的布局變了,我們只需要去修改組件A就行,而不用去修改組件B,從而就能充分復(fù)用組件B的數(shù)據(jù)處理邏輯,關(guān)于這塊我之前寫過一篇實際案例,可以點擊這里查看。


這里涉及到的一個最重要的點就是父組件要去獲取子組件里面的數(shù)據(jù),之前是利用slot-scope,自vue 2.6.0起,提供了更好的支持 slot和 slot-scope 特性的 API 替代方案。


比如,我們定一個名為current-user的組件:



<span>

<slot>{{ user.lastName }}</slot>

</span>

復(fù)制代碼

父組件引用current-user的組件,但想用名替代姓(老外名字第一個單詞是名,后一個單詞是姓):



<current-user>

{{ user.firstName }}

</current-user>

復(fù)制代碼

這種方式不會生效,因為user對象是子組件的數(shù)據(jù),在父組件里面我們獲取不到,這個時候我們就可以通過v-slot 來實現(xiàn)。


首先在子組件里面,將user作為一個<slot>元素的特性綁定上去:



<span>

<slot v-bind:user="user">

{{ user.lastName }}

</slot>

</span>

復(fù)制代碼

之后,我們就可以在父組件引用的時候,給v-slot帶一個值來定義我們提供的插槽 prop 的名字:



<current-user>

<template v-slot:default="slotProps">

{{ slotProps.user.firstName }}

</template>

</current-user>

復(fù)制代碼

這種方式還有縮寫語法,可以查看獨占默認插槽的縮寫語法,最終我們引用的方式如下:



<current-user v-slot="slotProps">

{{ slotProps.user.firstName }}

</current-user>

復(fù)制代碼

相比之前slot-scope代碼更清晰,更好理解。


5 屬性事件傳遞

寫過高階組件的童鞋可能都會碰到過將加工過的屬性向下傳遞的情況,如果碰到屬性較多時,需要一個個去傳遞,非常不友好并且費時,有沒有一次性傳遞的呢(比如react里面的{...this.props})?答案就是v-bind和v-on。


舉個例子,假如有一個基礎(chǔ)組件BaseList,只有基礎(chǔ)的列表展示功能,現(xiàn)在我們想在這基礎(chǔ)上增加排序功能,這個時候我們就可以創(chuàng)建一個高階組件SortList。



<!-- SortList  -->

<template>

<BaseList v-bind="$props" v-on="$listeners"> <!-- ... --> </BaseList>

</template>

<script>

import BaseList from "./BaseList";

// 包含了基礎(chǔ)的屬性定義

import BaseListMixin from "./BaseListMixin";

// 封裝了排序的邏輯

import sort from "./sort.js";

export default {

props: BaseListMixin.props,

components: {

BaseList

}

};

</script>

復(fù)制代碼

可以看到傳遞屬性和事件的方便性,而不用一個個去傳遞


6 函數(shù)式組件

函數(shù)式組件,即無狀態(tài),無法實例化,內(nèi)部沒有任何生命周期處理方法,非常輕量,因而渲染性能高,特別適合用來只依賴外部數(shù)據(jù)傳遞而變化的組件。


寫法如下:


在template標(biāo)簽里面標(biāo)明functional

只接受props值

不需要script標(biāo)簽


<!-- App.vue -->

<template>

<div id="app">

<List

:items="['Wonderwoman', 'Ironman']"

:item-click="item => (clicked = item)"

/>

<p>Clicked hero: {{ clicked }}</p>

</div>

</template>

<script>

import List from "./List";

export default {

name: "App",

data: () => ({ clicked: "" }),

components: { List }

};

</script>

復(fù)制代碼


<!-- List.vue 函數(shù)式組件 -->

<template functional>

<div>

<p v-for="item in props.items" @click="props.itemClick(item);">

{{ item }}

</p>

</div>

</template>

復(fù)制代碼

7 監(jiān)聽組件的生命周期

比如有父組件Parent和子組件Child,如果父組件監(jiān)聽到子組件掛載mounted就做一些邏輯處理,常規(guī)的寫法可能如下:



// Parent.vue

<Child @mounted="doSomething"/>

// Child.vue

mounted() {

this.$emit("mounted");

}

復(fù)制代碼

這里提供一種特別簡單的方式,子組件不需要任何處理,只需要在父組件引用的時候通過@hook來監(jiān)聽即可,代碼重寫如下:



<Child @hook:mounted="doSomething"/>

復(fù)制代碼

當(dāng)然這里不僅僅是可以監(jiān)聽mounted,其它的生命周期事件,例如:created,updated等都可以,是不是特別方便~


參考鏈接:


vueTips

vuePost


藍藍設(shè)計m.wnxcall.com )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)。


日歷

鏈接

個人資料

藍藍設(shè)計的小編 http://m.wnxcall.com

存檔