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

          首頁

          vue項目刷新當前頁面的幾種方式

          seo達人

          在vue項目中,經常會遇到需要刷新當前頁面的需求。

          因為vue-router判斷如果路由沒有變化,是不會刷新頁面獲取數據的。



          方式1:go(0)和reload()

          通過location.reload()或是this.$router.go(0)兩種強制刷新方式,相當于按F5,會出現瞬間白屏,體驗差,不推薦。



          方式2:定義一個空白路由頁面,路由跳轉到該空白頁后立馬跳回當前頁,實現路由刷新。

          在router路由表中定義一個空白路由,



           // 強制刷新當前頁所用的中間跳轉頁

             {

                  path: '/redirect/:path*',

                  component: () => import('@/views/redirect/index')

            }



          寫一個空白路由組件



          //redirect/index

          <script>

          export default {

            created() {

              const { params, query } = this.$route

              const { path } = params

              this.$router.replace({ path: '/' + path, query })

            },

            render: function(h) {

              return h() // avoid warning message

            }

          }

          </script>





          在需要刷新的頁面使用



          refresh() {

                // 刷新當前路由

                const { fullPath } = this.$route

                this.$router.replace({

                  path: '/redirect' + fullPath

                })

              }



          這種方式,基本上能夠應付絕大多數情況,推薦使用。

          但是,有時候,有一些極端情況下,這種刷新不起作用,而又不想用第一種那種毛子般的簡單粗暴的方式的話,下面的方式可以選擇使用。



          方式3:provede/inject 方式

          vue官方文檔說了,這個依賴注入方式是給插件開發使用的,普通應用中不推薦使用。

          但是,效果卻很好。

          app.vue修改



          <template>

            <div id="app">

              <router-view v-if="isRouterAlive" />

            </div>

          </template>

          <script>

          export default {

            name: 'App',

            provide() {

              return {

                reload: this.reload

              }

            },

            data() {

              return {

                isRouterAlive: true

              }

            },

            methods: {

              reload() {

                this.isRouterAlive = false

                this.$nextTick(function(){

                  this.isRouterAlive = true

                })

              }

            }

          }

          </script>





          使用的時候:

          demo.vue



          <template>

            <div class="container">

            xxx

            </div>

          </template>



          <script>

          export default {

            inject: ['reload], // 依賴注入

            name: 'Demo',

            computed: {

              message() {

                return '抱歉,您訪問的頁面地址有誤或者該頁面不存在...'

              }

            },

            methods: {

            handleReload() {

            this.reload() // 直接在需要刷新的方法中調用這個reload()

          }

            }

          }

          </script>



          <style lang="scss" scoped>

          </style>



          原理就是通過依賴注入的方式,在頂部app通過v-if的顯示隱藏來強制切換顯示,以此來讓vue重新渲染整個頁面,app中通過provide方式定義的reload方法,在它的后代組件中,無論嵌套多深,都能夠觸發調用這個方法。具體說明查看官方文檔。


          引導頁設計淺析

          ui設計分享達人

          APP中的閃屏、啟動頁、引導頁的區別,設計方法,個人案例分析,以及品牌解讀

          【什么是閃屏 / 引導頁與閃屏的關系】

          (部分引用觀點)



          引導頁是閃屏的其中一種,一般出現在版本分布或大版本升級時。

          我們先整體看一下閃屏頁的大致類型:

          (聲明:以下圖片來源于應用截圖,僅作為學習交流使用)









          一、常規閃屏


          為什么叫常規閃屏?

          因為這類閃屏比較普通,我沒有想到什么更專業的詞匯,暫且就叫常規閃屏吧。這類閃屏的使用國內的和國外有點不同,因為按照蘋果官方的說法是,用戶打開應用能立即使用是最好的體驗,例如:系統自帶的一些應用,是沒有閃屏的。再甚者閃屏最好就是讓用戶感覺不到,和首頁能有一個完美的融合和過渡。

          這種體驗也很棒,國外的instagram、facebook等就是使用這種設計,閃屏長得很像首頁,更像是一張加載類的占位符








          當然,因地制宜,國內的我們已經習慣了閃屏作為App品牌的宣傳和推廣手段,一般由logo+名稱+slogan+品牌色組成,界面還是相對簡潔明了的,但還是很明顯的違背了蘋果官方的指導說法,但是沒辦法,這就是商業需要。


          這樣設計也有利處,可以減少用戶在打開App時的焦慮感,也可以讓用戶更直觀的了解品牌,傳遞一些情懷、理念,多看一次閃屏,也是讓用戶強化品牌記憶的過程,只是不知道是好的記憶點還是壞的,就要我們自己斟酌了。








          二、廣告閃屏


          廣告閃屏,顧名思義就是產品本身為了進行流量變現從而獲得盈利,給一些商家打廣告或者進行合作設計的一類閃屏,這是無可厚非的。不過廣告閃屏自帶被“嫌棄”屬性,應該很多用戶看到這類閃屏的心理是比較排斥的。

          至少對我來說,我是很少關注這類閃屏,除非閃屏設計的非常的酷炫,我愿意多看一下,否則的話我就想立刻把它關掉,所以在這類閃屏上加上“倒計時(loading)和跳過”就顯得很必要,并且“跳過”的位置也要方便用戶點擊。

          這類閃屏最好只出現每天第一次打開App時,避免讓用戶厭煩。不管出于何種目的,都需要在商業利益和用戶體驗之間保持一個平衡,不然用戶會流失的很快,用戶流失了,何談盈利呢?

          另外廣告閃屏和下面要說的活動閃屏一樣,會有一個模板:底部是閃屏圖片,上面蓋上一層logo模板。

          App啟動時會從服務器拉取閃屏數據,本地會保存logo模板。如果服務器更新了閃屏數據會拉取數據進行展示,如果沒有更新或是網絡不佳,就會默認展示緩存的閃屏數據,以免發生卡頓現象,以保證流暢的用戶體驗。







          三、活動閃屏


          活動閃屏和廣告閃屏有點類似,出于產品運營方面的需要,它起到活動宣傳的作用,每年的雙十一、雙十二期間,各大電商App的閃屏都會用到活動閃屏,還有一些商家自己造的一些節日:品牌周、年貨節、會員日、狂歡周…相信大家已經見怪不怪了。


          近期我留意到一個問題,就是我們在使用App時,經常會在應用之間進行切換使用。如果我們從其他應用再次返回時,最好不要再加載一次閃屏,會給用戶很不好的用戶體驗。目前使用下來,淘寶、天貓等這類主流應用都有這種問題,但是我想這應該他們有意為之。







          四、節日閃屏


          每逢一些節假日,各大品牌都會推出一些當日的閃屏,那么為什么要設計節日閃屏?

          我覺得有幾點原因:

                 長期看常規閃屏,用戶很容易會有視覺上的一種疲勞,節日閃屏會給用戶一種不經意的驚喜和新鮮感;

                 可以蹭一蹭節日的熱點,提升產品本身的品牌調性;

                 在節日給用戶以問候和關懷,和用戶在情感上產生共鳴,從而更好的連接用戶和產品,我想這應該是最重要的原因。


          節日閃屏比較吸引用戶的注意力,它不像廣告類閃屏,我看見這類閃屏就會忍不住的多瞅幾眼,所以設計這類閃屏的時候要非常重視,因為用戶愿意等待,這是非常求之不得的,這就需要設計師具有比較強的表現能力了。

          我們在設計的時候可以先進行思維上的發散,或者是逆向思維之類的,比如:春節將近,我們可以聯想到是什么,理清一個思緒,要有節日的氛圍,可以活潑、可愛、夸張…切忌呆板。

           







          五、大版本升級閃屏(引導頁)


          在App進行了大版本升級后,要向用戶展示產品新功能的操作方法。這類閃屏也可以稱為引導頁,頁面數量控制在3-5頁,每一頁都有一個對應的主題,主題要精簡,切忌文字過多。


          而且每一頁設計形式要類似,否則會給用戶一種視覺落差感。頁面上要加上“跳過”功能,因為用戶更希望盡快體驗新版本,而不是看你的這些教導,在最后一頁要加上類似“立即體驗”的button。







          ——分割線【品牌傳達力】——










          啟動頁面告訴用戶“我是誰”“我是做什么的”,開頭跟用戶做了自我介紹,引導頁的目的主要是告訴用戶:“我該怎么使用”或者是“我有什么亮點”(重點宣傳的功能),借用男女相親例子,雙方介紹完自己之后,開始展示自己有什么優勢,好的引導頁設計直接關系到用戶是否“對你有興趣”想一進“了解你”。

          從上圖可以看到,引導頁在品牌傳達力上居首位,其次應用市場說明圖。








          【引導頁展示目的】

          以下盡量列舉了金融相關app截圖,僅供學習使用



          引導頁定義比較廣,往小了講,我們一般會認為在用戶初次打開應用時跳出的幾張介紹應用功能的頁面就叫做引導頁;那往大了說,在用戶使用某個功能前就能幫助用戶降低學習成本的頁面或存在引導屬性的彈窗都可以稱為引導頁。

          先從引導頁展示的目的出發,再結合實際app情況去確定宣傳標題,最后結合不同的設計展示方式以及動效。







          一、產品特色介紹


          多數時候,我們初次打開應用會看到下面這樣的引導頁:


          可以看到一個共通點——即頁面呈現的內容為該 App 的主功能或新功能推薦,或者是對剛迭代的功能做了哪些優化的說明。

          理想情況是:用戶能了解這次產品做了哪些優化,幫助用戶更清晰地了解產品。







          二、操作引導


          這類引導會出現在內容頁面,直接引導用戶去操作相關功能

          蒙版引導通常緊貼著界面流程進行而出現,使用透明色間隔形式加上簡單指示性文字與圖形,總是能夠簡潔明了地告知用戶產品的功能或者使用方法,并且由于其輕量的屬性會大大減少用戶的閱讀時間。設計得當的蒙版引導不僅可以與其他引導相輔相成,同時也能夠增加用戶對產品的好感度。

          它的好處就是清晰明了,直接讓用戶知道你想表達什么。它的實際效果會比純內容引導頁好很多,但同時也會有一個問題,即打擾用戶操作。

          這樣的方式已經解決了內容操作引導的問題,但其實這種方法也會使用戶厭倦,所以內容不易過多。







          三、理念傳達


          以傳達態度理念,生活方式等為主,比較概念和意義上的東西,吸引用戶達到某種程度的共鳴,從而產生吸引力。







          四、側面實力烘托


          多用于有實力/特色的產品或者企業,展示自身優勢,讓用戶對產品產生信賴感。










          五、問題解決


          指出用戶所面臨的問題,而你的產品正好可以解決。



          結合自身app/企業所具有的優勢;產品的功能特色;產品的定位;等相應的展示目的。也存在混合展示,不過要把握好標題的設定,在標題與設計上達到統一。








          【引導頁設計方法】


          在確定了引導頁展示目的之后,下面整理了在引導頁設計過程中的方法。

          目前比較常見的幾類引導頁的類型(電商除外),根據產品的特點來確定設計風格,總體沒有固定規則。










          一、圖文結合


          使用有關聯性的圖片,同種版式,優點是感情表達直觀簡單,畫面沖擊感強,缺點是泛表達,不能表達內容。









          二、產品界面描述型


          功能描述型,使用app畫面說明,通常在版本更新時用來對新功能進行重點描述,是目前比較常見的引導頁表達方法之一,比較通用。









          三、模擬應用場景


          通常用插畫方式表現,通過圖文結合的方式全方位闡述中心思想,插畫風格具有豐富的多樣性,同時又能貼切表達主題,所以在app中出現頻率越來越高。

          以下列舉了百度金融的版本引導頁,通過系列插圖表現貼心、安心、用心、省心、隨心,插畫緊密契合主題,完美使用排比句的形式。











          四、吉祥物的運用


          一個成熟的app通常會吉祥物來表現,啟動頁是用戶打開app第一眼看到的地方,吉祥物可以讓用戶在2-3秒時間內深刻體會到產品的核心價值觀。












          五、代交互 動效的


          這類啟動頁通常是在頁面切換中加入一些動效果的設計,使得在交互體驗上更加突出,與靜態頁面間的切換顯得更加生動有趣。

          動畫呈現方式趣味性更高一些,開發成本相對也會高一些。











          六、視頻類/動畫類


          這類的理論上不叫啟動頁,叫開篇動畫更貼切,打開app通常為一小段視頻或動畫引入頁面











          【實際案例分析】


          閃屏/引導頁的設計方法很多,但要在設計之前充分考慮到產品定位和應用場景。

          下面引用我自己的案例分析,因為對產品理解不夠到位,設計過程比較坎坷,經歷了幾個版本的優化。








          【引申思考】


          對晉盈匯app來說:

          1.用戶層面上,在不同版本的情況下需要緊跟不同的用戶引導頁,尤其這類理財類等APP,使用操作都是比較繁瑣,因此需要用戶引導幫助用戶玩好APP;

          2.品牌形象上,可以深化品牌價值,比如提煉產品slogon,吉祥物等,啟動頁是用戶打開app,第一眼看到的地方,需要讓用戶深刻體會到產品的核心價值觀。

          3.商業用途上,可以利用啟動頁配合營銷事件,實現商業價值。

          4.從技術層面,程序可以利用啟動頁的2~3秒內,預加載一些東西,使得后面的用戶體驗更好。


          啟動頁更多的是在啟動過程中的2~3秒內,體現app的核心的品牌價值,而品牌價值通常體現在產品的情感化設計上。


          情感化設計基于三個基本層次水平:本能水平的設計、行為水平的設計、反思水平的設計。

          本能水平的設計——外形(UI界面,整體視覺感受);
          行為水平的設計——使用的樂趣和效率(把完成目標前的過程樂趣化,如何最便捷的觸達相應功能,或達成某結果);
          反思水平的設計——自我形象、個人滿意、記憶(強化品牌傳播,構建品牌形象,讓品牌成為一種文化)。


          情感化設計點:登陸界面、啟動頁、引導頁、節日閃屏、404、刷新加載...




          強化品牌標識,有利于品牌傳播



          上圖是美團外賣的閃屏,以插畫這種具有親和力的表現手法去搭建一個場景,講一個小故事隱喻一個情感。然后傳遞給用戶一個主題。而插畫下方,則是美團的品牌標識:袋鼠LOGO、文案“美團外賣,送啥都快”。


          當你聽到電腦發出“滴滴滴”的時候,你就知道這是QQ來消息了,聲音也是一種品牌標識。



          彌補產品在用戶使用過程中發生的意外



          上圖是ofo共享單車在用戶退押金時的三個提示頁面,分別是告訴用戶ofo的作用是讓你便捷輕松出行,退押金后損失的優惠,最后是用利益誘惑你。從三個層面去打用戶的痛點。不過確切來說只有第一個界面算是與用戶情感化交流,后兩個算是再利用人的貪欲。


          關于文案的情感化設計要分情況,根據APP所分領域、調性和目標用戶人群的特性而定。



          轉自:站酷-嗚嗚吉良斯基

          如何設計企業級的UI組件庫?

          資深UI設計者

          產品:這次需求很簡單,對比上期只有字段和操作項的差異,把上次的稿子直接復制一下應該不用很多時間吧?

          交互:上次你是不是做過高級篩選組合?我這期需求要用到,你把那部分稿子發給我用用吧。

          研發:這個組件我在其他模塊里看到過已有樣式,這次為什么用不一樣的?不然又要重復開發呀,能不能統一一下。

          視覺:同一個按鈕在不同的模塊顏色不一樣誒,這次要和哪個模塊一致???

          ……

          通過以上對話不難看出,最常出現在需求溝通與研發過程中,由于缺少統一的規范和標準化體系,導致實施環節各方溝通成本高,造成設計成果與實現有一定差距,影響用戶體驗;通用組件和業務組件混用,導致設計模式和代碼復用率低。尤其是當業務發展到一定體量時,對于復雜產品的大量重復且類似的需求場景,如果沒有一種的工具和規范來協同工作,將大大影響團隊的生產及溝通效率。

          問題

          • 認知:產品、研發、設計師對于同一需求都有自己理解的解決方案,缺少統一規范的約束,難以達成共識。
          • 效率:設計效率低,交互原型的維護成本及上下游團隊的溝通成本高,易造成不專業的印象。
          • 品質:認知和效率的局限性,最終導致實施落地的產品質量和用戶體驗難以得到保障。

          解決

          大家應該都知道樂高(LEGO)積木,它是一種可以互相嵌套組合的塑料積木,形狀共有 1300 多種,每種形狀都有 12 種不同的顏色,可以拼插出多種造型。其實組件庫的工作方式就很像樂高,通過小元件的互相嵌套來產生多種組件或模塊,多種組件模塊結合生成頁面結構。我們先來梳理一個概念,組件庫是什么?

          組件庫是設計系統的一部分,是在我們常規界面設計過程中可以直接用來制作交互圖例和搭建頁面的組件集合,它可以作為單個組件獨立存在,也可以通過多個組件組合而成的結構或模式來解決類似場景的設計問題。組件庫是在約束條件下去構建解決方案的過程,所以組件的使用也需遵循一定的規范,按照一套標準化的體系復用于多個業務場景。

          一個有效的組件庫,可以幫助設計師和研發提高工作效率,提升設計專業度的同時讓產品本身的體驗更加一致、可學,品牌感更強,它所具備的基本特征一定是通用的、靈活的、復用的。

          • 通用性:意味著足夠基礎和常見且不帶業務屬性,參與設計環節的每個人都應該知道這個組件的功能及目的,同時具備一定擴展性。
          • 靈活性:要求元件的組合需靈活,可以在不同場景下通過互相組合來快速搭建交互框架原型圖,并根據不同頁面結構的演變來適應新的業務需求。
          • 復用性:指的是適用于多個業務或產品,在設計過程和研發過程中都可以高頻復用。

          那么用組件庫這種標準化體系來完成設計方案時,到底能帶來怎樣的價值?

          組件庫的價值

          保證產品體驗的一致性:對于一個含有多業務系統的大型復雜產品,每個獨立的業務系統雖然在功能上有一定區別,但整體的用戶體驗需要滿足基本的一致性。比如,當我使用同一個產品中的業務系統 A 和業務系統 B 時,我能通過類似的頁面結構、組件及樣式的一致性、操作反饋乃至提示文案結構的一致性,來感知到我使用的A、B業務系統隸屬于同一個產品。

          提升設計師的效率:在需求量巨大且需求來自不同的業務線時,需要逐一繪制頁面及組件,造成大量重復勞動,并且在評審及需求溝通環節還可能存在不斷地細節調優。所以對于設計師而言,組件的高頻復用能大大提升設計效率,使設計師更多的將精力聚焦于理解和解決用戶的實際問題。

          提升產研團隊的效率:通用場景及普通需求直接按規范進行設計和研發,減少上下游對同一頁面及組件使用方式的不同理解而產生的多余溝通成本。

          利于沉淀設計規范:組件本身的設計和使用方式就可以直接作為交互和視覺規范的一部分,按照統一的設計規范來確定需要使用的主題色、組件樣式、組合方式及頁面結構,可以快速搭建出一個或多個產品的交互框架。

          構建「FishDesign」企業級UI組件庫

          那么如何構建一個企業級 UI 組件庫?

          我將用前段時間參與的「FishDesign企業級UI組件庫」項目為例,通過在網易七魚產品中的應用,來介紹一個企業級 UI 組件庫的設計原則,內容構成包含哪些類型和元素,每種組件類型在分類和設計過程中是如何考量的。本文側重講述構建一個組件庫所涵蓋的內容,而不是某組件類別本身的設計方法。

          顧名思義,「企業級」意味著 FishDesign 所服務的業務都是具備一定體量的,可能是服務一個包含了多個獨立子業務系統的大型復雜產品,比如網易七魚;也可能是同時服務多款產品,比如網易七魚和網易定位等。

          組件庫是幫助設計者及前端工程師快速構建業務系統的工具,除了最重要的組件內容,還需要設計原則、配色方案及布局規范來指導具體業務產品的設計有效落地。

          1. 設計原則

          基于 FishDesign 目前主要是幫助搭建 B 端企業級產品,而 B 端業務的產品目的決定了它所才采取的設計模式,所以我們將用以下四點作為塑造組件庫的設計原則:

          • 簡潔:如無必要,勿增實體,慎重篩選客戶當前需要信息內容。
          • 直接:提供用戶操作后的直接反饋,保證用戶的操作結果符合預期。
          • 優雅:設計方案追求優雅,給使用者有質感的操作感受。
          • 適應性:設計方案需提供可擴展能力及適應性,以適應不同模式的企業使用。

          2. 顏色

          產品會根據自身的產品目標和受眾群體去選定產品的配色方案。前文提到,一個有效的組件庫需滿足通用性、靈活性、復用性,像配色方案就應該能被靈活自定義來應對多樣化的訴求。以網易七魚為例(下文均以網易七魚為例),設置了 1 種主色,4 種輔助色和 6 種中性色來搭建一致的外觀感受。

          • 主色:選擇藍色系來傳達智能服務、信任可靠、技術創新的品牌形象。
          • 輔助色:除了品牌主色調藍色,在輔助色中也存在一樣的藍色,那是因為藍色是相對泛用性較廣的色系,用于產品中的主操作按鈕、文字按鈕或 icon 等。紅色喚起注意并昭示危險,所以一般用于謹慎操作及錯誤提示。黃色則常用于警示信息,提示用戶操作可能帶來的風險及后果。綠色能傳遞安全和健康的情緒感受,用于正向反饋提示或成功操作的引導。
          • 中性色:一般采取黑灰色調來展示產品的文本信息、背景和邊框色,用來表現層次結構。

          3. 布局規范

          為處理多業務中網頁設計區域內的信息收納問題,我們用規則的網格陣列來指導和規范版面布局以及信息分布,即柵格系統和頁面布局。FishDesign 在 12 柵格系統的基礎上,將整個設計區域按照 24 等分的原則進行劃分,來增加頁面的相似度,提升用戶體驗。

          我們通過基本的配色及布局規范解決了產品風格及信息區塊框架的設計,那組件庫中重要的組件部分,是如何作用于產品搭建的?Brad Frost 提出的「原子化設計理論」可以幫助我們更好的理解,原子化設計的靈感來自于現實世界當中的分子結構,UI 中顆粒度最小的元素,即「原子」,組成了顆粒度較大的元件,即「分子」;而諸多分子又組成了更加復雜的組件與模塊,即「有機體」。

          組件庫構建之初無法一應俱全,是需要后續不斷的維護與迭代的。如何在最初海量組件中圈定適合的組件范圍呢?最合適的切入點就是從身邊的業務場景出發,從最基本、最簡單、最小的元素入手。

          4. 組件分類

          我們根據當下已有的業務場景和對往后一段時期的業務發展方向進行規劃,將組件庫的組件類型分為通用組件和業務組件。一般業務組件庫是不對外的(畢竟使用場景特殊也有限,放出來參考意義不大),所以在 FishDesign 官網只能看到通用組件部分。

          • 通用組件:指適用范圍廣、復用頻次高,可復用于多個業務且不包含業務邏輯。比如導航欄、按鈕、toast、彈窗等。
          • 業務組件:這類組件對比通用組件而言,最大的特點就是包含了較多業務屬性,跟產品功能有較強的關聯性,所以影響到適用范圍可能僅限于 1~2 個業務系統或特殊場景,且復用頻次不高。比如網易七魚的在線和呼叫系統中的咨詢分類組件。

          一個大型復雜的業務產品通常有不止一位設計師或前端工程師參與設計,需要在多種處理方式中選擇合適的設計模式來解決不同的場景問題,這要求根據組件屬性的差異,需對通用組件做細分,那么如何確定通用組件中的子分類呢?

          • 競品學習與研究,窮舉該部分產品類型中的組件類型。
          • 遍歷自己所負責產品內已有的業務場景,提取并整理業務場景中所用到的組件。
          • 將整理好的兩部分組件進行篩選去重,保留高頻通用的部分。比如同樣是下拉篩選組件,由于缺少統一規范和組件,可能導致的后果就是在同一產品不同業務系統的相同場景下,使用的組件從樣式到交互方式都不一致。我們要做的就是對這部分在類似業務場景中使用了多種表達形式的組件做合并去重,然后通過設計組內審來圈定最后通用組件的范圍。
          • 基于組件的屬性和使用場景,對圈定的組件范圍進行歸類。

          由上述步驟,我們將通用組件繼續細分為五個子類別:基礎組件、導航、數據錄入、數據展示、操作反饋。

          • 基礎組件:即按鈕、圖標等,相較于其他組件的使用場景更通用,或其他組件在實現時依賴了這些組件來實現的組件類別。
          • 導航:即導航菜單、標簽、面包屑等,可以幫助用戶產品系統內快速找到所在頁面層級或位置的組件類別。
          • 數據錄入:即輸入框、選擇器、表單等,支持用戶將數據信息錄入到系統的組件類別。
          • 數據展示:即圖表、表格、氣泡卡片等,將錄入到系統的數據信息多樣化展示出來的組件類別。
          • 操作反饋:即對話框、警告提示(Alert)、全局提示(Toast)等,在用戶操作前后,使系統狀態得以合理反饋的組件類別。

          用組件庫設計「網易七魚」示例

          以網易七魚為例,看下有組件庫參與搭建的設計示例,以下頁面中所用組件均出自 FishDesign 組件庫。

          「導航組件」使用示例:

          「表格組件」使用示例:

          「彈窗組件」使用示例:

          「步驟組件」使用示例:

          總結

          組件庫最大的價值在于提升整個團隊的產研效率,使設計質量得以保障的同時,提升產品整體的用戶體驗。

          我們對構建企業級 UI 組件庫的步驟及要素做個簡單回顧:

          • 首先,明確組件庫所需解決的問題及存在的價值,這決定組件庫的體量和服務范圍是什么,以及構建的時機是否合適。
          • 其次,通過競品分析并結合身邊最熟悉或深耕的業務入手,通過產品目的來選擇設計模式,從最小元素開始逐步整理,包括產品配色方案和柵格系統等布局規范。
          • 第三,需要對組件庫的重要組成部分「組件」,進行圈定及合理分類。這里需要注意的是,組件范圍的圈定,尤其在組件庫搭建的初級階段并不是越多越好,而是需要有效的覆蓋那些經過規劃的業務場景即可。
          • 最后,組件庫并不是構建完就結束了,是需要在后續項目中逐步維護與更新的長期積累過程。

          任何組件庫的構建都離不開一個優秀的團隊在整個設計過程中的協同,十分感謝參與的設計師與前端工程師們。上文僅是個人參與過程中的一些經驗總結,還不夠全面,同時篇幅有限,關于組件的具體設計考量無法一次詳盡,歡迎一起討論組件庫及標準化設計體系相關的更多內容。

          文章來源:優設

          用three.js構建自己的后處理渲染器第一篇---抗鋸齒的選擇

          seo達人

          說到渲染引擎就不得不提到延遲渲染,基本上一個引擎如果沒有實現延遲渲染就不能說是一個好的渲染引擎,不過可惜的是three.js并沒有實現延遲渲染(ps:呼吁作者趕緊實現mrt吧)。由于沒有mrt和延遲渲染,本來不打算寫后處理的,但是即使沒有,我們也希望能實現一些炫酷的效果,那就在現在的基礎上對three.js進行簡單的改造來實現一套高性能的后處理渲染器吧。

          要實現后處理我們首先要考慮需求,是否要兼顧移動端,是否要兼顧大屏(4k),是否要支持webgl1,是否要在各種顯卡中都有一個還算不錯的性能。目前我主要考慮的是:性能要好,可以兼顧大屏,不打算完美支持webgl1,盡量多使用webgl2的特性。后面所有的性能測試為都以N卡作為性能測試指標,先不管AMD卡(AMD抗鋸齒的處理性能會高些的,但是動態處理性能會偏低,這里有很多細節問題)

          好了,我們關心的是好的性能,盡量多使用webgl2的特性,盡量能兼顧大屏(這里主要是要注意顯存問題),現在開始準備我們的渲染器吧

          要完成一個后處理渲染器,我們首先要考慮抗鋸齒,常用的有超采樣技術和多重采樣技術,具體可以看這個介紹 添加鏈接描述

          three.js已經實現了SSAA,SMAA,TAA這三種超采樣技術,效果都還不錯,具體實現three.js都有例子,就不詳細說明了。SSAA抗鋸齒效果是最好的,但是性能最差,現實情況下根本無法使用。SMAA性能會好一些,2000個物體差不多掉15幀吧(SMAA比FXAA計算稍微復雜一些,SMAA研究的少,不知道能不能解決line的鋸齒問題,如果知道的歡迎留言)。SMAA效果基本可以接受,但是2000個物體掉的幀率還是有點多,這個也不是我們首選的。TAA效果很好,如果場景里面很少動的東西,它是個不錯的選擇,如果有運動的物體或者動畫等等,基本上抗鋸齒就沒效果了,理論上應該可以實現動態的TAA,但是用目前的技術很難實現。所以TAA先不考慮加入我們的后處理渲染器(真實使用場景下一般都有動畫或者貼圖流動效果,所以TAA無法使用)。

          SMAA:效果不錯,開銷15幀左右(2000物體)

          SSAA:效果最好,開銷太大 (2000物體基本已經沒有了幀率)





          TAA:效果基本和SSAA差不多,但目前只有靜止的時候才有效果



          再來看看多重采樣MSAA,這個特性必須使用webgl2,是webgl提供的方式,和瀏覽器自身的抗鋸齒原理一樣,效果不錯,和正常渲染的結果沒有區別,性能開銷也不是太大,前提是我們不要使用stencilbuffer。而且three.js MSAA這塊的釋放有些小問題,詳細可以在deallocateRenderTarget這個接口中進行修改。現在我們可以把MSAA作為主要的抗鋸齒技術。MSAA雖然性能開銷不大,但是唯一的不足是比較吃顯存,如果是大屏,而且顯卡不好的話還是容易崩,無法開啟。因此我們還要繼續選擇一個開銷小不吃顯存的抗鋸齒(當然也可以考慮SMAA,目前由于幀率開銷較大(2000物體掉了15幀左右),我們不考慮加入SMAA)

          MSAA:基本沒有幀率開銷,效果不錯,但是耗費顯存(2000物體)



          最后的備選方案就是FXAA了,FXAA可以參考這個文章:添加鏈接描述講的很詳細,FXAA性能開銷很小,但是效果很一般,特別是細線的鋸齒沒法解決,轉動攝影機邊緣的閃動效果也無法解決,而且還有一個問題是由于FXAA就是靠邊緣模糊抗鋸齒,所以必然導致畫面會略有模糊。但是它最大的好處是開銷很小而且不耗費顯存,并且集成到后處理渲染器中最簡單。但是當顯存不足顯卡太差的時候它還是個不錯的選擇。因此需要加入FXAA。

          FXAA:效果一般,開銷很小,無法解決線的鋸齒問題,帶來模糊(2000物體)

          我們看了下各大引擎,基本每個引擎都實現了FXAA,還有很多引擎實現了FXAA3,FXAA3效果會好一些,但是依然無法解決線的問題。cesium的抗鋸齒就是完全采用FXAA3,效果還可以接受,所以目前我們把cesium的fxaa3_11拿過來用,最終引擎選擇使用MSAA加FXAA3_11的抗鋸齒策略(當然SMAA和TAA也可以選擇)。


          js reduce()

          seo達人

          是什么

          ES5提供的數組的方法。

          reduce() 方法接收一個函數作為回調函數(accumulator),數組中的每個值(從左到右)開始縮減(其實就是從左往右開始對每個數執行回調函數),最終為一個值。



          PS: 回調函數的返回結果類型和傳入的初始值相同



          語法以及參數

          arr.reduce(  callback(accumulator, currentValue,index ,array ) ,initialValue )

          1

          initialValue 可選

          如果有的話則作為,第一次調用 callback函數時的第一個參數的值。

          如果沒有提供初始值,callback則使用數組的第一個元素,作為第一次調用的初始值。

          在沒有初始值的空數組上調用 reduce 將報錯。



          accumulator

          默認傳入上一次調用回調函數的的返回值。

          初始值: initialValue存在的話,則是initialValue 若沒有則是數組的第一個元素



          currentValue

          數組中正在處理的元素。



          index 可選

          數組中正在處理的當前元素的索引。 如果提供了initialValue,則起始索引號為0,否則從索引1起始。



          array可選

          調用reduce()的數組



          一個小小的例子

          例1 無initialValue

          var  arr = [1, 2, 3, 4, 5];

          sum = arr.reduce(function(result, cur, index, arr) {

              console.log(result, cur, index,arr);

              return result+ cur;

          })

          console.log(sum) // 最后的結果是15



          result cur index arr

          第1次 1 2 1 [1, 2, 3, 4, 5]

          第2次 3 3 2 [1, 2, 3, 4, 5]

          第3次 6 4 3 [1, 2, 3, 4, 5]

          第4次 10 5 4 [1, 2, 3, 4, 5]

          例2 有initialValue 傳入10

          var  arr = [1, 2, 3, 4, 5];

          sum = arr.reduce(function(result, cur, index, arr) {

              console.log(result, cur, index,arr);

              return result+ cur;

          },10)

          console.log(sum) // 最后的結果是25



          result cur index arr

          第1次 10 1 0 [1, 2, 3, 4, 5]

          第2次 11 2 1 [1, 2, 3, 4, 5]

          第3次 13 3 2 [1, 2, 3, 4, 5]

          第4次 16 4 3 [1, 2, 3, 4, 5]

          第5次 20 5 4 [1, 2, 3, 4, 5]

          回調函數的返回值

          上面的例子返回的都是一個整型數字,如果希望返回其他類型的數據呢?



          這個就跟accumulator的初始值有關系了。

          下面的例子我們傳入的是一個object {sum: 0}



          var items = [0,1,2,3,4];

          var reducer = function add(sumT, item) {

            console.log(sumT)

            sumT.sum = sumT.sum + item;

            return sumT;

          };

          var total = items.reduce(reducer, {sum: 0});

          console.log(total); // {sum:1130}



          運行結果



           {sum: 0}

           {sum: 1}

           {sum: 3}

           {sum: 6}

           {sum: 10}



          reduce()的應用

          1. 數組扁平化

            遞歸+reduce



            let arr = [1, 2, '3js', [4, 5, [6], [7, 8, [9, 10, 11], null, 'abc'], {age: 12}, [13, 14]], '[]'];



            function flatten(arr) {

              if(Array.isArray(arr)) {

                return arr.reduce((prev, cur) => {

                   // 如果遍歷的當前項是數組,遞歸調用flatten

                  return Array.isArray(cur) ? prev.concat(flatten(cur)) : prev.concat(cur)

                }, [])

              } else {

                throw new Error(' 當前參數不是數組')

              }

            }

            console.log(flatten(arr));



            PS:這里的throw new Error只是用來判斷一開始的arr,這是因為在遞歸只傳入數組。


          案例分享:RARRA模型下,如何做用戶增長?

          資深UI設計者

          本文作者結合實際案例,跟大家分享一下在RARRA模型下,如何做用戶增長?

          從AARRR到RARRA的運營思路轉變

          眾所周知,AARRR經典的增長黑客體系,也稱之為「海盜法則」,分別是獲取、激活、留存、變現以及推薦。提出這個模型的 Dave McClure 認為,所有創新型、成長型的企業都應該按照這樣的模型來做增長。

          AARRR專注于獲客(Acquisition),作為一個2007年提出的概念, AARRR模型可能已經不再適用互聯網運營這個瞬息萬變的場景。原因有二:

          (1)獲客成本增加

          市場競爭激烈,用戶獲客成本已經不再便宜,一組數據顯示:阿里線上獲客的成本翻了 6 倍, 京東的獲客成本翻了 1.5 倍,趣頭條用戶獲取成本增加了 8 倍,百度的流量獲取成本增長了 41%。在當前的情況下,以拉新獲客為中心的增長模式意味著要比十年前這個模型提出時平均增加5倍以上的成本。

          (2)流失率高

          一組數據顯示,現在平均每個App在安裝后的情況:前3天內將流失掉77%的DAU。在30天內,它將流失90%的DAU。而到了90天,流失率躍升到95%以上。不管你是否心存懷疑,這就是目前眾多創業公司所面對的現實窘境,它創造了Brian Balfour所說的“無意義成長之輪”。

          因為以上兩個原因,現在黑客增長的真正關鍵在于用戶留存,而不是獲客。所以我們需要一個更好的模型——就是RARRA模型。

          AARRR與RARRA的區別

          RARRA模型是托馬斯·佩蒂特Thomas Petit和賈博·帕普Gabor Papp對于海盜指標-AARRR模型的優化,RARRA模型突出了用戶留存的重要性。

          簡單的說,AARRR模型的核心在于獲客,而在RARRA的模型下,專注用戶的留存。

          RARRA模型下,如何做用戶增長?(成功案例分享)

          分享一個我們前不久自己做的RARRA模型下用戶增長的成功案例:

          我們做的是一個在線教育平臺,課程的分類包括:

          • 以拉新為目的的新用戶免費體驗課(0元);
          • 以轉化為目的的低價專題課(50元以內);
          • 以盈利為目的的短期班課(999元以內)和系統課(1000-4000元)。

          這樣的課程顯然是以拉新-留存-轉化個流程進行的設計,也是現在很多在線教育平臺通用的課程模式設計,其實本質上和其他行業的平臺也是類似。

          在RARRA的模型下,數據驅動更重要。因為如果專注獲客,可以在渠道選擇等方面憑借經驗和主觀判斷來選擇,但是專注留存,就必須用數據分析找出每個留存環節的差異因素,進而制定最的方案大幅度提升留存率。在在線教育平臺的運營中,因為從推廣到課程設計、課程質量、售前售后服務等,包含大量影響營收的因素,因此數據分析方法也相對復雜。

          數據分析的第一步,也是關鍵點在于:構建指標體系。

          對于一個平臺來說,一般的數據指標都非常多,但必須確定唯一關鍵指標(OMTM),也是大家常說的北極星指標,作為驅動的方向。

          回歸商業本質,一切商業模式的終極目標當然是收入,但是收入這個指標并非北極星指標,而是決定北極星指標的上級因素。如下圖所示,平臺收入=有效聽課用戶數*客單價。因為課程的客單價有大致的市場標準,不會做太多變動。因此經過分析,我們認為直播課程運營的北極星指標是——有效聽課用戶數,也就是購買了課程并且有效聽課的用戶數量。

          那么接下來,就要對北極星指標進行分解。

          從指標拆解來看:

          • 有效聽課用戶中的新用戶數=外部流量導入*轉化率;
          • 有效聽課用戶中的老用戶數=老用戶數*續報率。

          在最后分解的四個指標中,除了老用戶數是直接由新用戶轉化率決定的之外,流量、轉化率、續報率三個指標都是可以通過運營來提升和改善的。

          但是由于時間和資源的限制,對于三個指標,運營策略上肯定會有側重點和先后順序。

          一開始,我們采用的是AARRR模型,把重點放在提升流量和新用戶轉化率上。通過廣告投放、拉新紅包等大量引流,并在課程設計上做了很多設計促進新用戶轉化率。最后流量和轉化率都提升了,但問題是,用戶停留在0元免費課和低價轉化課上,而續報高價課的有效用戶很少,這樣看似產品新增用戶很多,熱熱鬧鬧,但整體的營收還是上不去。

          團隊分析后認為,AARRR模型可能并不適合我們。既然續課率出了問題,應該嘗試采用RARRA模型,把運營重點放在留存上。

          于是,數據組開始探索留存的問題點出現在哪里。

          我們拉出不同維度用戶數據進行對比,最后發現新用戶和老用戶的續課率差值竟高達53%。

          也就是說,新用戶進行初步低價課轉化后,在從低價課到達正價課的留存續課階段,是流失最嚴重的一塊。

          找到了最痛的點,問題其實已經解決了一半。

          接下來,通過各種數據因素分析,我們判斷出了影響新用戶續課率的幾個重點因素,分別是:用戶來源、課前服務、課程質量。并且對每一個因素繼續分解深挖。(標紅為續課率效果最好)

          • 在課程質量方面,三個細分數據指標綜合可以衡量課程質量。
          • 課前服務時間上,通過數據對比,我們發現課前兩周進行服務的效果最好,續課率也最高。
          • 用戶來源上,短期班課的用戶續課率遠高于其他兩個來源。

          根據以上的數據分析,給出了運營策略指導為:

          1. 教師和教研團隊狠抓課程質量,改變以前主觀評價模式。用出勤率、完課率和作業完成率三者綜合考核教師KPI;
          2. 助教團隊的課程服務時間前置,從以前的課前一周和課后進行服務,改為課前兩周開始進行用戶服務;
          3. 服務人群的重點轉移到短期班課新用戶上。

          改進后的效果:

          通過以上三個方向的運營策略調整,同樣的團隊,僅用了一個月的時間,就把新老用戶續課率的差值從53%縮小到了9%!效果非常明顯。同時平臺整體收入也大幅增加,而運營成本卻比以前大規模進行渠道投放大大節省了。

          階段性的成功,正是及時調整了用戶增長模型,并采用系統的數據分析方法驅動用戶增長??梢钥闯?,數據驅動下,最終給出的運營策略非常簡潔,但前面數據組背后付出的努力和精力是很難被看到的。這正是我們想要的結果,扎根穩且深入,但呈現的卻是簡潔明了的運營指令。

          日歷

          鏈接

          個人資料

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

          存檔

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