<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設計者

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



          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界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務




          中秋節排版設計這樣做,真出效果??!

          seo達人



          圖片

          接下來就是看看如何將這些元素用到設計中了,我們先來整理好文案。

          圖片

          然后將信息分布與構圖用方塊表現出來,深色重要,淺色次要,這樣前期的構思就OK了。

          圖片

          接下來我們先刻畫主體,這里主體我想用中秋與燈籠相結合,字體的筆畫風格加入中式的回紋效果。

          圖片

          接著我們進行墊字設計,用畫筆先勾出大概的骨骼,以畫筆為基礎用鋼筆工具去完善。

          圖片

          然后我們將文字與燈籠結合,搭配小文字豐富細節,海報主體就確定了。

          圖片

          如果單獨展示字體,可以找個中秋的背景素材,然后以橫版banner去展示。

          圖片

          接著我們繼續做海報,將主體放到畫面中,由于兩側比較空,可以加上兩個疊加的圓圈擴大占比,顏色以紫與金結合。

          圖片

          接下來將剩余的信息處理好,部分信息加入圖形,字體統一用襯線體,也會更有韻味。

          圖片

          然后將處理好的信息放入相應的位置,根據空間布局來進行排放,要使畫面平衡統一。

          圖片

          最后我們可以加入小英文與裝飾線豐富畫面,裝飾線與主體相呼應,同時會使畫面節奏性更好,信息之間的關聯性更強。

          圖片

          那么這時我們可以上個樣機,增強視覺效果,設計就完成了,噔噔噔噔~

          圖片

          OK,這次的分享就到這里,學會巧用AI自己帶的工具,應用到我們的設計中,不僅會使我們的效率增加,還能更出效果哦。

           

          原文地址:趣投記(公眾號)

          作者:趣趣熊

          轉載請注明:學UI網》中秋節排版設計這樣做,真出效果!!

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

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

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

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



          設計師“進階輔技” —— 高效溝通術

          seo達人



          一、什么是溝通?

          溝通的本質:

          雙向信息傳輸,除了清晰傳遞自我信息以外還需要引導對方,讓其也能準確表達訴求。

          溝通的誤區:

          “表達”與“溝通”有巨大區別:前者是單項輸出,如何把自己的觀點清晰地傳遞給別人,后者是雙向傳輸,除了清晰傳遞自我信息以外還需要引導對方,讓其也能準確表達訴求。

          舉個例子:一個不善言辭的人在生活中遇到一個溝通感覺特別順的人,能讓自己愿意說出自己的想法,再復雜的事都能和他相談甚歡。仔細觀察一下,這往往不是因為對方表達能力好,而是對方的“溝通引導能力”特別好。

          圖片

           

          二、設計師為什么需要溝通?

          圖片

          1.提升工作效率:

          溝通到位能讓我們始終保持正確的目標和方向,避免無效溝通和模糊猜測,讓工作事半功倍。

           

          2.設計師技能加持:

          設計師的專業能力是立足之本,而溝通能力是解決一切訴求的前提和助攻!具備良好的溝通能力不僅能展現設計師的職業素養和個人魅力,溝通中也能鍛煉全局思考和解決問題的能力;

          圖片

           

          3.服務行業特性:

          設計師作為一個服務行業,首先要保證是客戶想要的(方向正確),其次是帶給用戶驚喜的(體驗升級),能洞察/挖掘出客戶真正的的訴求/痛點,才能解決根本性的體驗問題。

           

          三、如何完成一次有效溝通?

          如何完成一次有效溝通?形成一套良好的“溝通”閉環機制?

          有效溝通是指有效的把信息以明確的目的傳遞給對方,與對方達成共識并付諸行動的過程。只有溝通雙方真正理解各自表達的東西,并能針對異議,達成共識,這樣才能算一整個有效的溝通。

          圖片

           

          四、高效溝通法則

          圖片

          心態好

          • 01.尊重和合作意識:這一點是高效溝通的前提,前面也說到了溝通跟表達的區別,溝通閉環是需要雙方合作的,彼此尊重,抱著合作的態度一起推進目標達成,實現共贏那是再好不過了。
          • 02.保持同理心:『百度對同理心解釋為:同理心(Empathy),或稱做換位思考、神入或共情,指站在對方立場設身處地思考的一種方式。』“自我意識”是同理心的基礎。感知到別人情緒后,通過換位思考,用“自我意識”去理解別人的情緒,最終了解他人的想法。

           

          擅表達

          表達能力在工作中體現在方方面面,日常需求對接,組內主題分享,向上管理,述職晉升面試等,都離不開表達能力的支持。如果一個設計師不懂得推銷自己的設計方案,明明作品很優秀卻輸在了表達上,專業能力會遭受質疑,也會阻礙個人影響力的拓展。

          • 01.“三點式”表達法則:明確表達的核心,邏輯清晰,思路完整,訓練自己對于復雜事情都能總結1.2.3的能力
          • 02.多樣性表達方式:溝通是要用對方聽得懂的語言——包括文字、語調及肢體語言,針對不同的溝通場景和溝通對象,選擇更適合的溝通方式
          • 03.控制時間節奏:大多數人注意力集中的時間是有限的,大部分人難以關注細節

           

          多交流

          • 01.引導:主動跟需求方“聊天”,引導需求方說出“隱藏”訴求,明確目標和價值
          • 02.傾聽:消化理解訴求,反饋問題,思考方案
          • 03.反饋互換意見:建立情感氛圍,復述重點

           

          找共識

          • 01.價值導向:針對業務訴求點提供專業設計意見,求同存異,找到視覺偏好的“平衡點”
          • 02.有理有據:針對目標和價值模糊不清的部分,理清思路并提供專業一件,有理有據

           

          五、多場景下的溝通要點

          1.獨立需求的設計對接

          Q:如何減少設計溝通中“試一試”的行為?

          W:1.需求方沒有預先的期望;2.需求方有自己的期望但無法準確表達。

          Point:

          1.風格稿很重要!擅長用圖片去探索需求方的風格意向;

          2.多跟需求方“聊天”,培養合作默契,有共識才能對話;

          3.提供專業意見,主動介紹設計思路及過程,增強作品的說服力;

          4.培養需求方的審美情趣,共鳴好的設計。

           

          2.統籌角色的多任務協作

          圖片

          Q:如何提升多人協作的效率和質量?

          多方溝通:

          1. 反復溝通確認
          2. 專業思考判斷
          3. 預研方案效果

          內部協作:

          1. 同步信息準確
          2. 思維共通交流
          3. 傳達合作意識

          以上就是我在實際項目中對溝通的一些心得體會。

          結語:溝通能力能讓我們更好的與他人建立信任,探究隱藏的核心問題,提高工作效率,同時也鍛煉我們從感性認知上升到理性規律的歸納總結的能力,不斷進階為更優秀的體驗設計師!

           

          原文地址:京東設計中心JDC(公眾號)

          作者:何鵑

          轉載請注明:學UI網》設計師“進階輔技” —— 高效溝通術

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

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

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

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



          日歷

          鏈接

          個人資料

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

          存檔

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