<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>

          首頁

          移動端 驗證碼/密碼 輸入框實現--安卓/ios適用

          seo達人

          如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

          先貼圖,需要實現的效果是這樣的。



          實現思路有兩個:

           

          1、用6個input,輸入一個數字后將focus給下一個輸入框。

          2、用一個input和6個span,input隱藏,用span顯示。

           

          現在大部分都是使用的第二種方法。(當然,如果你能說服產品也可以只用一個普通的input輸入框,就什么都不用考慮了)

           

          兩種方案遇到的坑,以及優缺點,如下:

           

          方案一:6個input。

           

          主要就是用js切換focus,在安卓是相當流暢的,但是在ios會嚴重卡頓,簡直逼死強迫癥。

           

          HTML:

          <div class="divYZM">
              <!-- onpropertychange是為了避免在ios中oninput方法不被觸發 -->
              <input id="check_1" class="numDiv" type="number" oninput="inputNext(check_1)" onpropertychange="inputNext(check_1)"/>
              <input id="check_2" class="numDiv" type="number" oninput="inputNext(check_2)" onpropertychange="inputNext(check_2)"/>
              <input id="check_3" class="numDiv" type="number" oninput="inputNext(check_3)" onpropertychange="inputNext(check_3)"/>
              <input id="check_4" class="numDiv" type="number" oninput="inputNext(check_4)" onpropertychange="inputNext(check_4)"/>
              <input id="check_5" class="numDiv" type="number" oninput="inputNext(check_5)" onpropertychange="inputNext(check_5)"/>
              <input id="check_6" class="numDiv" type="number" oninput="inputNext(check_6)" onpropertychange="inputNext(check_6)"/>
          </div>
          JS:

          function inputNext (id){ // 傳過來的id是個對象
              var index = Number(id.id.split("_")[1])
              if (id.value.length < 1) { // 刪除
                  id.value = ''
                  if (index > 1) {
                      var preId = 'check_' + Number(Number(index) - 1)
                      document.getElementById(preId).focus()
                      return false
                  }
              } else {
                  if(id.value.length>1) {
                      var nextValue = id.value.slice(1, 2)
                      var nextId = 'check_' + Number(Number(index) + 1)
                      id.value = id.value.slice(0, 1)
                      if ((index+1) <= 6) {
                          document.getElementById(nextId).value = nextValue
                          document.getElementById(nextId).focus()
                      }
                  }
              }
          }
          PS:我這里寫的刪除方法是有問題的,這也是我果斷放棄這種方案的原因之一。

           

          如果正常輸入,然后刪除是可以的。

           

          但是輸入幾個數后,先點擊中間的框刪除一個數字,再回到最后,便只能將中間到最后的這幾個刪掉,最前面的還需要手動點一下得到focus才能刪除。

           

          這對用戶來說,簡直太不友好了。。。

           

          CSS:

          .divYZM{
              width: 90%;
              margin: 0 auto;
              height: 100px;
              background-color: rgba(74, 35, 35, 0.42);
          }
          .numDiv{
              display: block;
              width: 10%;
              float: left;
              border-radius: 5px;
              text-align: center;
              line-height: 60px;
              font-size: 20px;
              font-weight: 900;
              color: red;
              background-color: white;
              height: 60px;
              border: 0;
              padding: 0;
              margin: 0;
              margin-left: 5.7%;
              top: 20px;
              position: relative;
              caret-color: transparent;
          }
          這里遇到的坑,舉例一個。

           

          input限制長度的屬性maxlength

           

          a、與如下兩種配合使用(tel也可以限制)

          <input type="text">  或者
          <input type="password">
           

          b、當type為number時不起作用。這時需要用js控制。

          <input type="number" oninput="if(value.length>5) value=value.slice(0,5)" />
          注意:此外,tel類型的input在ios上會調出全數字鍵盤,而number類型的input則會調出帶有標點符號的鍵盤。

           

           

          方案二:1個input和6個span。

           

          隱藏input,用span顯示內容。大坑就是,何種情況下能調起ios的軟鍵盤呢?

           

          先貼一下我剛開始的input樣式。

          width: 0;
          height :0;
          border: 0;
          padding: 0;
          margin: 0;

          第二種
          display:none;
           

          簡單粗暴,結果就是,ios木得反應。為啥呢,我想不通。

           

          后來在晚上睡覺的時候我在想,我這兩種方式input都么有占位啊,那是不是占位了就可以了呢?

           

          經測果然是可以的(默默譴責自己懶了一下,沒有將不隱藏input的情況,在手機上進行測試)。

           

          接下來貼正確代碼。

           

          CSS:

          #yzm{
              width: 0;
              border: 0;
              padding: 0;
              margin: 0;
              height: .44rem;
              position: absolute;
              outline: none;
              color: transparent;
              text-shadow: 0 0 0 transparent;
              width: 300%;
              margin-left: -100%;
          }
          #yzmTable {
              width: 90%;
              margin: 0 auto;
              height: 100px;
              /* border: 1px solid red; */
              background-color: rgba(74, 35, 35, 0.42);
              /* opacity: 0.1; */
          }
          #yzmTable span { 
              display: block;
              width: 10%;
              float: left;
              border-radius: 5px;
              text-align: center;
              line-height: 60px;
              font-size: 20px;
              font-weight: 900;
              color: red;
              background-color: white;
              height: 60px;
              margin-left: 5.7%;
              top: 20px;
              position: relative;
          }
          這里對input的樣式也包括對光標的隱藏,我在第一種方案中對光標未進行處理,因為在看到ios的卡卡卡之后果斷放棄了第一種方案。

           

          HTML:

          <input id="yzm" type="tel" maxlength="6" value="" oninput="yzmInsert()">
          <div id="yzmTable">
              <span id="s_1" onclick="intoYzm(1)">&nbsp;&nbsp;</span>
              <span id="s_2" onclick="intoYzm(2)">&nbsp;&nbsp;</span>
              <span id="s_3" onclick="intoYzm(3)">&nbsp;&nbsp;</span>
              <span id="s_4" onclick="intoYzm(4)">&nbsp;&nbsp;</span>
              <span id="s_5" onclick="intoYzm(5)">&nbsp;&nbsp;</span>
              <span id="s_6" onclick="intoYzm(6)">&nbsp;&nbsp;</span>
          </div>
          JS:

          function intoYzm(index) {
              var ele = document.getElementById("yzm")
              ele.focus()
          }
           
          function yzmInsert() { // input內容改變時觸發
              for (var i = 1; i <= 6; i++) {
                  var nextId = 's_' + i
                  document.getElementById(nextId).innerHTML = '&nbsp;&nbsp;'
              }
              var yzm = document.getElementById("yzm").value
              var yzmArr = yzm.split('');
              for (var i = 0; i < yzmArr.length; i++) {
                  const num = yzmArr[i];
                  var id = 's_' + Number(i + 1)
                  document.getElementById(id).innerHTML = '&nbsp;' + num + '&nbsp;'
              }
          }
           
          // 收起軟鍵盤的方法,點擊除了輸入框之外的其他區域就收起軟鍵盤
          $('body').on('touchend', function(el) {
              if(el.target.tagName != 'SPAN') {
                      $('yzm').blur()    
                }
          })
           

          在第二種方案中有兩個地方注意下:

           

          a、在js方法中加了對全局中6個span標簽(即六個輸入框)之外區域點擊事件的監聽,用以收起軟鍵盤,方法如下。

          $('body').on('touchend', function(el) {
              if(el.target.tagName != 'SPAN') {
                  $('yzm').blur()
              }
          })
           (比較粗糙,如果頁面中還有別的部分就比較受影響了,可以自行改進)

          b、在隱藏的input中添加了onclick方法,如下并且在其中用了blur方法使得此輸入框失去焦點。為什么這么做呢?

          <input id="yzm" type="tel" maxlength="6" value="" oninput="yzmInsert()" onclick="this.blur();">
          因為此處的隱藏并非真正的隱藏,而是透明化處理,邊框包括光標全部透明化,但實際上它還是占位的,所以當你點擊輸入框上方空白處時,仍會喚起軟鍵盤,就和我們之前所想的點擊輸入框之外區域就收起軟鍵盤沖突了。

           

          因此將input自身的點擊獲取focus禁止掉,就OK了。

           

          之前都是自己亂七八槽的瞎記,第一次寫給別人看,經驗不足,時間倉促。不足之處,還望指正。

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


          B端產品設計的6大挑戰

          資深UI設計者

          如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

          B端產品設計的6大挑戰

          翻譯: alina Wong  審校:華姐  |  UXRen翻譯組 #297 譯文

           

          在VWO工作初期,我遇到的許多情況促使我想弄明白:企業類應用(B2B,后文中統稱為B端應用)真的和消費類應用(B2C)不一樣嗎?對于設計師和設計流程來說,這種區別有多重要?

          這篇文章是我在過去幾年里的一些經驗梳理,希望能夠幫助那些想去或者已經在B端團隊工作的設計師們。

           

          什么是B端應用?

          維基百科中的定義:B端應用是一種用來滿足企業而非個人用戶需求的計算機軟件系統。

          這是一些大家可能用過或者見過的B端應用。

          在現代社會,大多數B端應用都是復雜的任務關鍵型應用,具有可拓展、分布式和模塊化等特征。B端應用對大量復雜的數據進行展示、處理和存儲,并利用這些數據實現對業務流程的支撐及其自動化。

          B端工具可以幫助構件你的產品,從而幫助企業和員工更好地完成工作。

          注:雖然B2B和B端應用在定義上略有不同,在目前的軟件生態中,這些差別幾乎無關緊要,所以本文將它們視為一類。

           

          在設計方面,B2B與B2C有什么區別?

          為B端設計并無特殊之處,優秀設計的一切準則,在這里都適用。不過,設計B2B產品和B2C產品,確實存在一些差別。

          試想一下,汽車制造vs.商用飛機制造。它們都是非凡的工業設計,把人們從A點運輸到B點。顯而易見,它們有很多的不同之處,比如使用場景、制造時間、測試&安全規范、用戶預期、購買以及所有權。所有這些不同之處都會影響設計及流程。

          同樣對于B2B應用來說,不同之處在于其獨特挑戰和應對方法。

           

          六大設計挑戰

          聲明:任何一款軟件設計都會面臨以下一些挑戰,但為B端設計時,這些挑戰更加突出。

          1. 功能復雜

          由于數據多態、可視化選項多、管理操作、多用戶協作以及和其他軟件集成等諸多因素,B2B應用的復雜度普遍高于B2C應用。為了滿足一個需求而做出的一項設計決策,往往會影響其他許多需求,而其方式有時會難以預測。一項看似簡單的功能添加,都要進行全面檢查,考慮到各種極端情況。

          Atlassian公司的Jira軟件界面:功能復雜的軟件案例。

          解決方法:

          解決復雜性的方法是什么?

          當然是簡化。不要將這誤認為是簡化界面,或者現下流行的極簡UI。這是通過恰當的規劃和流程達到的簡化。無論項目周期多么緊張,都必須在設計開始之前投入時間思考,將收集到的需求和規范進行整理。實際上,這些是設計中非常重要的工作。

          當你對設計方案確認無誤時,會直接進入Sketch、Figma或者PS階段,但這往往為時過早。抽點時間來厘清你將要設計的產品的背景和含義。通過研究和規劃,找出所有的可能性,處理所有的極端情況。確保準備萬無一失時,再進入界面設計階段。

          “如果我有60分鐘來砍斷一棵樹,我會花40分鐘先磨好斧子, 20分鐘砍倒它?!薄獊喞?林肯

          恰當的規劃和流程會在長期運行中展露優勢,帶來流暢無阻的產品體驗。

           

          2. 基于員工心理的設計

          B端用戶的心理和行為模式與B2C的用戶的截然不同。B端用戶除了要完成本職工作之外,還要兼顧在組織內的其他方面,如職業發展,職業學習,職業成功。為在職人士設計時,需要充分了解清楚他們的工作背景、流程、環境、期望、問題以及當前的解決方案。

          如何做:

          設計B端應用時,理解用戶需求非常重要。不僅要了解產品相關的需求,還要了解用戶工作和職業相關的需求。與最終用戶深入交流,研究他們的領域,嘗試用他們當前的方法,這些都非常有助于培養對用戶的同理心。

          此外,用戶太過于習慣現有的工作流程,這導致他們很難想像自己真正想要什么。他們可能會告訴你功能和選項,但卻無法提供產品創新之道。

          用戶可能認為自己想要的只是更多的功能。

          B端產品設計團隊的設計指導原則,是知道用戶目前遇到的困難是什么,然后設計出方案來解決這些困難。一旦真正理解用戶的長期目標是什么,設計師就可以有很多發揮的空間了。

          “用戶購買產品是希望變成更好的自己?!薄?JTBD理論

          與其關注用戶說什么,不如關注他們實際做什么,并以此為創新的基點,構建精益原型,并與用戶一起進行測試。

           

          3. 降低軟件切換成本

          一般來說,B端用戶習慣且滿意現有的工作流程,并沒有切換到另一種產品的需要。而且即便他們想換一個,也要層層審批。更不要說,現有數據的遷移對于公司和員工來說都是非常難的事情。所以同大眾消費者應用不同,B端應用的切換成本顯然要高得多。

          解決方法:

          說服企業換用你的軟件的兩大方法:

          1. 比競品提供更多的功能。
          2. 重新定義現有工作流程,使其用戶體驗有明顯的提升,更快,更好,更有效率。

          第二點才是設計中真正閃光之處。生產效率、工作流程是企業最關注的事情。仔細研究它們現在的方案,找到需要提升的地方??紤]如何設計出更快的工作流程,如何提升效率并降低成本。在這幾方面上創新,往往會帶來可以說服企業作出改變的解決方案。

          “衡量創新的唯一標準,就是看它是否改變了人們的行為”——Stewart Butterfield, Slack聯合創始人

          不斷尋找機會,改變傳統的方法,使之更有效,更。

           

          4.  優先增加新功能

          對于B端產品,新增功能幾乎總是比提升現有功能的體驗更優先。在產品啟動時,通常會有專門的設計沖刺階段。而一旦產品發布出去,用戶需求就開始涌入進來。付費客戶會不斷要求增加新的功能,產品團隊也制定繁忙的開發計劃。在這種情況下,設計師尤其很難說服有關人士投入時間和資源來提升設計和用戶體驗。

          避免方法:

          嘗試從這些相關人士的角度看待問題。他們經常認為,任何一段開發時間,無論是一周還是一個月,如果沒有用來開發新功能就基本等于舍棄了潛在的收入。這時,讓他們明白優化產品所帶來的好處就很重要了,要讓他們懂得優化遠比增加新功能可以帶來更多的收入。重點講講成功故事。直接和高管聊這件事,讓他們接受這種觀念。優化設計總是需要仔細分析痛點,檢驗新的想法,而這些都需要時間和創新。

          “電燈不是通過不斷優化蠟燭發明出來的。”—奧倫·哈拉里(Oren Harari)

          一旦你獲得了公司的信任,就要在有限的時間內取得一些小勝利,并且一直努力度量其影響。逐步建立起公司對設計團隊的信心,繼續嘗試更大的改進方案。

          讓產品和開發團隊成員承諾確保優秀的用戶體驗,并幫助他們主認識到這不僅僅是設計團隊的任務。

           

          5.體驗的一致性

          來源:B端用戶體驗行業報告 2017-2018

          最近,一項對3000多名B端產品設計師的調查顯示,對B端設計團隊來說,最大的挑戰是提高產品的用戶體驗一致性。不同于消費類應用,B2B產品通常有更長的產品周期且異步運行,很多時候都是分布式團隊合作設計。

          每一名設計師都面對著與其他團隊類似的問題,很容易導致產品設計不一致,比如更改設計組件、更新樣式,甚至像顏色這樣的細節都會產生不同。這些問題隨著團隊的擴大或者產品的體量增加而變得更加嚴重。

          解決方法:

          許多公司開始建立設計規范來保持產品的一致性和可拓展性。設計規范包含可復用的組件集合、清晰的設計指導,可以幫助構建任何數量的產品。設計規范通常包括:

          • 設計指南(設計原則、范例、編輯指南)
          • 視覺元素(顏色、排版層級、圖標等等)
          • UI組件(表格、按鈕、頁面樣式)
          • 使用和維護方法

          當B端設計團隊被問到是否建立了設計規范時,約55%的團隊回答是或正在創建中。這是很好的現象。需要指出的是,設計規范永遠不會100%完成,它著眼于長期,會隨著時間的推移不斷更新。

          “設計每個元素時都應該考慮到其是否易于制作和修復?!?—Leo Fender

          設計規范對于保證用戶體驗一致性具有里程碑意義。

          以下是一些B端設計規范,可以給你一些靈感:Salesforce的Lightning設計規范, Intuit的Harmony設計規范。

           

          6. 并非每一位設計師都喜歡B端產品設計

          不少設計師在做過一段時間B端應用設計后,發現它無聊單調。許多來自咨詢公司或者有B2C經驗的設計師覺得B端設計缺乏激情和多樣性。做那種酷炫的微交互和動畫(就是會發在dribbble上那種)的機會并常有。這樣,工作就變得乏味無趣,設計師們感受不到成就感,提不起勁來。

          避免方法:

          B端應用的用戶體驗旨在幫助用戶更好地完成工作。設計一個迷人的界面來吸引用戶,(盡管并無害處,卻)總是在被排在低優先級。標準化的、可預知的、所見即所得的用戶界面,最適合目標用戶。

          我們的目標是讓用戶發出“哇!”的感嘆,不是因為絢麗的界面,而是因為產品能夠幫助他地完成工作。

          組建B端應用設計團隊時,選擇目的和動機一致的設計師最為關鍵。設計師的動機,應該大量來自于解決復雜的問題,看到自己的設計如何幫助用戶完成他們的工作。

          所以,在設計師加入團隊之前,評估他們的想法并設定正確的期望是非常必要的。

           

          B端設計的一般性建議

          企業本身是在逐步發展的。B端應用不再是難用、無聊的產品,用戶期望B端用戶像消費類應用一樣有著優秀的體驗。他們喜歡漂亮的界面,不希望在使用前看說明文檔。下一代技術,例如VR、AI和聲音已經進入了我們的生活,也很快會應用到工作中。對B端應用來說,這令人興奮,而設計師所能做的,則是無限的。

          做B端應用設計的三個指導原則:

          1. 擁抱靈活性和模塊化。
            設計任何東西的時候,都要考慮到它是會發展變化。不僅僅要為當前的需求定制設計組件,更要考慮它對未來需求的適應性和可擴展性。
          2. 建立條理和流程。
            優秀的合作,定期的用戶調研,可執行的問題報告,有側重點的設計迭代,這些往往都是我們所期待的,但卻又難以每次都得以實現。最好建立一個可重復的流程,并在每一個周期都予以改進。
          3. 全局思考。
            時刻關注你的設計和添加會如何影響整個產品以及公司愿景。當你關注整體時,你設計出的產品,你所做的升級,增加的功能,都會自然而然地帶來流暢一致的用戶體驗。

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

             

          軟件測試 學習之路 CSS (四)

          seo達人

          如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

          一、文字樣式中階

          字體樣式
          代碼格式:
          font: 文字粗細 大小/行高 字體名稱;
          例子:font: bold 200px/400px "微軟雅黑";
          2.字體陰影
          代碼格式:
          text-shadow:x y r color;
          注:x是為負數則陰影向左,整數向右,同理y正數向上,負數向下,r代表陰影模糊程度,數值月大則越模糊,其單位都是px,color為文字顏色。
          例子:text-shadow: 10px 10px 0px red;
          提示:允許一段文字有多層陰影,多層之間用逗號隔開,每一層內,不同參數用空格隔開。

          凹凸字體 陰影巧用
          原理:通過背景顏色以及不同于背景顏色的陰影打造凹凸字體效果
          例子:
          <!DOCTYPE html>
          <html>
          <head>
          <meta charset="UTF-8">
          <title>凹凸文字</title>
          <style type="text/css">
          body{
          background: #ccc;
          }
          div{
          color: #ccc;
          text-align: center;
          font: bold 200px/400px "微軟雅黑";
          /*text-shadow: 1px 1px 0px #fff;-1px -1px 0px #333;*/
          text-shadow: 1px 1px 0px #333,-1px -1px 0px #fff;
          }
          </style>
          </head>
          <body>
          <div >
          凹凸文字
          </div>
          </body>
          </html>

          二、過渡屬性

          過渡屬性的作用就是體現元素默認樣式與最終樣式變化的過程。
          代碼格式:transition:all 1s linear 0s;
          注:

          第一個參數的作用是設置元素的哪些屬性過渡,all表示全部過渡,width代表屬性寬度過渡,其他不過渡,其他屬性也一樣。
          的哥屬性設置過渡需要的時長,單位s不能省略。
          第三個屬性設置過渡延遲多少秒執行,單位s不能省略。
          hover 設置鼠標移到某一元素時狀態。
          transition 這個屬性既可以添加在元素默認狀態,也可以添加在鼠標上移狀態即添加在hover標簽內,區別就是第二種做法在鼠標離開時候不會發生過渡變化。
          例子:
          <!DOCTYPE html>
          <html>
          <head>
          <meta charset="UTF-8">
          <title>過渡屬性</title>
          <style type="text/css">
          div{
          width: 200px;
          height: 200px;
          background-color: green;

          transition:all 1s linear 0s;
           
          }
          div:hover{
          width: 600px;
          background-color: yellow;
          }
          </style>
          </head>
          <body>
          <div id="\">

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

          Material Design數據可視化指南

          資深UI設計者

          如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

          2019年6月18日Material Design更新了設計指南中數據可視化部分,這是谷歌數據可視化團隊形成的一套全面的數據可視化指南, 涵蓋了設計原則、圖表分類、圖表的選用、樣式設計、交互設計、儀表板設計等方面。個人閱讀后進行了翻譯,希望能夠分享給更多對數據可視化有興趣的設計同學!


          全文章節目錄:

          原則

          類型

          選擇圖表

          樣式

          行為

          儀表板




          數據可視化

          數據可視化就是用圖形描繪信息。




          原則

          數據可視化是一種以圖形描繪密集和復雜信息的表現形式。數據可視化的視覺效果旨在使數據容易對比,并用它來講故事,以此來幫助用戶做出決策。


          數據可視化可以表達不同類型和規模的數據,包括從幾個數據點到有大量變量的數據集。

          Image title





          類型

          數據可視化可以以不同的形式表達。圖表是表達數據的常用方式,因為它們能夠展示和對比多種不同的數據。


          圖表類型的選擇主要取決于兩點:要表現的數據和表現該數據的用意。該指南描述各種類型的圖表及其用例。


          圖表類型


          1. 隨時間變化

          隨時間變化的圖表顯示一段時間的數據,例如多個類別之間的趨勢或比較。


          常見用例包括:

          股價表現、衛生統計、年表

          Image title



          2. 類別比較

          類別比較圖表是多個不同類別數據之間的比較。

          常見用例包括:

          不同國家的收入、熱門場地時間、團隊分配

          Image title



          3. 排名

          排名圖表顯示項目在有序列表中的位置。

          常見用例包括:

          選舉結果、性能統計

          Image title



          4. 占比

          占比類圖表顯示了局部與整體的關系。

          常見用例包括:

          產品類別的綜合收入、預算

          Image title



          5. 關聯

          關聯類圖表顯示兩個或以上變量之間的關系。

          常見用例包括:

          收入和預期壽命

          Image title



          6. 分布

          分布類圖表顯示每個值在數據集中出現的頻率。

          常見用例包括:

          人口分布、收入分布

          Image title



          7. 流程

          流程類圖表顯示了多個狀態之間的數據移動。

          常見用例包括:

          資金轉移、投票計數和選舉結果

          Image title



          8. 關系

          關系圖表顯示多個項目之間的關系。

          常見用例包括:

          社交網絡、詞圖

          Image title






          選擇圖表

          面對多種類型的圖表,以下指南提供了關于如何選擇合適的圖表見解。



          顯示隨時間的變化

          可以使用時間序列圖表來表示隨時間的變化,就是按時間順序表示數據點的圖表。表示隨時間變化的圖表包括:折線圖,柱狀圖(條形圖)和面積圖。


          Image title

          *基線值是y軸上的起始值。



          柱狀圖(條形圖)和餅圖

          柱狀圖(條形圖)和餅圖都可用于顯示比例,表示部分與總體的對比。

          · 柱狀圖(條形圖)使用共同的基線,通過條形長度表示數量

          · 餅圖使用圓的圓弧或角度表示整體的一部分


          柱狀圖(條形圖),折線圖和堆疊面積圖在顯示隨時間的變化方面比餅圖更有效地。由于這三個圖表都是使用相同的基線,因此可以更輕松地根據條形長度比較值的差異。

          Image title



          面積圖

          面積圖有多種類型,包括堆疊面積圖和層疊面積圖:

          · 堆疊面積圖顯示多個時間序列(在同一時間段內)堆疊在一起

          · 層疊面積圖顯示多個時間序列(在同一時間段內)重疊在一起


          層疊面積圖建議不要使用超過兩個時間序列,因為這樣做會使數據模糊不清。取而代之,應當使用堆疊面積圖來比較一個時間間隔內的多個值(橫軸表示時間)。

          Image title





          樣式

          數據可視化使用自定義樣式和形狀,使數據更容易理解,以適合用戶需求。


          圖表可以從以下方面進行優化:

          · 圖形元素

          · 文字排版

          · 圖標

          · 軸和標簽

          · 圖例和注釋



          不同類型數據的樣式設計

          可視化編碼是將數據轉換為可視形式的過程。獨特的圖形屬性可應用于定量數據(如溫度,價格或速度)和定性數據(如類別,風味或表達式)。


          這些圖形屬性包括:

          · 形狀

          · 顏色

          · 大小

          · 面積

          · 體積

          · 長度

          · 角度

          · 位置

          · 方向

          · 密度



          不同屬性的表現

          多個視覺處理方法可以綜合應用于數據點的多個方面。例如,在條形圖中,條形顏色可以表示類別,而條形長度可以表示值(如人口數量)。

          Image title

          形狀可用于表示定性數據。在此圖表中,每個類別由特定形狀(圓形,正方形和三角形)表示,這樣可以在一張圖表中輕松實現特定范圍的比較,同時也可以進行類別之間比較。



          1. 形狀

          圖表可以運用形狀,以多種方式展示數據。形狀的設計可以是有趣的、曲線的,或者和高保真的等等。


          形狀程度

          圖表可以展示不同精度程度的數據。用于細致研究的數據應該用適合交互的形狀(在觸摸大小和功能可見性方面)展示。而旨在表達一般概念或趨勢的數據可以使用細節較少的形狀。

          Image title



          2. 顏色

          顏色可用于以四種主要方式區分圖表數據:

          · 區分類別

          · 表示數量

          · 突出特定數據

          · 表示含義


          顏色區分類別

          Image title

          例:圓環圖中,顏色用于表示類別。



          顏色表示數量

          Image title

          例:地圖中,顏色用于表示數據值。



          顏色突出數據

          Image title

          例:散點圖中,顏色用于突出特定數據。



          重點區域

          在不濫用的情況下,顏色可以突出焦點區域。不建議大量使用高亮顏色,因為它們會分散用戶注意力,影響用戶的專注力。

          Image title



          顏色表示含義

          Image title



          無障礙

          為了適應看不到顏色差異的用戶,您可以使用其他方法來強調數據,例如高對比度著色,形狀或紋理。

          將文本標簽應用于數據還有助于說明其含義,同時消除對圖例的需求。



          3. 線

          圖表中的線可以表示數據的特性,例如層次結構,突出和比較。線條可以有多種不同的樣式,例如點劃線或不同的不透明度。


          線可以應用于特定元素,包括:

          · 注釋

          · 預測元素

          · 比較工具

          · 可靠區間

          · 異常


          Image title



          4. 文字排版

          文本可用于不同的圖表元素,包括:

          · 圖表標題

          · 數據標簽

          · 軸標簽

          · 圖例



          圖表標題通常是具有最高層次結構的文本,軸標簽和圖例具有級別的層次結構。

          Image title



          字重

          標題和字重的變化可以表達內容在層次結構中的重要程度。但是應該保持克制,使用有限的字體樣式。

          Image title



          5. 圖標

          圖標可以表示圖表中不同類型的數據,并提高圖表的整體可用性。


          圖標可用于:

          · 分類數據:用于區分組或類別

          · UI控件和操作:例如篩選,縮放,保存和下載

          · 狀態:例如錯誤,空狀態,完成狀態和危險


          在圖表中使用圖標時,建議使用通用可識別符號,尤其是在表示操作或狀態時,例如:保存,下載,完成,錯誤和危險。

          Image title




          6. 坐標軸

          一個或多個坐標軸顯示數據的比例和范圍。例如,折線圖沿水平和垂直坐標軸顯示一系列值。

          Image title



          柱狀圖(條形圖)基線

          柱狀圖(條形圖)應從為零的基線(y軸上的起始值)開始。從不為零的基線開始可能導致數據被錯誤地理解。

          Image title



          坐標軸標簽

          標簽的設計應體現圖表中最重要的數據。應根據需要使用標簽,并在UI中保持一致性。他們的出現不應該妨礙查看圖表。

          Image title



          文字方向

          為便于閱讀,文本標簽應水平放置在圖表上。


          文字標簽不應該:

          · 旋轉

          · 垂直堆疊

          Image title



          7. 圖例和注釋

          圖例和注釋描述了圖表的信息。注釋應突出顯示數據點,數據異常值和任何值得注意的內容。

          Image title

          1. 注釋

          2. 圖例


          在PC端,建議在圖表下方放置圖例。在移動端,將圖例放在圖表上方,以便在交互過程中保持可見。



          標簽和圖例

          在簡單圖表中,可以使用直接標簽。在密集的圖表(或更大的圖表組的一部分)中,可以用圖例。

          Image title



          8. 小顯示屏

          可穿戴設備(或其他小屏幕)上顯示的圖表應該是移動端或PC端圖表的簡化版本。

          Image title





          行為

          圖表具有交互模式,使用戶可以控制圖表數據。這些模式可以使用戶專注于圖表的特定值或范圍。


          以下推薦的交互模式,樣式和效果(如觸覺反饋)可以提高用戶對圖表數據的理解:

          漸進式披露

          提供了按需求逐步展示詳細信息的明確途徑。

          直接操作

          允許用戶直接對UI元素進行操作,最大限度地減少屏幕上所需的操作數量,包括:縮放和平移,分頁和數據控件。

          改變視角

          使一種設計可以適用于不同的用戶和數據類型,例如數據控件和動效。


          1. 漸進式披露

          使用漸進式披露顯示圖表詳細信息,允許用戶根據需要查看特定數據點。

          Image title


          2. 縮放和平移

          縮放和平移是常用的圖表交互,會影響用戶對圖表數據深入的研究和探索。


          縮放

          縮放改變界面顯示的遠近。設備類型決定了如何執行縮放。

          · 在PC端,通過單擊、拖動或滾動進行縮放

          · 在移動端,通過捏合進行縮放


          當縮放不是主要操作時,可以通過單擊和拖動(在PC端)或雙擊(在移動端)來實現。


          平移

          平移讓用戶能夠看到屏幕之外的界面。它應該合理的展示數據的價值。例如,如果圖表的一個維度比另一個維度更重要,則平移的方向可以僅限于該維度。

          · 平移通常與縮放功能同時使用。

          · 在移動端,平移通常通過手勢實現,例如單指滑動。

          Image title



          3. 分頁

          在移動端,分頁是一種常見模式,讓用戶通過向右或向左滑動來查看上一個或下一個圖表。

          Image title

          在移動端,用戶可以向右滑動以查看前一天。



          4. 數據控制

          可以使用切換控件,選項卡和下拉菜單篩選或改變數據。

          用戶調節控件時,這些控件還可以顯示指標。

          Image title

          切換控件,選項卡和下拉菜單可以更改或篩選數據。



          5. 動效

          動效可以強化數據之間的聯系,提升交互體驗。應該有目的地使用運動(不是裝飾性地),表達不同狀態和空間之間的聯系。

          運動應該是合理,平穩,反應靈敏,不會妨礙用戶的使用。

          Image title在此示例中,圖表數據從按天顯示動態切換到按周顯示。轉換期間不會顯示所選日期范圍之外的數據,從而降低了復雜性。



          Image title動畫能夠體現兩個不同圖表的相關性。



          6. 空狀態

          圖表數據為空的情況下,可以提供相關數據的預期。

          在合適的情況下,可以展示角色動畫創造愉悅和鼓勵。



          Image title有特色的動畫提升了空狀態的效果。







          儀表板

          在稱為儀表板的UI界面中,數據可視化通過一系列圖表實現。多個獨立的圖表有時可以比一個復雜的圖表更好地表達故事。



          儀表板設計

          儀表板的目的應在其布局,樣式和交互模式中體現。無論是用來制作演示文稿還是深入研究數據,它的設計應該適合它的使用方式。


          儀表板應該:

          · 突出最重要信息(使用布局)

          · 根據信息層級確定信息的焦點(使用顏色,位置,大小和視覺權重)


          Image title

          應根據對數據的需求確定信息的優先級并進行安排。在此示例中設計儀表板,考慮了以下用戶問題:

          1. 需要注意的問題
          2. 發生問題的時間

          3.發生問題的位置

          4.受問題影響的其他變量



          1. 分析類儀表板

          分析儀類表板讓用戶能夠研究多組數據并發現趨勢。通常,這些儀表板包含能夠深入洞察數據的復雜圖表。


          用例包括:

          · 隨時間變化的突出趨勢

          · 回答“為什么”和“假設”的問題

          · 預測

          · 創建有深度的報告


          分析類儀表板示例:

          · 跟蹤廣告活動的收效

          · 跟蹤產品在其整個生命周期中的銷售額和收入

          · 隨時間變化的城市人口趨勢

          · 跟蹤隨時間變化氣候數據


          Image title

          分析類儀表板顯示氣候數據



          2. 操作類儀表板

          操作類儀表板旨在回答一組預設的問題。它們通常用于完成與監控相關的任務。

          在大多數情況下,這些類型的儀表板具有一系列關于當前信息的簡單圖表。


          用例包括:

          · 跟蹤目標的當前進度

          · 實時跟蹤系統性能


          操作類儀表板示例:

          · 跟蹤呼叫中心的活動,例如呼叫音量,等待時間,呼叫長度或呼叫類型

          · 監控在云端應用程序的運行狀況

          · 顯示股市情況

          · 監控賽車上的遙測數據


          Image title

          操作類儀表板顯示設備存儲指標



          3. 演示類儀表板

          演示類儀表板是為感興趣的主題提供的展示視圖。

          這些儀表板通常包括一些小圖表或數據卡片,用動態標題描述每個圖表的趨勢和見解。


          用例包括:

          · 提供關鍵績效指標的總覽

          · 創建高級執行情況的概要


          演示類儀表板示例:

          · 提供投資賬戶績效的總覽

          · 提供產品銷售和市場份額數據的概要


          Image title演示類儀表板顯示網站使用數據

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

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

          資深UI設計者


          如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

          完整的 UI 設計流程到底是怎樣的?從需求到產品上線,要經歷多少個階段,每個階段有哪些應該掌握的基礎知識,本次優設獨家專題為你從零開始梳理出 UI 工作流程,適合新手閱讀學習。


          本篇工作流程第一節:需求分析。

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

          我們的工作流程如下:

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

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

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

          需求文檔類型

          前期分析階段中,需求方主要是與產品經理進行溝通,產出文檔有三種:

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

          分析類網站推薦

          產品分析緯度

          有了數據參考來源后,我們就能從五個緯度分析產品。

          1. 產品分析

          市場背景、產品業務、現有產品各項數據。

          2. 用戶畫像

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

          3. 需求確認

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

          4. 邏輯流程

          • 邏輯流程,整個產品的邏輯、內部流程;
          • 用戶路徑,描述用戶在產品內部的路徑。

          5. 競品分析

          和國內外同類產品進行比較分析,知己知彼。

          競品選擇,從兩個方向出發:

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

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

          最后,比起產品經理來說,設計師在這個階段能獲三個信息:

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

          文檔整理工具

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


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


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

          資深UI設計者

          如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

          完整的 UI 設計流程到底是怎樣的?從需求到產品上線,要經歷多少個階段,每個階段有哪些應該掌握的基礎知識,本次優設獨家專題為你從零開始梳理出 UI 工作流程,適合新手閱讀學習。

          本篇工作流程第一節:需求分析。

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

          我們的工作流程如下:

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

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

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

          需求文檔類型

          前期分析階段中,需求方主要是與產品經理進行溝通,產出文檔有三種:

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

          分析類網站推薦

          產品分析緯度

          有了數據參考來源后,我們就能從五個緯度分析產品。

          1. 產品分析

          市場背景、產品業務、現有產品各項數據。

          2. 用戶畫像

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

          3. 需求確認

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

          4. 邏輯流程

          • 邏輯流程,整個產品的邏輯、內部流程;
          • 用戶路徑,描述用戶在產品內部的路徑。

          5. 競品分析

          和國內外同類產品進行比較分析,知己知彼。

          競品選擇,從兩個方向出發:

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

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

          最后,比起產品經理來說,設計師在這個階段能獲三個信息:

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

          文檔整理工具

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

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

          產品設計之「取消按鈕」的使用詳解 | 細節分析

          資深UI設計者


          如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

          通過對「取消按鈕」的分析,指導各位正確的進行對于「按鈕」的設計。


          按鈕,無論是在 Web 還是 App 上都被廣泛地使用,而很少有設計師會注意到按鈕當中的細節,導致在設計過程中出現一些低級的錯誤,使得用戶在完成任務的過程中產生阻礙,無法順利達成目的。


          在許多優秀的產品中,關于按鈕的設計已經有了一套相應的規范去執行。作為設計師,應該總結這些規范,并產出一套適用于自家產品的設計規則。這也是我寫「按鈕規范」系列文章的目的。


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


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


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

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

          2. 其背后的控制權(關于按鈕的權重信息)

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



          按鈕中的「召喚行為」


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


          這類「召喚行為」最常出現的,是在按鈕設計的過程中。


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



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

          我們經常在各類設計中見到這樣的按鈕設計,或許還有更多樣式,如:



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


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


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


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


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


          這個概念知道了,我們就可以對后面的內容繼續進行拆解了。



          背后的控制權


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


          a. 安全性后退


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


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


          如:



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


          這是多數產品采用的設計方式。


          比如美團的這個頁面:



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


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



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


          這是一直以來的設計共識,但如今也發生了些許變化。「取消按鈕」也開始具備「召喚行為」的屬性。


          b. 強化「取消按鈕」


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


          如:



          或:



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


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



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


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


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


          且在一些產品界面里,為了避免用戶在流程中終止行為,甚至會轉移「取消」與「行進」兩者的位置,如:



          之前截圖了某個產品的界面,寫文這天發現已經改回來,這里就沒放了。


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


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


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


          c. Web 與 App 的位置差異


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


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


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



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


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


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


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


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



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


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


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


          客觀因素:移動產品的普及,已經有相當成熟的設計體系支持行進按鈕右側化設計,統一 Web 或 PC 產品只會讓用戶的操作行為更方便。


          這就是我本小節想聊的,關于 Web 與 App 按鈕設計的差異。



          「取消按鈕」的正確解法


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


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


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


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


          a. 界面層與彈框層


          其實嚴謹點來說,界面層的「取消按鈕」與彈框層的「取消按鈕」的意義是不同的。


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


          還是微信朋友圈的界面:



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


          所以會彈出第二層彈窗:



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

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


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


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


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



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




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


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


          類似的還有微博,但是微博對于「取消按鈕」的類型差異沒有做出區分,原因在于它為了弱化界面層的取消,與彈框層的取消樣式保持了一致。



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


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


          當然,這里面還有關于顏色的說法。


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


          b. 彈框層「取消」顏色的差異


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


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


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


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



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


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



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

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


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



          這樣例子還有很多。


          但是我覺得做得好的,應該是這樣的:



          或:



          這就是刻板印象造成的結果。我們應該學會適當地使用控件,并根據自己的產品對其進行優化。而不是一味跟風。


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


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


          如果你仔細觀察 macOS 的設計,就能發現他們為具備召喚行為的按鈕位置與顏色都做了特殊處理,并不是簡單的同色系,或用粗細表示。如圖:



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


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


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

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

          接著他繼續說道:你這套理論非常棒,所以你完全可以按它去給自己的產品構建一套設計規范,并不一定要遵循 Apple。


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


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


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



          小結


          所以我這篇文章的內容結論是:

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

          2. 顏色區分,左淺色,右深色;

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


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


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


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


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

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


          vue 移動端彈出鍵盤導致頁面fixed布局錯亂

          seo達人

          如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

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


          這里確認按鈕是fixed布局 bottom:0 彈出鍵盤之后按鈕被頂到了鍵盤上面

          網上搜到的解決方案有兩種,

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

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

          下面是實現代碼

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

          【Vue原理】Watch - 白話版

          seo達人

          如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

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

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

          【Vue原理】Watch - 白話版


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

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

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

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

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

          1、監聽的數據改變的時,watch 如何工作

          2、設置 immediate 時,watch 如何工作

          3、設置了 deep 時,watch 如何工作



          簡述 響應式
          Vue 會把數據設置響應式,既是設置他的 get 和 set

          當 數據被讀取,get 被觸發,然后收集到讀取他的東西,保存到依賴收集器

          當 數據被改變,set 被觸發,然后通知曾經讀取他的東西進行更新

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

          【Vue原理】響應式原理 - 白話版



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

          然后 你給 watch 設置的 handler ,watch 會放入 watcher 的更新函數中

          當 數據改變時,通知 watch 的 watcher 進行更新,于是 你設置的 handler 就被調用了



          設置 immediate 時,watch 如何工作
          當你設置了 immediate 時,就不需要在 數據改變的時候 才會觸發。

          而是在 初始化 watch 時,在讀取了 監聽的數據的值 之后,便立即調用一遍你設置的監聽回調,然后傳入剛讀取的值



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

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

          當你使用 Object.defineProperty 給 【值是對象的屬性】 設置 set 和 get 的時候

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

          2但是你改變或讀取它內部的屬性,get 和 set 不會被觸發的

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

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

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

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


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

          之后,當我們獨立訪問 name 內部的 first 的時,只會觸發 first 的 get 函數,而 name 設置的 get 并不會被觸發

          結論
          看上面的例子后,所以當你的 data 屬性值是對象,比如下面的 info

          data(){    

              return {        

                  info:{ name:1 }

              }

          }


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

          首先,再次說明,watch初始化的時候,會先讀取一遍監聽數據的值

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

          設置了 deep
          1、因為讀取了監聽的data 的屬性,watch 的 watcher 被收集在 這個屬性的 收集器中

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

          于是,無論對象嵌套多深的屬性,只要改變了,會通知 相應的 watch 的 watcher 去更新,于是 你設置的 watch 回調就被觸發了

          實際證明
          證明 watch 的 watcher 深度監聽時是否被內部每個屬性都收集

          我在 Vue 內部給 watch 的 watcher 加了一個 屬性,標識他是 watch 的 watcher,并且去掉了多余的屬性,為了截圖短一點
          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、網站建設 平面設計服務。

          FY品牌官網/移動端視覺設計

          資深UI設計者

          如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

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

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

          FY品牌官網/移動端視覺設計FY品牌官網/移動端視覺設計FY品牌官網/移動端視覺設計FY品牌官網/移動端視覺設計FY品牌官網/移動端視覺設計FY品牌官網/移動端視覺設計FY品牌官網/移動端視覺設計FY品牌官網/移動端視覺設計FY品牌官網/移動端視覺設計FY品牌官網/移動端視覺設計FY品牌官網/移動端視覺設計FY品牌官網/移動端視覺設計FY品牌官網/移動端視覺設計FY品牌官網/移動端視覺設計FY品牌官網/移動端視覺設計FY品牌官網/移動端視覺設計

          文章來源:UI中國

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

          日歷

          鏈接

          個人資料

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

          存檔

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