<address id="ttjl9"></address>

      <noframes id="ttjl9"><address id="ttjl9"><nobr id="ttjl9"></nobr></address>
      <form id="ttjl9"></form>
        <em id="ttjl9"><span id="ttjl9"></span></em>
        <address id="ttjl9"></address>

          <noframes id="ttjl9"><form id="ttjl9"></form>

          首頁

          驗證碼,設計真的那么簡單嗎?

          資深UI設計者

          編輯導讀:自手機誕生至今,手機驗證碼的設計形式越來越多,圖標的、語序點選的、空間推理的等等樣式,讓用戶感覺新意的同時,也給設計者提出了難題:驗證碼的設計,到底應該怎么做才能更好的便利使用者呢?一起看看這篇文章吧,也許你會有新思路、新方向。

          驗證碼“作為人機交互界面經常出現的元素,其本質是為了防止用戶利用機器人程序自動注冊、登錄、惡意投票、發送垃圾郵件、惡意嘗試密碼等登陸嘗試,保證網絡安全?!?

          我們平時在使用互聯網產品時會發現,對于企業來說,如何防止黑產惡意抓取企業數據資產,用戶隱私,和惡意攻擊等,網絡安全問題重中之重。

          對于用戶來說,希望是極致用戶體驗,不打擾,能快速完成任務。

          因此需要在兩者間取得相對平衡,既兼顧企業網絡安全,又能給用戶極致體驗。

          本文是我在項目設計中總結幾種常用到驗證碼。

          我們如何在產品設計中恰當的運用驗證碼,讓用戶體驗產品起來超級棒卻又能保證產品的安全。

          希望能為設計師伙伴們提供一些啟發或幫助。

          一、驗證方式的分類

          進入移動互聯網時代以來,驗證碼的運用場景越來越廣。

          其驗證方式可以大致歸為以下幾類:

          1. 圖標/圖片點選驗證

          圖標/圖片行為驗證可以保證非中文語言地區的用戶可以輕松識別。

          高安全級別,用戶只需按照順序點擊圖中圖標/圖片,即可完成安全驗證。

          但是如果選擇圖標/圖片質量不高或者只顯示一部分,就會無限增加用戶識別能力,體驗就超級不好。

          比如12306火車票網站圖片點選驗證就被人唾罵。但是好處也多,那就是打擊了囤票的搶票軟件。

          • 防御能力:4星;
          • 用戶體驗:2星。

          2. 文字點選驗證

          和圖標/圖片點選驗證方式不同,文字點選驗證在保證人的可識別性同時讓機器的識別難度呈指數型增長。

          安全性比圖標/圖片點選驗證更高,用戶只需按照順序點擊圖中文字,即可完成安全驗證。

          對人比較友好,對機器不太友好。

          • 防御能力:4星;
          • 用戶體驗:3星。

          3. 語序點選驗證

          和文字點選驗證方式不同,語序點選驗證在保證人能識別范圍內,并要求用戶按照正確的自然語義排序完成點選操作,讓機器的識別難度呈指數型增長。

          也無形中給用戶增加認知成本,比如文盲,對文字理解弱的人。

          • 防御能力:4.5星;
          • 用戶體驗:2.5星。

          4. 空間推理驗證

          和其他驗證方式不同,空間推理驗證同時需要用戶根據圖片的問題提示點選相應的物體。

          邏輯解題能力結合3D立體元素識別能力,對用戶來說認知成本更高。

          由于圖片空間形態的多樣性和復雜的問題,可以顯著的降低機器識別的概率,適用于高安全場景。

          • 防御能力:4.5星;
          • 用戶體驗:2星。

          5. 滑動拼圖驗證

          滑動拼圖驗證的過程中會收集用戶拖動滑塊的行為軌跡和用戶設備信息等多維度信息,實時分析這些信息來進行人機識別。

          對于用戶來說,流暢優質的用戶體驗,僅需輕輕滑動完成拼圖,即可完成安全驗證。

          還有重要一點,拼圖驗證區域可以作為廣告宣傳或者其他用途,可增加收入。

          • 防御能力:3星;
          • 用戶體驗:4星。

          6. 智能組合驗證

          可根據用戶行為軌跡以及其他安全策略,判別用戶的風險程度,給用戶智能呈現對應的驗證形式。

          可疑用戶根據疑似程度彈出不同難度的驗證碼進行二次驗證,也有概率直接通過。

          極致用戶體驗,多維度收集環境信息,安全用戶只需輕點即可通過驗證。但是風險也很大,需要非常高大數據支持。

          • 防御能力:2星;
          • 用戶體驗:5星。

          7. 輸入型驗證

          像純數字,純字母,數字加字母的靜態或動態驗證,由于此類的驗證碼過于內容簡單,對計算器程序來說,學習成本不高,很容易被破解,現在幾乎不用這種驗證方式了。

          現在部分還在使用是升級版輸入型驗證,主要是扭曲變形的數字加字母的驗證碼,這提高了難度,難以直接辨認。

          但是對于用戶體驗來說,用戶體驗度一般。

          • 防御能力:1星;
          • 用戶體驗:3星,

          8. 短信驗證

          對于短信驗證,其實也可以歸類為輸入型驗證,為什么會單獨分一類,主要是它跟輸入型還是有很大不同。

          短信驗證成本相對輸入型驗證高,因為需要購買短信,但安全型卻是指數型增長的,用戶體驗來說非常不錯。

          • 防御能力:4星;
          • 用戶體驗:4星。

          9. 指紋或刷臉驗證

          對于以上驗證方式來說,指紋或刷臉驗證成本會更高,因為需要相應的硬件軟件支持,投入大限制也高。

          但是安全性也是最高的,極致用戶體驗,只需要按下手指或者刷下臉就可以驗證通過。

          • 防御能力:5星;
          • 用戶體驗:5星。

          上面列舉的這幾種驗證方式,只是目前使用最廣泛和最常用的驗證方式。

          隨著科技發展,會出現越來越多不同的驗證方式,給用戶帶來更加極致的用戶體驗。

          二、運用場景的分類

          隨著互聯網開啟,驗證碼運用場景也隨之而來。

          其運用場景可以大致歸為以下幾類:

          1. 登錄注冊

          驗證碼適用于 App、Web 及小程序等用戶注冊場景,可以抵御自動機惡意注冊(如利用注冊機批量注冊小號)。

          同時可以有效阻止撞庫攻擊,從源頭進行防護,保障正常用戶的注冊、登錄。

          2. 活動秒殺

          羊毛黨頻繁刷取獎勵,導致真實用戶無法獲取獎勵,業務方運營活動效果下降、經濟利益受損。

          驗證碼適用于搶購、秒殺、優惠券等活動場景,有效抵御爬蟲、自動機刷取福利券,有效攔截刷單操作,讓羊毛黨空手而歸。

          3. 點贊發帖

          惡意用戶用小號在 UGC 社區惡意發帖、刷票,使運營方無法獲得真實用戶反饋,影響活動開展。

          驗證碼適用于論壇、投票等場景,有效抵御自動機刷贊和水軍刷帖,解決廣告屠版、惡意灌水、刷票問題。

          4. 數據保護

          惡意爬蟲可爬取網站的內容、數據,導致網頁的核心資源、機密信息被盜用和復制。

          驗證碼適用于公告欄、論壇等內容網站,有效抵御爬蟲爬取網站內容信息,防止自動機、爬蟲盜取網頁內容和數據。

          除了以上常見的運用場景,未來驗證運用的場景也會越來越多,也會越來越完善,既兼顧網絡安全,又有極致用戶體驗。

          三、顯示方式(交互方式)的分類

          對于不同產品或者不同場景,其顯示方式(交互方式)可以大致歸為以下幾類:

          1. 觸發式顯示

          觸發式顯示就是鼠標移入驗證條后顯示驗證拼圖,輕松接入,不影響網頁原有的排版和美觀。

          特別是對于手機端寸土寸金的顯示內容區域來說,這就顯得尤為重要,可以節省很多空間。

          適用端:電腦端和手機端。

          2. 嵌入式顯示

          何為嵌入式顯示,就是點選驗證區域直接完整嵌入網頁,清晰直觀,便于用戶使用和廣告宣傳,特別對于網站品牌宣傳,可以從驗證碼下手。

          但是對于手機端來說,因為需要完整顯示驗證區,這就尤為很占用空間,手機端不是很推薦使用這種顯示方式。

          適用端:電腦端。

          3. 彈出式顯示

          彈出式的顯示,跟觸發式顯示有點像,但是彈出式顯示是綁定自有驗證按鈕效果,與自有業務樣式完美融合。

          而且會根據情況來是否需要驗證彈窗,體驗相對來說會更加友好,適用場景也更廣泛。

          適用端:電腦端和手機端。

          四、總結

          ① 涉及到產品的安全性,目前驗證碼是最小成本來實現產品安全的手段之一;

          ② 在實際運用中需要注意辨別產品安全跟驗證碼之間關系,應該根據產品的安全以及場景是否需要來選擇恰當的“驗證碼”;

          ③ 驗證碼未來無論怎么變化多端,其目的都是為了網絡安全,其次才是用戶體驗。在安全和體驗上,這就需要我們設計師來找到他們平衡點。

          下面是匯總的驗證碼驗證方式對比圖,希望能為設計師伙伴們在使用驗證碼時提供一些啟發或幫助。


          藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼ben_lanlan,報下信息,會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

          文章來源:人人都是產品經理   

          分享此文一切功德,皆悉回向給文章原作者及眾讀者.

          免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務



          元宇宙,互聯網創新版“水變油”

          資深UI設計者

          今年年初,世界上最大的多人在線創作沙盒游戲平臺Roblox攜元宇宙概念在紐交所上市,再加上《失控玩家》的熱映,這個聽上去極為虛幻的、不著邊際的概念成了資本的香餑餑。本文作者對此進行了分析,與你分享。

          上個世紀八十年代,為了盡快改變國內發展現狀,國內掀起了一場崇尚知識、尊重人才的運動,追求科學知識成了所有人的共識,就在全國人民都對新科學新技術翹首以盼的時候,“水變油”橫空出世,引發整個科技圈震動,舉國沸騰。

          一旦這一技術成真,所有人都明白,這對當時的中國和國內科技界,意味著什么。而事實上,這不過是一場驚天鬧劇。水變油就算可能有朝一日會成真,但那屬于未來,并不是當時所處的時代所能實現的。

          如今,這一幕在科技互聯網領域似乎又在上演。創新匱乏,風口難現,資本畏縮的局面之下,整個科創領域急需要一個新的概念振作整個市場。

          于是,元宇宙概念堂而皇之的登上了風口。

          今年年初,世界上最大的多人在線創作沙盒游戲平臺Roblox攜元宇宙概念在紐交所上市,首日市值突破 400 億美元,相較去年約 40 億美元的估值飆升10 倍。這個月,字節跳動收購Pico更是把元宇宙的熱度推向高潮,再加上《失控玩家》上映,元宇宙概念股爆發,這個聽上去極為虛幻的、不著邊際的概念成了資本的香餑餑。

          然而,從互聯網風口的發展脈絡來看,元宇宙的爆火,更像是互聯網創新的一次“水變油”鬧劇。

          一、臆想出來的“救命藥”

          元宇宙這個概念可能跟水變油一樣久遠了,現在無非是新瓶裝舊酒,被資本和巨頭們重新包裝了新概念。

          搞笑的是,元宇宙的概念重新火到現在,被刷屏、被科普、被討論,但實際上很多人仍然沒有弄懂這個概念,而這種似懂非懂云里霧里的概念,對于科技巨頭和資本來說,最有騰挪的空間。

          事實上,在1992年出版的科幻作品《雪崩》中,作者構建了一個平行于現實世界的虛擬世界,人們可以在里面擁有一個自己的虛擬替身,這個世界叫作“Metaverse”,也就是類似現在爆火的元宇宙。

          元宇宙所代表的世界,自由度極高,換句話說,你在現實中能做的事情,在元宇宙也能做,而現實中不能做的事情,可能會在元宇宙中實現。

          就像《失控玩家》中的開放世界游戲,玩家在游戲中可以殺人、放火、搶銀行,對不帶墨鏡的非玩家角色們做任何事情。它和普通游戲的區別在于,元宇宙中的這些行為都建立在高度的沉浸式體驗中,當你殺人、放火、搶銀行時,感覺像真的在實施暴力和犯罪。

          當然,元宇宙的想象空間不是像電影中偏向滿足用戶的暴力需求,而是延展到現有互聯網生活無法觸及的領域,接近于把整個現實世界平移到虛擬中。

          但現在看來這未免太過虛幻。廣義被認同的元宇宙有六大支撐技術,分別為區塊鏈技術、交互技術、電子游戲技術、人工智能技術、網絡及運算技術以及物聯網技術,而單看任何一項,都處于一種技術水平和落地應用跟不上外界期待的狀態。追根究底,當初區塊鏈、人工智能等概念炒作多火爆,現在就有多尷尬,這和現在的元宇宙如出一轍。

          可為什么就是這樣一個概念,引起了資本和巨頭的競相爭奪呢?其實他們未必真的認為元宇宙會掀起下一代互聯網社交和娛樂模式的變革,更現實的是他們恰好需要元宇宙這個讓人摸不著頭腦的新“風口”。

          進入2021年以后,互聯網經濟整體進入了一個動蕩、難熬的時期。一方面,互聯網用戶增長緩慢,已然到達了一個極限,越發困擾著互聯網公司。

          根據中國互聯網絡信息中心(CNNIC)最新發布的《中國互聯網絡發展狀況統計報告》顯示,截至2021年6月,我國網民規模達10.11億,較2020年12月增長2175萬,互聯網普及率達71.6%。其中,即時通信用戶規模達9.83億,較2020年12月增長僅218萬,短視頻用戶規模高達8.88億,較2020年12月增長1440萬。

          另一方面,監管成為今年影響互聯網公司最重要的外部因素,從教育到游戲,從社區團購到共享民宿,從影視圈到飯圈…那些曾經引得資本追逐和熱捧的風口及風口上的公司,在野蠻生長的過程中,亂象叢生,現在無一例外地觸動了紅線。

          從這個角度出發,元宇宙這樣一個沒有落地的、虛幻的又能刺激大眾興奮點的概念,在監管時代下似乎安全許多?;ヂ摼W巨頭和資本,就如同古代帝王遲暮之后,一味追求長生,生生臆想出來了長生不老藥。

          二、互聯網創新的“大潰敗”

          近期,蘋果秋季發布會舉行,每年的這個時候,圍繞蘋果新機都會掀起一波又一波討論的熱潮。然而,不得不承認,蘋果秋季發布會帶給用戶的驚喜已經越來越少,輿論熱潮過后,討論點總會落在蘋果創新乏力、庫克才能不足上。

          蘋果的創新困境,只是整個互聯網經濟創新越來越泯然于眾的一個縮影,在貼有創新乏力標簽的互聯網公司名單中,恐怕要加入很多巨頭的名字。

          2016年,谷歌也舉行了一次發布會,在會上一口氣發布了一大堆的硬件產品,這個東拼西湊的硬件全家桶,因為裝的都是“過時”的產品,而被媒體狠狠地嘲諷了一次。由此,作為美國硅谷技術創新風向標的企業,人們開始質疑谷歌是不是“黔驢技窮”,一位在谷歌任職13年的老工程師公開批評谷歌發布的產品分別抄襲了亞馬遜Echo、WhatsApp和微信。

          硅谷的活力喪失,已然成為一種共識。

          而國內呢?我國互聯網經濟的模式或產品創新,曾一度改變了原本互聯網公司從硅谷復制、借鑒現有模式的習慣,漸趨成為全球互聯網創新的另一個中心。然而,在共享經濟的高潮過后,國內互聯網新事物的誕生和發展套路基本就淪落成找準一個行業進行線上化,繼而融資燒錢、規模擴張、相互爭奪流量。成則剩者為王,敗則一地雞毛。

          這其實不是創新,以往互聯網創新的本質在于變革行業,衍生出一種比現有商業業態更有優勢的新生模式,但現在互聯網的風口中,我們看到的不是對行業的升級,而是干擾甚至破壞。

          比如社區團購,社區團購通過融資,以補貼吸引用戶白嫖,將原有菜攤菜販為主導的商業業態快速破壞,實際上它為商業社會創造的價值卻寥寥無幾。新消費投資熱也是如此,眼見沒什么新賽道了,資本瞄準了我們的餐桌。

          原以為社區團購和新消費已然是國內互聯網創新的一次大倒退,直至元宇宙爆火,這場由概念炒作掀起的虛火從硅谷燒到國內,更像是一場席卷全球互聯網經濟的倒退,以掩蓋整個互聯網創新乏力的事實。

          換句話說,我們正在拿未來數十年都未必能實現的科技幻想,來彌補現在的創新枯竭。

          尤其是外界對元宇宙的暢想,目前來看過于超前了。一方面,作為能夠超過智能手機和個人電腦的下一代主流計算平臺和元宇宙的重要入口,AR/VR還停留在視覺階段,交互很差,用戶根本沒有沉浸式體驗;

          另一方面,一個全新的世界,需要包括游戲、影視視頻音樂內容、辦公與會議體系、虛擬消費品、虛擬房地產、虛擬經濟體系等等,而這些要素在現有的互聯網世界都未必成熟。

          三、“明日之水”救“今日之火”

          元宇宙的刺激作用已然在互聯網商業中顯現。Roblox在美國納斯達克上市,頂著“元宇宙第一股”的光環,Roblox現在的市值高達500億美元。

          無獨有偶,9月8日,元宇宙概念股集體爆發,股價飆升,最高漲幅達到了44%。其中,中青寶連續兩日漲停,連帶著歌爾股份也收獲了10cm漲停,市值逼近1800億元。字節跳動更是因為高價收購國內VR行業頭部廠商PICO,被推上輿論的風口浪尖。

          游戲公司們也極為興奮。游戲公司是元宇宙重要的參與者,甚至不排除未來一個開放世界的游戲就是一個元宇宙,由此,備受政策風險左右的游戲公司們似乎找到了一個天然適合炒作、拉動股價的營銷點。像完美世界、世紀華通等,都在向外界透露自己積極探索和融入元宇宙相關元素的信息。

          但元宇宙拯救不了國內游戲公司,同樣也拯救不了國內互聯網。

          近期,A股游戲公司先后披露了半年度業績報告。數據顯示,2021年上半年,A股31家游戲公司中,16家出現了營收同比下滑,17家公司歸母凈利潤同比下滑,其中7家企業出現虧損。三七互娛、完美世界、昆侖萬維等頭部游戲公司出現營收、凈利雙降。

          游戲公司業績下滑,主要是因為去年同期的業績太過優秀,疫情后便恢復了正常水平。不過可以預測的是,下半年游戲公司的業績不容樂觀。新未成年人防沉迷游戲禁令出臺后,游戲公司都要面臨用戶活躍度降低、游戲流水下降的問題,這在游戲用戶數日益減少的背景下,又增添了營收的壓力。

          參與元宇宙炒作的不只是游戲公司,互聯網巨頭們也在蜂擁而上。比如騰訊,據天風證券梳理,無論是打造虛擬世界需要的引擎工具的締造者Epic,還是AR組件領導者Snap,以及自由表情工具Bitmoji、攝像頭Kit、社交軟件Discord等,都有騰訊投資的身影。

          騰訊和字節跳動正在爭奪和押寶下一場互聯網變革的風口,對后者來講,元宇宙可能涵蓋了下一代社交網絡體系,成為干掉騰訊這一社交巨頭的絕佳機會??墒?,無論是騰訊還是字節跳動,追捧和投資元宇宙似乎都不能解決當下互聯網公司面臨的最大困境,外部不確定性因素或將持續對他們的核心業務產生沖擊。

          對于創投圈,我們看到,元宇宙其實很難成為創投圈的一劑“興奮劑”,緩解創投人士的焦慮。因為放眼望去,除了一些蹭元宇宙熱度的游戲公司,創投圈投無可投,VR創業公司雖然重新得到關注,但過去VR元年的慘痛經歷還歷歷在目,而跟風的游戲公司,他們的行為僅限于炒作概念。想要落地,可能還很久遠。

          從互聯網誕生之初,消費、娛樂、信息獲取等模式的創新,豐富了用戶的生活,到現在互聯網公司圍著一個過度超前的概念,靠想象獲得刺激和高潮,這種演變未免有些悲哀。

          畢竟,元宇宙理論上即使是成立的,但是它也和水變油一樣,并不是這個時代的事情,可以研究,但應該做好長期投入的準備,而不是現在就開始進行概念炒作和收割。

          藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼ben_lanlan,報下信息,會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

          文章來源:人人都是產品經理   作者:道總有理

          分享此文一切功德,皆悉回向給文章原作者及眾讀者.

          免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務


          如何有效進行競品分析

          資深UI設計者

          這篇小文,將從四個模塊講述如何有效競品分析。



          01 認識競品分析


          競品分析顧名思義,是對競爭對手的產品進行比較分析。


          不同的角色做分析的方向是不同的,UX設計師做產品體驗分析,從視覺和感覺兩個方面去分析;產品經理做競品分析從功能、框架、技術、戰略等,分析產品背后的部分,比如競品為什么這么做?是如何做到的?下一步會怎么做……這里作者主要是分析產品層面的競品分析。



          02 競品分析的意義


          競品分析的意義根據產品發展階段不同,可歸納為以下四點:


          1. 了解產品

          通過競品分析,可以快速了解這個行業、市場、競爭對手的產品以及自己的產品。


          2. 決策支持

          從產品戰略層面來說,可以為企業制定戰略、布局規劃提供依據;可以通過MVP來測試產品是否符合市場預期,找準產品定位。


          3. 預警避險

          做競品分析會讓我們時刻關注競爭對手,關注環境的變化,關注政策的變化等,有效的競品分析可以預警避險。

          4. 全局判斷

          定方向、定目標、定策略,包括競品分析、用戶研究、需求分析、產品規劃、產品設計等。


          03 競品分析流程


          輸出一份完整的競品分析,需要完成六個核心流程:



          明確目標:明確為什么要做、想解決什么問題、競品分析的目標是什么

          選擇競品:選擇要分析的競品、直接競品、間接競品、參照品

          確定分析維度:根據競品分析目標,確定要從哪些維度分析競品

          收集競品信息:從各種渠道收集競品信息

          信息整理與分析:對收集到的競品信息進行整理與分析

          總結報告:得到競品分析的結論,輸出競品分析報告


          明確目標

          在第一部分全面認識競品分析中有提到競品分析的意義,也是競品分析的目標所在,概括的可以分為四類:決策支持、學習借鑒、市場預警、機會探索。


          根據產品生命周期不同,競品分析的目標和側重點不同。所以在競品分析之前一定要了解當前產品處于什么階段,需要分析的目標是什么。



          選擇競品

          競品的選擇,首先要了解競品的分類:直接競品、間接競品、替代品、參照品。然后根據目標針對性的選擇產品。


          直接競品

          是指產品形式和目標用戶群是完全相同的產品。比如生活中最鮮明的例子:可口可樂 VS 百事可樂。

          間接競品

          是指產品形式不同,目標用戶群類似的產品。比如:可口可樂 VS 元氣森林,都是飲品。

          替代品

          是指產品形式不同、品類不同,目標用戶群類似,能滿足用戶相同需求的產品。比如:公交車 VS 滴滴打車。

          參照品

          是指有參考價值的產品,可能是跨界的各種產品,開放式的產品類別。



          競品的選擇不是數量越多越好,而是要選擇合適的,做深度分析,分析出有價值的信息。


          確定分析維度

          分析維度是指從哪些方面、哪些角度去分析,在這個階段要確定產品分析的廣度和深度??梢詮漠a品視角和用戶視角兩個不同的視角去確定分析維度。


          產品視角:從產品本身的信息量上去選擇要分析的維度。以功能、框架、技術、體驗、用戶……等維度進行分析;


          用戶視角:從用戶最關注的信息上去選擇要分析的維度。以$APPEALS(客戶需求分析)框架作為分析框架。


          $APPEALS方法是IBM在IPD總結和分析出來的客戶需求分析的一種方法。它從8個方面對產品進行客戶需求定義和產品定位。具體如下:

          1. $-產品價格(Price);

          2. A-可獲得性(Availability);

          3. P-包裝(Packaging);

          4. P-性能(Performance);

          5. E-易用性(Easy to use);

          6. A-保證程度(Assurances);

          7. L-生命周期成本(Life cycle ofcost);

          8. S-社會接受程度(Social acceptance)。



          收集競品信息

          收集競品信息的渠道總結為三種:官方渠道公開資料、第三方競品分析平臺獲取、打入產品自行體驗或與用戶接觸調研出來的等。


          在之前公眾號文章里曾分享過有關用戶分析、產品分析等數據分析平臺的匯總表。



          信息整理與分析

          信息收集完成后,并不是所有信息都是可用的,需要對其進行篩選、分類、剔除、評級等,得到有效信息,針對有效信息進行分析。


          這里也是競品分析重要的一個環節,不同的目標,需要選擇不同的分析方法,匯總一下競品分析的方法有:比較法、矩陣分析法、競品跟蹤矩陣、功能拆解、探索需求、PEST分析、波特五力模型、SWOT分析……(下一部分會具體講解)


          總結報告

          所有的分析步驟都完成之后,需要對分析結果進行總結,從中挑選出有價值的信息,形成一份分析報告,報告的格式可根據展示場景輸出選擇適當的格式。


          04 競品分析方法


          比較法

          與競品做橫向比較,深入了解競品,并通過分析得出優勢、劣勢。


          打勾比較法:有無某功能,如果產品功能復雜,要拆解成2級功能等再橫向比較
          評分比較法:應用于用戶體驗設計評估和$APPEALS要素評估
          描述比較法:通常會用“界面截屏+文字描述”的形式



          矩陣分析法

          以二維矩陣的方式分析產品與競品的定位、特色或優勢。


          競品跟蹤矩陣

          跟蹤競品的版本更新,找到競品各版本的發展規律,以推測競品下一步的行動計劃。競品跟蹤矩陣包括幾個要素:時間、版本號、版本變化要點(新增、優化、刪除)以及外部環境變化。


          功能拆解

          把競品分解成1級功能、2級功能、3級功能,甚至4級功能,以便更全面地了解競品的構成,避免遺漏。



          探索需求

          挖掘競品功能所滿足的深層次的需求,以便找到更好的解決方案,提升產品的競爭力。


          PEST分析

          PEST分析法是對宏觀環境進行分析,以便找到機會,認清威脅與挑戰。


          所謂PEST ,P是政治(Politics),E是經濟(Economy),S是社會(Society),T是技術(Technology)。



          波特五力模型

          對行業環境進行分析,評估某一行業的吸引力、利潤率。


          SWOT分析

          PEST分析和波特五力模型可歸納出SWOT分析中的機會和威脅,通過SWOT分析找出產品的優勢、劣勢、機會、威脅,以便制定競爭策略。



          加減乘除

          產品越發展難免會進入同質化的競爭,與其更好,不如尋找更好的機會點。在競品的基礎上做“加減乘除”,以便進行差異化創新。


          05 競品分析工具


          借助精益畫布、競品畫布、戰略畫布這三個工具可以提升競品分析的效率。


          精益畫布

          精益畫布是關于產品商業模式分析的一種很實用的工具,可以用來做產品商業模式規劃和分析。精益畫布可以幫助產品更全面的思考、決策,從系統、商業的角度來規劃產品、分析產品,建立產品的全局觀。



          精益畫布在日常工作中的使用場景包含:編寫PRD、項目立項、商業計劃書……


          知己   用精益畫布--規劃自己的產品

          知彼   用競品畫布--規劃競爭對手的產品


          競品畫布

          競品畫布是前面提到的競品分析的一種方式,是把競品分析的六個步驟固化到一張表上,作為一個規范性的模板,引導大家更規范的做競品分析。


          競品畫布相當于競品分析報告的MVP(最小可用產品),用來低成本快速驗證分析的思路是正確的,避免返工。



          很多人在剛接觸一個新產品時,很容易盲目的去分析,找不到方向,此時借助競品畫布這個標準化的模板,一步步的去分析產品,可以很快地了解一個產品。


          戰略畫布

          戰略畫布是做產品差異化競爭的有效工具,是通過價值曲線的方式,在某一時間段內尋找到有用戶價值的戰略方向。


          價值曲線

          價值曲線是以圖形的方式描繪出一個產品在各個競爭元素上表現得相對強弱程度,由此可以看出一個產品的戰略輪廓。


          橫坐標顯示產品的競爭元素、價值點(用戶在意點)等,通過用戶的評價就可以了解到對于用戶來說他們最在意的是什么,他們使用產品的原因是產品給他們帶來了什么,這就是要尋找的競爭元素的來源。


          縱坐標顯示相對水平。



          通過價值曲線的方式,可以清晰的看到產品與競品間的差異點,戰略畫布是做產品差異化創新的有效工具。


          最后,利用思維導圖結構化的方式,整合了競品分析核心知識點,分享給看到的你:



          06 總結


          看似這些競品分析的方法論是在做一些與設計無關的事情,但很多方法論是通用的,可以應用到視覺、交互的競品分析當中;作為設計師不能給自己設限,要多去學習跨界的知識,了解這些競品分析的方法論后,以后再接觸新項目,便可以借助文中的規范嘗試做競品分析,助力自己快速了解業務、行業等。

          藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼ben_lanlan,報下信息,會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

          文章來源:站酷   作者:做設計的小仙草

          分享此文一切功德,皆悉回向給文章原作者及眾讀者.

          免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務

          B端設計規范指南:導航欄

          資深UI設計者

          B端導航欄的認識

          B 端導航欄,是 B 端項目最重要的模塊(沒有之一)。一個優秀的 B 端導航欄,可以清晰地連接項目的所有功能、模塊,讓訪問者高效的在模塊間穿梭。

          通常,在進行具體頁面設計的時候,我們第一個設計的模塊也是導航。在主流的頁面框架中,導航分為兩種,頂部導航和側邊導航。

          超詳細!總監出品的B端設計規范指南(六):導航欄

          有很多 B 端產品官網使用的頂部導航,并不能作為管理系統導航,僅僅是一般網站導航。比如阿里云或騰訊云官網上方的導航。

          超詳細!總監出品的B端設計規范指南(六):導航欄

          這類導航主要應用在企業官網中,通過比較密集的信息密度,將提供的產品或服務全部羅列出來。

          超詳細!總監出品的B端設計規范指南(六):導航欄

          而側邊欄雖然可以做不少花哨的樣式,但信息密度顯然無法和頂部導航欄相提并論。

          超詳細!總監出品的B端設計規范指南(六):導航欄

          頂部導航的特征需要鼠標懸浮展開分類面板,通過收納大量下級菜單,來提升用戶的 “檢索” 效率。而用戶在這些菜單間跳轉切換的頻率不會太高。

          側邊欄導航的特征則是更直接,包含的菜單數量不會太多,用來提升用戶的 “跳轉” 效率。滿足用戶高頻的模塊跳轉切換需求。

          側邊欄的設計也包含兩種形式,細欄和寬欄。

          超詳細!總監出品的B端設計規范指南(六):導航欄

          細欄主要突出圖標,應用在模塊數量不多的情況,也為內容區域騰更多控件出來。比如 Teambition、百度云等產品。

          寬欄則是比較安全的設計形式,兼容性較好,不管是模塊數量多還少都能用。但相應的,它會一定程度上占用控件減少內容區域面積。

          在一般項目中,只要用好側邊欄的設計即可。頂部導航在管理界面中的應用多為混合場景,用來切換比側邊欄更高級的分類頁面。比如騰訊云內部頁面中,切換業務模塊使用頂部導航的展開面板,業務下級模塊則在側邊欄。

          超詳細!總監出品的B端設計規范指南(六):導航欄

          B端導航的規劃

          導航欄設計,必然要滿足 “導航” 這個核心目標。組件的樣式、交互必須為功能服務,但很多新手只考慮樣式。

          通常情況下,導航是反映項目功能模塊的入口,產品中包含多少模塊、子模塊,就會有序的布置到導航里面。那么問題來了,項目到底包含了多少模塊和子模塊?哪些是要放進導航里的?

          在之前思維導圖應用的分享中,有一個非常重要的產品輸出類型,叫 —— 功能結構地圖。解釋了不同功能層級的結構和從屬關系,以及項目中總共包含了哪些頁面。

          超詳細!總監出品的B端設計規范指南(六):導航欄

          它是制定導航內容的主要依據,但并不代表里面出現的每一個節點頁面都要放進導航中。

          設計師展開導航設計前,也需要使用思維導圖工具,再把需要展示出來的內容和結構梳理一遍。否則,面對模塊數量較多,層級超過兩級的導航就必然手忙腳亂。

          比如騰訊云直播和短書的側邊欄層級結構:

          超詳細!總監出品的B端設計規范指南(六):導航欄

          這么看起來很清晰對吧?但留給設計的坑是,并不是每個層級,它們都可以點擊,都具備跳轉功能。我們來看看實際的實現的效果。

          超詳細!總監出品的B端設計規范指南(六):導航欄

          也就是說,在導航欄的導航選項中,并不是所有的選項都是用來跳轉的,它們是用來輔助區分內容和用來展開的。

          所以,我們要在思維導圖階段,根據實際場景的需要,對每一個導航信息點進行標注,明確它們在后續設計中包含的作用。

          超詳細!總監出品的B端設計規范指南(六):導航欄

          同時,還有一個需要注意的事情,就是是否為導航欄增加響應式適配。即窄屏的情況下,通常是將導航欄縮短,只保留圖標的方案。

          把這些內容定好,就可以進入我們具體的設計環節了。

          導航欄的設計落地

          整理好上方的內容層級,到具體設計步驟里,首先要做的,就是制定出一個能滿足層級顯示和操作的交互結構出來。

          再整理一遍,側邊欄的內容包含:

          • 不可點擊的分類標題
          • 可以展開的一級分類
          • 可以實現跳轉的一級分類
          • 可以點擊的二級分類

          而可交互的元素,顯然是有對應交互狀態的,那么對應的交互狀態就包括:

          • 鼠標懸浮一級菜單樣式
          • 鼠標懸浮二級菜單樣式
          • 選中一級分類,一級分類高亮
          • 展開一級并選中二級分類,二級分類高亮

          那么,先用原型做個示意,它的狀態包含了默認、選中一級、選中二級三種情況:

          超詳細!總監出品的B端設計規范指南(六):導航欄

          在實際設計環節里,最難受的事情就是一級菜單有的用來展開,有的可以選中,怎么區分?而一二級菜單懸浮、選中是否要統一樣式?怎么保證一致性?

          如果要統一一二級菜單的選中樣式,那么設計過程中,就要保證一二級菜單實際占用空間區域是一致的,間距也進行統一,才能合理添加懸浮和選中效果。

          超詳細!總監出品的B端設計規范指南(六):導航欄

          如果不對一二級菜單統一懸浮和顯示樣式,區分展示,可以不統一菜單的實際區域和高度。但是,這樣的導航要設計好更困難一點。如果不統一交互效果,那么就盡量保證其中一級懸浮和選中采取背景填充,另一級僅僅是文字樣式變更。

          超詳細!總監出品的B端設計規范指南(六):導航欄

          把要使用哪種方案確定下來,然后再去優化細節,添加對應的圖標內容和優化字體、分割線等等。

          超詳細!總監出品的B端設計規范指南(六):導航欄

          我們在上面用的案例,邏輯層級是 3 級,但是有的項目中,包含的可能有 4 級、5 級,那么必然會呈現出更復雜的交互體系。

          常見的做法,就是將側邊欄做成兩列,一列是頂級菜單,一列是其它次級菜單,類似有贊的這種做法。層級越多帶來的挑戰也就越大。

          超詳細!總監出品的B端設計規范指南(六):導航欄

          導航的設計,對細節調節并不僅僅是為了好看,而是提供更直觀的交互和一致性。僅僅完成樣式依舊是不夠的,具體使用上還可能會碰到什么問題我們要盡可能多進行思考。

          比如:

          • 原設計中展開 1 級分類只能展開一個,開啟第二個就會關閉第一個,如果我們改成展開不關閉會又什么區別呢?
          • 點擊頁面跳轉以后,除了選中的二級菜單前面展開的還展開嗎?
          • 高度超出一屏高以后怎么顯示,如果滾動的話跳轉后顯示在哪里?

          這樣的問題,就留給大家自己思考了。

          結尾

          導航的設計細節是很次要的因素(雖然對整體樣式很重要),重點是給出合理的信息展示和交互方法。如果導航不能幫助用戶快速、簡潔的進行頁面的選擇和跳轉,即使做的再好看也是一個失敗的導航。


          藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼ben_lanlan,報下信息,會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

          文章來源:優設   作者:超人的電話亭

          分享此文一切功德,皆悉回向給文章原作者及眾讀者.

          免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務


          Web各大地圖開發

          前端達人

          Web各大地圖開發

          介紹

          想必大家對地圖都不陌生,都使用過地圖吧,有了地圖我們也就不用在把回家的路徑牢牢地記住了,只需要在地圖上搜索下就能進行導航了,

          而且在打車的時候也都使用的是地圖,…地圖作用范圍很廣很廣這里就不在多介紹了直接進入主題.

          目前市面上主流的地圖有:

          1. 高德地圖

            https://lbs.amap.com/ 開發者平臺

          2. 百度地圖

            https://lbsyun.baidu.com/ 開發者平臺

          3. 騰訊地圖

            https://lbs.qq.com/ 開發者平臺

          4. 天地圖

            https://www.tianditu.gov.cn/ 開發者平臺

          以上就是我們常用的地圖,也是可以免費調用的地圖不收費,但是有次數限制都夠用,基本所有的地圖開發都要先申請為開發者后才能進行地圖的開發

          雖然高德很火很厲害,但是我公司讓我用天地圖開發,所以下面的案例大致演示天地圖的開發的流程,其他平臺的地圖開發流程基本都類似.

          只要掌握一個地圖的開發那么其他地圖開發就是小兒科了…

          開發地圖需要的準備

          1. 進入天地圖頁面

          2. 注冊賬號

          3. 申請成為開發者

            開發者分為: 個人開發者和企業開發者 根據情況自行選擇

          4. 然后根據需求創建應用-生成應用key

          5. 入門Dome

            實例代碼:

            http://lbs.tianditu.gov.cn/api/js4.0/guide.html 以下代碼的內容介紹

            <!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> <title>HELLO WORLD</title> <script type="text/javascript" src="http://api.tianditu.gov.cn/api?v=4.0&tk=9e70e9aa0be51fe8ad220e1c4b5d5aa5"></script> <script> var map; var zoom = 12; function onLoad() { map = new T.Map('mapDiv'); map.centerAndZoom(new T.LngLat(116.40769, 39.89945), zoom); //39.897019,116.323003 } </script> </head> <body onLoad="onLoad()"> <div id="mapDiv" style="position:absolute;width:100%; height:900px"></div> </body> </html> 
                    
            • 1
            • 2
            • 3
            • 4
            • 5
            • 6
            • 7
            • 8
            • 9
            • 10
            • 11
            • 12
            • 13
            • 14
            • 15
            • 16
            • 17
            • 18
            • 19
            • 20

            地圖級別 也就是地圖加載后顯示的縮放級別

            縮放級別1~2 那么就是洲級別 (亞洲 ,美洲…)

            縮放級別3~4 那么就是國家級別

            縮放級別5~6 那么就是省級別

            縮放級別7~8 那么就是市級別

            縮放級別9~10 那么就是區級別

            縮放級別11~12 那么就是縣級別

            …以此類推 最多縮放18級別(街道級別)

            上案例效果圖:

          各種需求進行開發

          頁面

          http://lbs.tianditu.gov.cn/api/js4.0/examples.html 基本日常所需的實例,稍微改動就能使用了

          上面實例無法滿足你的要求或者需要添加特殊操作,那么能在下面AOI文檔中能找到具體實例代碼里的每一個方法使用詳細,然后在根據業務需求進行修改就行了

          http://lbs.tianditu.gov.cn/api/js4.0/class.html

          接口服務

          在天地圖中提供了幾個服務接口用來獲取一些數據的地方 ,但是注意有每日調用配額限制的(控制臺可以查看次數限制)

          http://lbs.tianditu.gov.cn/server/search.html

          比如:客戶想查詢或者快速定位某一個區域或者街道的位置,但是自己通過地圖一點一點的找太麻煩了那么就可以通過接口的方式直接獲取到想要的數據,

          查詢: 北京市延慶區延慶鎮蓮花池村前街50夕陽紅養老院的坐標

          http://api.tianditu.gov.cn/geocoder?ds={"keyWord":"北京市延慶區延慶鎮蓮花池村前街50夕陽紅養老院"}&tk=9e70e9aa0be51fe8ad220e1c4b5d5aa5

          接口返回的數據:

          {“msg”:“ok”,“location”:{“score”:40,“level”:“地名地址”,“lon”:116.002677524,“lat”:40.4509903540001,“keyWord”:“北京市延慶區延慶鎮蓮花池村前街50夕陽紅養老院”},“searchVersion”:“6.0.0”,“status”:“0”}

          響應接口

          參數值 參數說明 參數類型 備注(值域)
          status 返回狀態 string 0:正常返回,101:結果為空,404:出錯。
          msg 返回信息 string OK:正常,其他異常。
          location 地址信息 json 地址信息

          location

          參數值 參數說明 參數類型 備注(值域)
          lon 坐標點顯示經度 Double 必須返回。
          lat 坐標點顯示緯度 Double 必須返回。
          level 類別名稱 string 非必須返回。
          typeRound 附近相似點 Array 開啟周邊查詢必需返回。

          然后在代碼里通過

           map.centerAndZoom(new T.LngLat(116.41593, 39.92313), 16); 
          
          • 1

          從新設置下地圖顯示的位置,以及縮放比例就行了.

          標注案例

          在很多項目都要求把客戶提供的公司…在地圖上標注出來并且顯示對應的描述,

          在天地圖提供的實例中是默認鼠標點擊顯示,然后點擊消失,實際中這樣太麻煩了我們稍作修改,改變為鼠標懸浮顯示,鼠標離開消失

          修改后的代碼

          <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title>天地圖-地圖API-范例-多個點的信息窗口</title> <script type="text/javascript" src="http://api.tianditu.gov.cn/api?v=4.0&tk=9e70e9aa0be51fe8ad220e1c4b5d5aa5"></script> <style type="text/css"> body, html{width: 100%;height: 100%;margin:0;font-family:"微軟雅黑";} #mapDiv{height:900px;width:100%;} input,p { margin-top: 10px; margin-left: 5px; font-size: 14px; } </style> <script> var map var zoom = 15; function onLoad() { var data_info = [[116.417854,39.921988,"地址:北京市東城區王府井大街88號樂天銀泰百貨八層"], [116.406605,39.921585,"地址:北京市東城區東華門大街"], [116.412222,39.912345,"地址:北京市東城區正義路甲5號"] ]; //初始化地圖對象 map = new T.Map("mapDiv"); //設置顯示地圖的中心點和級別 map.centerAndZoom(new T.LngLat(116.41593, 39.92313), zoom); for(var i=0;i<data_info.length;i++){ var marker = new T.Marker(new T.LngLat(data_info[i][0],data_info[i][1])); // 創建標注 var content = data_info[i][2]; map.addOverLay(marker); // 將標注添加到地圖中 addClickHandler(content,marker); } function addClickHandler(content,marker){ // 改為鼠標懸浮顯示 marker.addEventListener("mouseover",function(e){ openInfo(content,e)} ); //添加鼠標離開后關閉提示框 marker.addEventListener("mouseout",function(e){ map.closeInfoWindow() } ); } function openInfo(content,e){ var point = e.lnglat; marker = new T.Marker(point);// 創建標注 var markerInfoWin = new T.InfoWindow(content,{offset:new T.Point(0,-30)}); // 創建信息窗口對象 map.openInfoWindow(markerInfoWin,point); //開啟信息窗口 } } </script> </head> <body onLoad="onLoad()"> <div id="mapDiv"></div> <p>為多個點添加多個點的信息窗口</p> </body> </html> 
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13
          • 14
          • 15
          • 16
          • 17
          • 18
          • 19
          • 20
          • 21
          • 22
          • 23
          • 24
          • 25
          • 26
          • 27
          • 28
          • 29
          • 30
          • 31
          • 32
          • 33
          • 34
          • 35
          • 36
          • 37
          • 38
          • 39
          • 40
          • 41
          • 42
          • 43
          • 44
          • 45
          • 46
          • 47
          • 48
          • 49
          • 50
          • 51
          • 52
          • 53
          • 54
          • 55
          • 56
          • 57
          • 58

          如果客戶不知道自己公司…的坐標,我們可以通過-客戶給的名稱,進行自動搜索地理位置然后進行標注實現

          <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <meta name="keywords" content="天地圖"/> <title>天地圖-地圖API-范例-地理編碼</title> <style type="text/css">body,html{width:100%;height:100%;margin:0;font-family:"Microsoft YaHei"}#mapDiv{width:100%;height:400px}input,b,p{margin-left:5px;font-size:14px}</style> <script type="text/javascript" src="http://api.tianditu.gov.cn/api?v=4.0&tk=9e70e9aa0be51fe8ad220e1c4b5d5aa5"></script> <script> var map; var zoom = 3; var geocoder; function onLoad() { //初始化地圖對象 map=new T.Map("mapDiv"); //設置顯示地圖的中心點和級別 map.centerAndZoom(new T.LngLat(116.40969,39.89945),zoom) //創建對象 geocoder = new T.Geocoder(); //根據國家名稱自動搜索,對應的坐標,然后插入標注 var list=["美國","中國","阿拉伯聯合酋長國"]; for (let string of list) { geocoder.getPoint(string,searchResult); } } function searchResult(result){ console.log("經緯度: "+result.location.lat + ',' + result.location.lon) if(result.getStatus() == 0){ //創建標注對象 var marker = new T.Marker(result.getLocationPoint()); //向地圖上添加標注 map.addOverLay(marker); var markerInfoWin = new T.InfoWindow("信息窗口"); marker.addEventListener("click", function () { marker.openInfoWindow(markerInfoWin); });// 將標注添加到地圖中 }else{ alert(result.getMsg()); } } </script> </head> <body onLoad="onLoad()"> <div id="mapDiv"></div> <p>本示例演示如何使用地理編碼接口獲得坐標信息。</p> </body> </html> 
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13
          • 14
          • 15
          • 16
          • 17
          • 18
          • 19
          • 20
          • 21
          • 22
          • 23
          • 24
          • 25
          • 26
          • 27
          • 28
          • 29
          • 30
          • 31
          • 32
          • 33
          • 34
          • 35
          • 36
          • 37
          • 38
          • 39
          • 40
          • 41
          • 42
          • 43
          • 44
          • 45
          • 46
          • 47
          • 48
          • 49
          • 50
          • 51
          • 52
          • 53
          • 54
          • 55
          • 56

          vue 引入天地圖

          • index.html 中引入天地圖在線 API
          <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <title>vue-tdt-demo</title> <!-- 引入天地圖在線 API --> <script src="http://api.tianditu.gov.cn/api?v=4.0&tk=您的密鑰" type="text/javascript"></script> </head> <body> <div id="app"></div> <!-- built files will be auto injected --> </body> </html> 
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13
          • 14
          • 15
          • components 文件夾中新建 TdtMap.vue 組件

          mounted() 中初始化天地圖

          <template> <div :id="tdtMapDivID" class="divTdtMap"></div> </template> <script> export default { name: 'TdtMap', data() { return { tdtMapDivID: "tdtMapDivID_"+this._uid, tdtMap: {} } }, created() { }, mounted(){ // 初始化天地圖 this.initTdtMap() }, watch: { }, methods: { // 初始化天地圖 initTdtMap(){ this.tdtMap = new T.Map(this.tdtMapDivID) this.tdtMap.centerAndZoom(new T.LngLat(116.40769, 39.89945), 12) }, } } </script> <style scoped> .divTdtMap { margin: 0px; padding: 0px; width: 100%; height: 80vh; z-index: 0; } </style> 
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13
          • 14
          • 15
          • 16
          • 17
          • 18
          • 19
          • 20
          • 21
          • 22
          • 23
          • 24
          • 25
          • 26
          • 27
          • 28
          • 29
          • 30
          • 31
          • 32
          • 33
          • 34
          • 35
          • 36
          • 37
          • 38
          • 39
          • 40
          • 41
          • 測試組件,新建 test.vue

          導入 組件、注冊 組件和 使用 組件

          <template> <!-- 使用組件 --> <TdtMap></TdtMap> </template> <script> /* 導入組件 */ import TdtMap from './components/TdtMap' export default { name: 'TdtMap', components: { /* 注冊組件 */ TdtMap, }, data() { return { } }, created() { }, mounted(){ }, watch: { }, methods: { }, } </script> <style scoped> </style> 
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13
          • 14
          • 15
          • 16
          • 17
          • 18
          • 19
          • 20
          • 21
          • 22
          • 23
          • 24
          • 25
          • 26
          • 27
          • 28
          • 29
          • 30
          • 31
          • 32
          • 33
          • 34

          隱藏天地圖LOGO

           document.getElementsByClassName("tdt-control-copyright tdt-control")[0].style.display = 'none' 
          
          • 1











































          藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼藍小助,報下信息,藍小助會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

          分享此文一切功德,皆悉回向給文章原作者及眾讀者.

          轉自:csdn
          免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務


          函數作用域和立即執行函數

          前端達人

          變量作用域

          • JavaScript是函數級作用域編程語言:變量只在其定義時所在的function內部有意義。

          全局變量

          • 如果不將變量定義在任何函數的內部,此時這個變量就是全局變量,它在任何函數內都可以被訪問和更改。

          遮蔽效應

          • 如果函數中也定義了和全局同名的變量,則函數內的變量會將全局的變量“遮蔽”。

          注意考慮變量聲明提升的情況

          • 這個程序的運行結果是什么呢?

          形參也是局部變量

          • 這個程序的運行結果是什么呢?

          局部函數

          • 先來認識函數的嵌套:一個函數內部也可以定義一個函數。和局部變量類似,定義在一個函數內部的函數是局部函數。

          作用域鏈

          • 在函數嵌套中,變量會從內到外逐層尋找它的定義。

          不加var將定義全局變量

          • 在初次給變量賦值時,如果沒有加var,則將定義全局變量。

          什么是閉包

          • JavaScript中函數會產生閉包(closure)。閉包是函數本身和該函數聲明時所處的環境狀態的組合。

          •  函數能夠“記憶住”其定義時所處的環境,即使函數不在其定義的環境中被調用,也能訪問定義時所處環境的變量。

          觀察閉包現象

          • 在JavaScript中,每次創建函數時都會創建閉包。
          • 但是,閉包特性往往需要將函數“換一個地方”執行,才能被觀察出來。

          閉包非常實用

          • 閉包很有用,因為它允許我們將數據與操作該數據的函數關聯起來。這與“面向對象編程”有少許相似之處。
          • 閉包的功能:記憶性、模擬私有變量。

          閉包用途1 - 記憶性 

          • 當閉包產生時,函數所處環境的狀態會始終保持在內存中,不會在外層函數調用后被自動清除。這就是閉包的記憶性。

          閉包的記憶性舉例

          • 創建體溫檢測函數checkTemp(n),可以檢查體溫n是否正常,函數會返回布爾值。
          • 但是,不同的小區有不同的體溫檢測標準,比如A小區體溫合格線是37.1℃,而B小區體溫合格線是37.3℃,應該怎么編程呢?
          
          
          1. <!DOCTYPE html>
          2. <html lang="en">
          3. <head>
          4. <meta charset="UTF-8">
          5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
          6. <title>Document</title>
          7. </head>
          8. <body>
          9. <script>
          10. function createCheckTemp(standardTemp) {
          11. function checkTemp(n) {
          12. if (n <= standardTemp) {
          13. console.log('你的體溫正常');
          14. } else {
          15. console.log('你的體溫偏高');
          16. }
          17. }
          18. return checkTemp;
          19. }
          20. // 創建一個checkTemp函數,它以37.1度為標準線
          21. var checkTemp_A = createCheckTemp(37.1);
          22. // 再創建一個checkTemp函數,它以37.3度為標準線
          23. var checkTemp_B = createCheckTemp(37.3);
          24. checkTemp_A(37.2);
          25. checkTemp_B(37.2);
          26. </script>
          27. </body>
          28. </html>

          閉包用途2 - 模擬私有變量

          • 在Java、C++等語言中,有私有屬性的概念,但是JavaScript中只能用閉包來模擬。

          • 題目:請定義一個變量a,要求是能保證這個a只能被進行指定操作(如加1、乘2),而不能進行其他操作,應該怎么編程呢?
          
          
          1. <!DOCTYPE html>
          2. <html lang="en">
          3. <head>
          4. <meta charset="UTF-8">
          5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
          6. <title>Document</title>
          7. </head>
          8. <body>
          9. <script>
          10. // 封裝一個函數,這個函數的功能就是私有化變量
          11. function fun() {
          12. // 定義一個局部變量a
          13. var a = 0;
          14. return {
          15. getA: function () {
          16. return a;
          17. },
          18. add: function () {
          19. a++;
          20. },
          21. pow: function () {
          22. a *= 2;
          23. }
          24. };
          25. }
          26. var obj = fun();
          27. // 如果想在fun函數外面使用變量a,唯一的方法就是調用getA()方法
          28. console.log(obj.getA());
          29. // 想讓變量a進行加1操作
          30. obj.add();
          31. obj.add();
          32. obj.add();
          33. console.log(obj.getA());
          34. obj.pow();
          35. console.log(obj.getA());
          36. </script>
          37. </body>
          38. </html>

          使用閉包的注意點

          • 不能濫用閉包,否則會造成網頁的性能問題,嚴重時可能導致內存泄露。
          • 所謂內存泄漏是指程序中己動態分配的內存由于某種原因未釋放或無法釋放。

          立即執行函數IIFE

          • IIFE(Immediately Invoked Function Expression,立即調用函數表達式)是一種特殊的JavaScript函數寫法,一旦被定義,就立即被調用。

          形成IIFE的方法

          • 函數不能直接加圓括號被調用。

          • 函數必須轉為“函數表達式”才能被調用。

          IIFE的作用1 - 為變量賦值

          • 為變量賦值:當給變量賦值需要一些較為復雜的計算時(如if語句),使用IIFE顯得語法更緊湊。

          IIFE的作用2-將全局變量變為局部變量

          • IIFE可以在一些場合(如for循環中)將全局變量變為局部變量,語法顯得緊湊。








          藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼藍小助,報下信息,藍小助會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

          分享此文一切功德,皆悉回向給文章原作者及眾讀者.

          轉自:csdn
          免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務

          Web API介紹及DOM對象(一)

          前端達人

          目錄

          一、API 和 Web API

          1.API 

          2.Web API  

          3.API 和 Web API總結 

          二、DOM 介紹 

          1. DOM樹 

          三、獲取元素方法 

          1.getElementById()

          2.getElementsByTagName

            2.1element.getElementsByTagName() 

          3.HTML5 新增的方法獲取

          3.1 document.getElementsByClassName('類名')

          3.2 document.querySelector('選擇器')

          3.3 document.querySelectorAll('選擇器')

          4.獲取 body 、html 元素 

          四、事件和樣式操作 

          1.事件概述

          2.執行事件的步驟 

          2.1 常見的鼠標事件 

          3. 操作元素 

          3.1 改變元素內容

          3.2 修改元素屬性

          3.3 修改表單元素的屬性

          3.4 修改樣式屬性


          一、API 和 Web API

          1.API 

           API( Application Programming Interface,應用程序編程接口)
          是一些預先定義的函數,目的是提供應用程序
          與開發人員基于某軟件或硬件得以訪問一組例程的能力,而又無需訪問源碼,或理解內部工作機制的細節。
          簡單理解: API是給程序員提供的一種工具,以便能更輕松的實現想要完成的功能

          2.Web API  

          Web API是瀏覽器提供的一套操作瀏覽器功能和頁面元素的API( BOM和DOM)。

          比如我們想要瀏覽器彈出一個警示框,直接使用alert( '彈出');

          3.API 和 Web API總結 

          1. API是為我們程序員提供的一個接口,幫助我們實現某種功能,我們會使用就可以,不必糾結內部如何實現
          2. Web API主要是針對于瀏覽器提供的接口,主要針對于瀏覽器做交互效果
          3. Web API 一般都有輸入和輸出(函數的傳參和返回值) ,Web API很多都是方法(函數)
          4.學習Web API可以結合學習內置對象方法的思路學習

          二、DOM 介紹 

          文檔對象模型( Document Object
          Model ,簡稱DOM) ,是W3C組織推薦的處理可擴展標記語言( HTML或者XML )的標準編程接口
          W3C已經定義了一系列的DOM接口,通過這些DOM接口可以改變網頁的內容、結構和樣式 

          1. DOM樹 

          •  文檔:一個頁面就是一個文檔,DOM中使用 document表示
          • 元素:頁面中的所有標簽都是元素,DOM中使用 element表示
          • 節點:網頁中的所有內容都是節點(標簽、屬性、文本、注釋等),DOM中使用 node表示

          DOM把以上內容都看作是對象 

          三、獲取元素方法 

          1.getElementById()

           使用 getElementById( ) 方法可以獲取帶有ID的元素對象

          
          
          1. <div id="time" >2019-9-9 </div>
          2. <script>
          3. var timer = document.getElementById('time');
          4. console.dir(timer);
          5. </script>
          6. //返回結果為<div id= "time">2019-9-9</div>這一整個標簽

           注意:
          1.因為我們文檔頁面從上往下加載,先得有標簽所以我們script 寫到標簽的下面
          2. get 獲得element 元素 by 通過駝峰命名法
          3.參數 id 是大小寫敏感的字符串
          4.返回的是一個元素的對象
          5. console.dir 打印我們返回的元素對象更好的查看里面的屬性和方法

          2.getElementsByTagName

           使用getElementsByTagName()方法可以返回帶有指定標簽名的對象的集合
           document.getElementsByTagName('標簽名');

          
          
          1. <ul>
          2. <li>1</li>
          3. <li>2</li>
          4. <li>3</li>
          5. <li>4</li>
          6. <li>5</li>
          7. </ul>
          8. <script>
          9. var lis = document.getElementsByTagName('li');
          10. console.log(lis);
          11. </script>

           1. 返回的是 獲取過來元素對象的集合  以偽數組的形式存儲的

           2. 我們想要依次打印里面的元素對象我們可以采取遍歷的方式  
             for(var i = 0; i < lis.length; i++) {
                 console.log(lis[i]);
              }

           3. 得到元素對象是動態的,標簽里面的內容變了,得到的內容就變了.

            2.1element.getElementsByTagName() 

          element.getElementsByTagName()  可以得到這個元素里面的某些標簽 

          
          
          1. <ul id = "nav">
          2. <li>1</li>
          3. <li>2</li>
          4. <li>3</li>
          5. <li>4</li>
          6. <li>5</li>
          7. </ul>
          8. <script>
          9. var nav = document.getElementById('nav');
          10. var navLis = nav.getElementsByTagName('li');
          11. </script>

          3.HTML5 新增的方法獲取

          3.1 document.getElementsByClassName('類名')

          根據類名返回元素對象集合  

          
          
          1. <div class="box" >123</div>
          2. <script>
          3. var boxs = document.getElementsByClassName('box');
          4. </script>

          3.2 document.querySelector('選擇器')

           根據指定選擇器返回第一個元素對象
           注意:里面的選擇器需要加符號 類選擇器:.box   id選擇器: #box

          
          
          1. var firstBox = document.querySelector('.box');
          2. var nav = document.querySelector('#nav');
          3. var firstBox = document.querySelector('li');

          3.3 document.querySelectorAll('選擇器')

          返回指定選擇器的所有元素對象集合 

          
          
          1. var allBox = document.querySelectorAll('.box');
          2. //返回所有 class 名為 box 的標簽

          4.獲取 body 、html 元素 

          
          
          1. var body = document.body ;
          2. // 返回 body 元素對象
          3. var htmlEle = document.documentElement;
          4. // 返回 html 元素對象

          四、事件和樣式操作 

          1.事件概述

          JavaScript 使我們有能力創建動態頁面,而事件是可以被JavaScript偵測到的行為

          簡單理解:觸發---響應機制

          網頁中的每個元素都可以產生某些可以觸發 JavaScript 的事件,例如,我們可以在用戶點擊某按鈕時產生一個事件,然后去執行某些操作
           

           事件是有三部分組成   事件源  事件類型  事件處理程序  

          1. 事件源  事件被觸發的對象     比如按鈕
          2. 事件類型   如何觸發   比如鼠標點擊觸發
          3. 事件處理程序  通過一個函數賦值的方式  完成

          2.執行事件的步驟 

          1. 獲取事件源

          2. 注冊事件(綁定事件)

          3. 添加事件處理程序(采用函數賦值形式)
           

          2.1 常見的鼠標事件 

          鼠標事件 觸發條件
          onclick 鼠標點擊左鍵觸發
          onmouseover 鼠標經過觸發
          onmouseout 鼠標離開觸發
          onfocus 獲取鼠標焦點觸發
          onblur 失去鼠標焦點觸發
          onmousemove 鼠標移動觸發
          onmouseup 鼠標彈起觸發
          onmousedown 鼠標按下觸發

          3. 操作元素 

          JS的 DOM 操作可以改變網頁內容、結構和樣式,我們可以利用 DOM 操作元素來改變元素里面的內容、屬性等。注意一下都是屬性 

          3.1 改變元素內容

          ① element.innerText 

          可用于獲取標簽中的內容。此時獲取的是從起始位置到終止位置的內容,但它去除 html 標簽, 同時空格和換行也會去掉

          獲取到 p 標簽再打印 p 標簽中的內容
          var p = document.querySelector('p');
          console.log(p.innerText);

          ② element.innerHTML

          獲取內容時,獲取的是起始位置到終止位置的全部內容,包括 html 標簽, 同時保留空格和換行

          獲取到 p 標簽再打印 p 標簽中的內容
          var p = document.querySelector('p');
          console.log(p.innerHTML);

          普通標簽使用,表單不能用

          3.2 修改元素屬性

            src 、href、id 、 alt 、title

          案例:點擊不同按鈕顯示不同圖片

          
          
          1. <title>Document</title>
          2. <style>
          3. img {
          4. width: 300px;
          5. margin-top: 20px;
          6. }
          7. </style>
          8. </head>
          9. <body>
          10. <button id="but1">按鈕1</button>
          11. <button id="but2">按鈕2</button>
          12. <br>
          13. <img src="../images/objpic07.jpg" alt="" title="圖片1">
          14. <script>
          15. var item1 = document.getElementById('but1');
          16. var item2 = document.getElementById('but2');
          17. var img = document.querySelector('img');
          18. item1.onclick = function() {
          19. img.src = '../images/objpic07.jpg';
          20. img.title = '圖片1';
          21. }
          22. item2.onclick = function() {
          23. img.src = '../images/objpic08.jpg';
          24. img.title = '圖片2';
          25. }
          26. </script>
          27. </body>

          3.3 修改表單元素的屬性

          可操作的表單元素的屬性: type 、value、 checked、 selected、 disabled

          按下按鈕修改表單框 里面的內容,通過修改 value
          input.value 等于 this.value  因為 this指向的是事件函數的調用者   

          案例:仿京東顯示隱藏密碼

           

          
          
          1. <title>Document</title>
          2. <style>
          3. .box {
          4. position: relative;
          5. width: 400px;
          6. border-bottom: 1px solid #ccc;
          7. margin: 100px auto;
          8. }
          9. .box input {
          10. width: 370px;
          11. height: 30px;
          12. border: 0;
          13. outline: none;
          14. }
          15. .box img {
          16. position: absolute;
          17. top: 2px;
          18. right: 2px;
          19. width: 24px;
          20. }
          21. </style>
          22. </head>
          23. <body>
          24. <div class="box">
          25. <label for="">
          26. <img src="../images/close.png" alt="" id="pic">
          27. </label>
          28. <input type="password" id="item">
          29. </div>
          30. <script>
          31. var item = document.getElementById('item');
          32. var pic = document.getElementById('pic');
          33. var flag = 0;
          34. pic.onclick = function() {
          35. if(flag == 0) {
          36. item.type = 'text';
          37. this.src = '../images/open.png';
          38. flag = 1;
          39. } else {
          40. item.type = 'password';
          41. this.src = '../images/close.png';
          42. flag = 0;
          43. }
          44. }
          45. </script>
          46. </body>

          3.4 修改樣式屬性

          ① element.style 行內樣式操作

          ② element.className 類名樣式操作

          行內樣式案例:顯示與隱藏文本操作(當Input獲取焦點,文本框初始內容消失,失去焦點,內容出現) 

          
          
          1. <title>Document</title>
          2. <style>
          3. input {
          4. color: #999;
          5. outline: none;
          6. height: 24px;
          7. }
          8. </style>
          9. </head>
          10. <body>
          11. <input type="text" value="手機">
          12. <script>
          13. var item = document.querySelector('input');
          14. item.onfocus = function() {
          15. if(this.value == '手機') {
          16. this.value = '';
          17. }
          18. this.style.color = '#333';
          19. this.style.border = '1px solid pink';
          20. }
          21. item.onblur = function() {
          22. if(this.value == '') {
          23. this.value = '手機';
          24. }
          25. this.style.color = '#999';
          26. this.style.border = '1px solid black';
          27. }
          28. </script>
          29. </body>

           類名樣式案例:密碼框驗證信息(提示輸入6~16位密碼,不滿或超出提示錯誤,正確則提示正確)

          
          
          1. <title>Document</title>
          2. <style>
          3. .box {
          4. width: 400px;
          5. margin: 100px auto;
          6. }
          7. input {
          8. outline: none;
          9. }
          10. .pic {
          11. height: 15px;
          12. display: inline-block;
          13. line-height: 15px;
          14. text-indent: 18px;
          15. font-size: 13px;
          16. color:blue;
          17. background: url(../images/mess.png) no-repeat;
          18. }
          19. .wrong {
          20. background: url(../images/wrong.png) no-repeat;
          21. color: red;
          22. }
          23. .right {
          24. background: url(../images/right.png) no-repeat;
          25. color: green;
          26. }
          27. </style>
          28. </head>
          29. <body>
          30. <div class="box">
          31. <input type="password" class="ipt">
          32. <p class="pic">請輸入6~16位的密碼</p>
          33. </div>
          34. <script>
          35. var item = document.querySelector('.ipt');
          36. var item2 = document.querySelector('.pic');
          37. item.onblur = function() {
          38. if(this.value.length < 6 || this.value.length > 16) {
          39. item2.className = 'pic wrong';
          40. item2.innerHTML = '您輸入的位數不對要求6~16位';
          41. } else {
          42. item2.className = 'pic right';
          43. item2.innerHTML = '您輸入的正確!';
          44. }
          45. }
          46. </script>
          47. </body>





          藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼藍小助,報下信息,藍小助會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

          分享此文一切功德,皆悉回向給文章原作者及眾讀者.

          轉自:csdn
          免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務

          寫大事件項目的get,post類型的接口

          前端達人

          1.準備工作:npm下載相關包

          1.1初始化npm得到package.json文件 (不初始化也可以之前初始化的文件獲得package.json文件)

          npm init --yes

          1.2 express包   

          npm i express 

          1.3 multer 包

          npm i multer

          2.創建server文件:在同級文件夾下創建server文件(文件名可以自定義)

          3.登錄接口部分

           3.1 登錄接口代碼

          
          
          1. const express = require('express')
          2. //將這個express的方法賦值給app
          3. const app = express()
          4. //引入multer這個包
          5. const multer = require('multer')
          6. //上傳的文件會保存在這個目錄下
          7. const upload = multer({ dest: 'uploads/' })
          8. //使用中間件
          9. app.use(express.urlencoded());
          10. app.use(express.json());
          11. //登錄接口
          12. app.post('/api/login', (req, res) => {
          13. if (req.body.username && req.body.password) {
          14. res.json({
          15. "status": 0,
          16. "message": "登錄成功",
          17. })
          18. // res.send(req.body)
          19. console.log('req.body', req.body)
          20. } else {
          21. res.json({
          22. "status": 1,
          23. "message": "登錄失敗",
          24. })
          25. // res.send(req.body)
          26. console.log('req.body', req.body)
          27. }
          28. // res.send()
          29. })
          30. app.listen(8023, () => {
          31. console.log('8023端口運行成功,已經跑起來了...');
          32. })

          3.2 終端運行代碼

           3.3 在Postman中測試發送請求,填寫必要參數返回結果:

          3.4  在Postman中測試發送請求,不填寫必要參數返回結果:

          4. 獲取接口部分:

          4.1  獲取接口代碼

          
          
          1. //引入express框架
          2. const express = require('express')
          3. //將這個express的方法賦值給app
          4. const app = express()
          5. //引入multer這個包
          6. const multer = require('multer')
          7. //上傳的文件會保存在這個目錄下
          8. const upload = multer({ dest: 'uploads/' })
          9. //使用中間件
          10. app.use(express.urlencoded());
          11. app.use(express.json());
          12. //獲取接口
          13. app.get('/my/user/userinfo', (req, res) => {
          14. if (req.body.Authorization) {
          15. res.json({
          16. "status": 0,
          17. "message": "獲取成功",
          18. "data": {
          19. "id": 1,
          20. "username": "leopard",
          21. "nickname": "little-leopard",
          22. "email": "laotang@qq.com",
          23. "user_pic": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAe"
          24. }
          25. })
          26. console.log('req.body', req.body)
          27. } else {
          28. res.json({
          29. "status": 1,
          30. "message": "獲取失敗",
          31. })
          32. console.log('req.body', req.body)
          33. }
          34. })
          35. app.listen(8023, () => {
          36. console.log('8023端口運行成功,已經跑起來了...');
          37. })

          4.2 在終端運行

          4.3 在Postman中測試發送請求,填寫必要參數返回結果:

           

          4.4 在Postman中測試發送請求,不填寫必要參數返回結果:

          5.post接口上傳圖片

           5.1 上傳圖片代碼

          
          
          1. //引入express框架
          2. const express = require('express')
          3. //將這個express的方法賦值給app
          4. const app = express()
          5. //引入multer這個包
          6. const multer = require('multer')
          7. //上傳的文件會保存在這個目錄下
          8. const upload = multer({ dest: 'uploads/' })
          9. //使用中間件
          10. app.use(express.urlencoded());
          11. app.use(express.json());
          12. app.post('/my/user/avatar', upload.single('avatar'), (req, res) => {
          13. console.log(req.file);
          14. if (req.file) {
          15. res.json({
          16. "status": 0,
          17. "message": "上傳圖片成功"
          18. })
          19. console.log('req.body', req.body)
          20. } else {
          21. res.json({
          22. "status": 1,
          23. "message": "上傳圖片失敗"
          24. })
          25. console.log('req.body', req.body)
          26. }
          27. })
          28. app.listen(8023, () => {
          29. console.log('8023端口運行成功,已經跑起來了...');
          30. })

          5.2 Postman上傳圖片測試

           5.3終端查看



          藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼藍小助,報下信息,藍小助會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

          分享此文一切功德,皆悉回向給文章原作者及眾讀者.

          轉自:csdn
          作者:
          免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務


          前端保證一比一按源文件做,結果又是慘不忍睹

          seo達人


          圖片

          但真的是相差很遠誒!

          我再仔細問了一下,終于知道原因了……

          他確實是按照方案做的,但是所采用的,都是寬度和高度,而不是間距。

          我說:

          『 界面布局的關鍵不是寬高,而是間距 』

          看他相當地不以為然,于是我只好這樣從頭開始解釋:

           

          前端原理

          對于前端來說,界面是一個盒子一個盒子套起來的,而不是像畫圖工具那樣一個圖層一個圖層疊加起來的。

          如果把界面看作一個大盒子,那么里面的模塊就是小盒子。小盒子里面會裝有文字、圖片或者更小的盒子

          由于現在很多網站都是響應式的,所以這些盒子一般沒有固定的寬度,而是根據固定的邊距,來自由伸縮。

          圖片

          Sketch 和 Figma 等 UI 繪圖工具,都提供了固定邊距的自動布局功能,用的就是這個原理。

          圖片

          上圖截自:Sketch

           

          但是因為這些繪圖工具的畫板里用的是圖層結構,所以只能固定元素相對于畫板的邊距,而不能固定元素相對于模塊的邊距,除非使用組件。

           

          尺寸是變化的

          前面提到了一個很關鍵的點,那就是「盒子」,或者說框架寬度不固定(響應式頁面)。

          既然寬度,那么框架的高度也同樣是不固定的

          因為頁面包含大量固定字數的文字或者固定比例的圖片,在寬度不固定的情況下,高度自然也沒法固定了。

          圖片

          那么既然頁面內的元素無法固定高寬,那么什么才是固定的呢?

          答案是:

           

          間距是固定的

          你可以想象一下柵格伸縮的情景,原理一樣,只是真實頁面上柵格替換成了各不相同的邊距。

          也就是說,設計師最好是一開始和前端交付時,就明確設計稿上各元素之間的邊距,而不是高寬:

          圖片

          這一點,不但一些設計師不清楚,很多前端也不清楚。只是設計師不清楚是因為不知道前端原理;而前端不清楚,是因為他們不在意相應布局的視覺效果。

          不過,雖然框架不固定高寬,但是按鈕、圖標、LOGO 等小元素,通常還是固定高寬的

          圖片

           

          文字對尺寸的影響

          一些設計師向前端提供文字參數時,只提供字體和字號,結果出來的效果還是相差很遠。

          圖片

          通常來說,最容易產生問題的參數就是「行高」了,因為瀏覽器的默認行高是 100%,而很多系統平臺都有自己的默認行高。

          所以說,行高一定要明確才能確保效果,而且最好是提供百分比而不是數字,這樣就能夠跟隨字體尺寸按比例變化了。

          圖片

          除此之外,還有「段落間距」和「字間距」可以注意一下,不過使用率較低就不多說了。

          圖片圖片

           

          尺寸標注

          我知道現在有很多工具可以查看設計稿的尺寸,但是如果前端是新手,也會 get 不到你的設計規范。

          標注的時候,就可以只挑關鍵參數,即:字體、字號、行高、邊距、色彩。

          其實,如果你知道哪些是關鍵的,需要標注的東西也沒有特別多,比以后東拉西扯地溝通細節高效多了。

          圖片

          很多設計師看了上圖的標注,也許會驚呼“沒必要”吧!

          這說明你的前端同事很優秀,不需要解釋太多。

          可即便前端同事再優秀,按鈕是否要自動靈活伸縮?按照文字內容還是按照界面寬度伸縮?這些東西,也還是要他們自己來“猜”。

          像我這樣對自適應方案想得比較多的,就更加傾向于標注清楚些。

           

          總結

          如果你有一名優秀而細心的前端同事,那么以上都不是問題,可能你根本不需要知道也能好好合作。

          但是設計師的工作生涯中難免遇上幾個難對付的前端,多點溝通技巧,也可以讓自己心情愉快些。

           

          原文地址:體驗進階(公眾號)

          作者:設計師ZoeYZ

          轉載請注明:學UI網》前端保證一比一按源文件做,結果又是慘不忍睹

          藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼藍小助,報下信息,藍小助會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

          截屏2021-05-13 上午11.41.03.png

          分享此文一切功德,皆悉回向給文章原作者及眾讀者.
          免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務



          單色配色也能玩出這么多花樣?

          seo達人



          01 單色配色的定義

          大多數的設計項目都傾向于使用多色調進行搭配,獲得豐富的視覺層次,但有些時候畫面只使用少量顏色也可以做出優秀的設計。

          單色并不是指只有一種顏色,而是只有一種色相。單色配色是只使用一種色相進行色彩搭配的方法。單色搭配雖然沒有形成顏色的對比,但色相中卻有著無數的色調變化,利用同一色相中純度、明度的層次變化,也可以形成良好的視覺效果。

          圖片

          圖片

          單色配色其實并不意味著單調,單色配色在很多設計項目中,都呈現出了極具表現力的一面,優秀的單色配色并不一定弱于多色配色。

          圖片

          在單色配色中,經常會使用一些無彩色(黑白灰)用于文本、背景和裝飾元素來豐富畫面層次。

          圖片

          使用紫色細微的漸變對比,畫面形成豐富了的明暗層次,紫色的明度較低,可以很好的承載白色文字信息

          圖片

          使用黑色作為背景,可以很好的襯托出綠色主體,給人一種深邃、神秘的視覺感受。

           

          02 單色配色的優點

          對于新手設計師來說,顏色越少畫面越容易把控,色彩層級越精簡,就越容易達到整體色彩平衡。單色搭配可以產生低對比度的和諧美感,視覺上形成協調統一的感覺。

          圖片

          不需要使用過多的顏色,通過藍色明度的層次變化,畫面也可以很豐富,能很好傳達出智慧、科技的主題。

          圖片

          以企業形象色為主色調進行設計,使設計的畫面具有統一的色彩,還可以向人們傳達出強烈的品牌效應。

          單色配色簡約大氣、色調干凈統一且穩定,容易營造出和諧與平衡的感覺,是較容易掌握的配色方法。

          圖片

           

          03 單色配色的方法

          ①使用HSB模式建立配色方案

          HSB色彩模式是將顏色三屬性進行量化,色相H以角度(0°-360°)表示,飽和度S和亮度B以(0%-100%)表示。

          圖片

          在確定基礎色相(H)之后,可以通過調整飽和度(S)和亮度(B),來創造一套富有層次的配色方案。

          此案例以“H:255”為基礎色建立配色方案。

          圖片

          圖片

          使用此方法可以得到同一色相中大量的色彩樣本,但這并不意味著你需要在單色配色中使用很多顏色,一般選擇3、4種足以。

          接下來需要考慮色彩的明暗和飽和度,調整這些屬性,讓配色更貼合你的設計目標。

          圖片

          由于單色配色色彩的對比度沒有多色配色那么明顯,同一配色方案內不同的顏色之間,需要形成明暗變化,構成一個階梯型的色階。

          圖片

           

          ②使用配色工具輔助配色

          目前有大量的配色網站可以用來輔助配色,對于配色基礎薄弱的新人會有很大的幫助。在這里給大家推薦的是Adobe公司出品的一款極為高效的在線配色工具:Adobe Color。

          在Adobe Color中,使用色盤設置了基礎顏色之后,另外四個關聯顏色會自動生成。

          圖片

          在調色規則中選擇“單色”。使用橙色為基礎顏色,會自動生成四個關聯顏色,篩選適合的顏色配置到畫面中,就能很快完成配色方案:

          圖片

          再看一個案例,根據主體最顯眼的紫藍色為基色,按照生成的配色方案,篩選適合的顏色配置到畫面中,這樣的配色會非常協調統一。

          圖片

           

          04 總結

          單色配色是較容易掌握的配色方法。單色搭配雖然沒有形成顏色的對比,但利用同一色相中飽和度、明度的層次變化,也可以形成良好的視覺效果。

          單色搭配可以產生低對比度的和諧美感,視覺上形成協調統一的感覺。在單色配色中,經常會使用一些無彩色(黑白灰)用于文本、背景和裝飾元素來豐富畫面層次。

           

          原文地址:藝海拾貝Design(公眾號)

          作者:鄧海貝

          轉載請注明:學UI網》單色配色也能玩出這么多花樣?

          藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼藍小助,報下信息,藍小助會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

          截屏2021-05-13 上午11.41.03.png

          分享此文一切功德,皆悉回向給文章原作者及眾讀者.
          免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務




          日歷

          鏈接

          個人資料

          藍藍設計的小編 http://www.syprn.cn

          存檔

          亚洲va欧美va天堂v国产综合