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

          app.vue



          <template>

            <div id="app">

              <transition :name="transitionName">

                <keep-alive >

                  <router-view v-if="$route.meta.keepAlive" class="Router"></router-view>

                </keep-alive>

              </transition >

              <transition :name="transitionName">

                <router-view v-if="!$route.meta.keepAlive"  class="Router"></router-view>

              </transition >

              <Play></Play>

            </div>

          </template>

          <script>import Play from './components/play'

          export default {

            name: 'App',

            data () {

              return {

                transitionName: 'slide-left'

              }

            },

            watch: {

              '$route' (to, from) {

                // 切換動畫

                let isBack = this.$router.isBack // 監聽路由變化時的狀態為前進還是后退

                if (isBack === true) {

                  this.transitionName = 'slide-right'

                  // from.meta.keepAlive = false

                  // to.meta.keepAlive = true

                } else {

                  // from.meta.keepAlive = true

                  // to.meta.keepAlive = false

                  // this.transitionName = 'slide-left'

                  if (this.$route.path.split('/').length < 3) {

                    this.transitionName = 'slide-fade'

                  } else {

                    this.transitionName = 'slide-left'

                  }

                }

                this.$router.isBack = false

              }

            },

            components: {

              Play

            }

          }

          </script>



          <style>

          .Router {

            font-family: Roboto, Lato, sans-serif;

            position: absolute;

            width: 100%;

            height: 100%;

            padding-bottom: 60px;

            transition: all .377s ease;

            box-sizing: border-box;

            overflow: auto;

          }

          .slide-left-enter,

          .slide-right-leave-active {

            opacity: 0;

            -webkit-transform: translate(100%, 0);

            transform: translate(100%, 0);

          }



          .slide-left-leave-active,

          .slide-right-enter {

            opacity: 0;

            -webkit-transform: translate(-100%, 0);

            transform: translate(-100% 0);

          }

          .ovf {

            overflow: hidden;

          }

          .center {

            width: 95%;

            margin: 0 auto;

            overflow-y: hidden;

          }

          li {

            list-style: none;

          }

          </style>



          路由配置



              {

                path: '/playListDetail/:id',

                name: 'playListDetail',

                component: pather => require(['../components/playListDetail.vue'], pather),

                meta: {

                  title: '歌單詳情',

                  keepAlive: true,

                  isBack: false

                }

              },



          返回事件



           back () {

                this.$router.go(-1)

                this.$router.isBack = true

              }

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

          提高JS性能的12個技巧

          seo達人

          在我們開發的過程中,應該始終考慮性能。而本文列舉了有效提高系統性能的12個方法,如果朋友們有更多的技巧請在吳小迪的博客下方評論,謝謝。



          性能是創建網頁或應用程序時最重要的一個方面。沒有人想要應用程序崩潰或者網頁無法加載,或者用戶的等待時間很長。根據Kissmetrics,47%的訪問者希望網站在不到2秒的時間內加載,如果加載過程需要3秒以上,則在40%的訪問者會離開網站。



          考慮到以上這些數字,你在創建Web應用程序時應始終考慮性能。為了幫助你開始,以下提供了有效提高應用程序性能的12種方法:



          一:在瀏覽器中緩存

          要這樣做有倆種選擇。第一種是使用JavaScript Cache API,我們可以安裝service worker來使用它。第二種是使用HTTP協議緩存。



          訪問某個對象通常要用腳本。通過把重復訪問的對象存儲在用戶定義的變量中,以及在后續對該對象的引用中使用變量,可以立即實現性能的提升。



          二:定義執行的上下文

          為了有效地衡量你在程序中加入的任何改進,你必須創建一組定義良好的環境,以便測試代碼性能。



          對所有JavaScript引擎的所有版本進行性能測試和優化實際上是不可行的。但是,在單一的環境中進行測試并非一個好習慣,因為你可能會得到片面的結果。因此,建立多個定義良好的環境并測試代碼是否有效非常重要。



          三:刪除未使用的JavaScript

          此步驟不僅會縮短傳輸時間,還會縮短瀏覽器分析和編譯代碼所需的時間。為此,你必須考慮以下幾點:



          如果你檢測到一個用戶未使用的功能,最好刪除所有與之相關的JavaScript代碼,這樣網站的加載速度會更快,用戶也有更好的體驗。

          還有可能,你錯誤地加入了一個并不需要的庫,或者你有依賴項,這些依賴項提供的功能在所有瀏覽器中原本就有,那么你無需再增加多余的代碼。

          四:避免使用太多內存

          你應該始終給內存加一條限制,那就是只有絕對必須的內容才能使用內存,因為你無法知道運行應用程序的設備到底需要多少內存。只要你的代碼要求瀏覽器保留新的內存,瀏覽器的垃圾收集器就會被執行,并停止JavaScript的運行。如果經常發生這種情況,頁面將變慢。



          五:推遲不必要的JS加載

          用戶希望頁面快速加載,但并非所有函數都需要在頁面的初始加載時就可用。如果用戶必須執行某個操作才能執行某個函數(例如,通過單擊某個元素或更改選項卡),那么你可以將該函數的加載推遲到初始頁面加載之后。



          通過這種方式,你可以避免加載和編譯那些會延遲頁面初始顯示的 JavaScript 代碼。頁面完全加載后,我們可以再開始加載這些功能,以便它們在用戶開始交互時立即可用。在 RAIL 模型中,Google 建議將此延遲加載以 50 毫秒為單位進行,這樣就不會影響用戶與頁面的交互。



          六:避免內存泄漏

          如果內存正在泄漏,則加載的頁面將保留越來越多的內存,并最終占用設備的所有可用內存并嚴重影響性能。你可能見過此類故障(并且可能對此類故障感到懊惱),例如在帶有輪播或圖像滑動條的頁面上。



          在 Chrome 開發者工具中,你可以通過在“性能”標簽中記錄時間線來分析你的網站是否存在內存泄漏。通常,內存泄漏的原因是,你從頁面中刪除了 DOM,但有一些變量還在引用這些 DOM,因此,垃圾收集器無法消除它們。



          七:適當的使用Web worker

          當你執行耗時很長的代碼時,請使用 Web worker。根據 Mozilla 開發人員網絡 (MDN) 文檔:“Web Worker 可以在與 Web 應用程序的主執行線程分開的后臺線程中運行腳本操作。這樣做的好處是你可以在一個單獨的線程中執行耗時又費力的的處理,同時讓主(通常為 UI)線程運行而不被阻塞或減慢?!?br />


          Web worker 允許代碼執行處理器密集型計算,而不阻塞用戶界面線程。Web Worker 允許你生成新線程并將工作委托給這些線程以獲得的性能。這樣,通常會阻礙其他任務且需要長時間運行的任務將被傳遞給 worker,從而讓主線程可以在無阻礙的情況下運行。



          八:適當將DOM元素保存在局部變量中

          訪問 DOM 會很慢。如果要多次讀取某元素的內容,最好將其保存在局部變量中。但記住重要的是,如果稍后你會刪除 DOM 的值,則應將變量設置為“null”,不然會導致內存泄漏。



          九:優先訪問局部變量

          JavaScript 首先搜索以查看變量是否存在于本地,然后才在更高級別的作用域內逐步搜索到全局變量為止。將變量保存在本地作用域內能讓 JavaScript 更快地訪問它們。



          局部變量是基于最具體的作用域的,并且可能會穿過多個級別的作用域,因此查找這一動作可能導致出現通用的查詢。在一個它前面沒有變量聲明的局部變量中定義函數作用域時,需要在每個變量之前加上 let 或 const,以便定義當前作用域,防止查找并加速代碼執行。



          十:避免使用全局變量

          因為腳本引擎在從函數或其他作用域內引用全局變量時需要逐一查看作用域,所以當本地作用域丟失時,該變量將被銷毀。如果全局作用域中的變量無法在腳本的生命周期內持續存在,則性能將得到改善。



          十一:實施一些優化方案

          始終使用計算復雜度的算法和最佳的數據結構來解決任務。



          重寫算法以獲得相同的結果和更少的計算。



          避免遞歸調用。



          給重復的函數加入變量、計算和調用。



          分解和簡化數學公式。



          使用搜索數組:用它們來獲取基于另一個的值,而不是使用 switch/case 語句。



          使條件總是更有可能為真,以更好地利用處理器的推測執行。



          如果可以,請使用位級運算符替換某些操作,因為這些運算符的處理周期較短。



          十二:使用工具檢測問題

          Lighthouse 是一個很好的網頁性能工具,它可以幫助你審核性能、可訪問性、最佳實踐和 SEO。谷歌 PageSpeed 旨在幫助開發人員了解網站的性能優化和潛在可改進的方面。這些組件旨在識別網站是否符合 Google Web 性能最佳實踐,以及將調整過程自動化。



          在 Chrome 中,你還可以使用主菜單中的“更多工具”選項來查看每個選項卡使用的內存和 CPU。對于更高級的分析,你可以使用 Firefox 或 Chrome 中的開發人員工具“性能”視圖來分析不同的指標,例如:





          devtools 的性能分析允許你在加載頁面時模擬 CPU 消耗、網絡和其他指標,以便識別和修復問題。





          為了更深入地了解,建議你使用 JavaScript Navigation Timing API,它允許你詳細測量代碼的每個部分從編程本身中獲取的內容。



          對于基于 Node.js 構建的應用程序,NodeSource Platform 也是一種非常好、影響低的方式,它可以在非常精細的級別上探索應用程序性能。



          全面的 Node.js 指標可幫助你識別內存泄漏源或其他性能問題,并更快地解決這些問題。



          最后的說明在代碼的可讀性和優化之間保持平衡很重要。代碼由計算機解釋,但我們需要確保代碼將來可以由我們自己或其他人維護,因此它們需要易于理解。



          請記?。簯冀K考慮性能,但不應將性能凌駕于錯誤檢測和功能添加之上。

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

          提升語義分割性能的幾種方法

          seo達人

          本文主要記錄幾種提升基于深度學習的圖像語義分割精度的方法,以防忘記!

                                                  By zhengzibing2011, 2017年10月21日-星期六

          1

          1.圖像語義分割面臨的挑戰

          (1).特征分辨率減?。褐饕怯缮窠浘W絡中的重復最大池化和降采樣(stride跨越)操作造成的,而采用此種操作的原因是 

          A.降維,以免參數過多難以優化; 

          B.基于DL的語義分割是從用于分類任務的CNN轉化而來,而在分類任務中,分類器要求對輸入的空間變換具有不變性,池化恰能滿足這樣的要求。



          (2).不同scale下的目標存在的狀況:主要是目標在multi-scale圖像中的狀態造成的,因為在同一種尺度下,不同目標的特征往往響應并不相同。如需要在較大的尺度下才能較好地提取圖像中比較小的目標,而較大的目標為了獲取全局性信息也必須在較小的尺度下才能實現。



          (3). CNN的空間不變性造成定位精度的下降:對于分割任務而言,由于pooling操作引起的分類器對輸入的空間變換具有不變性丟失空間信息,內在的限制了分割的空間精度。



          2.潛在的解決方法

          FCN作為將CNN應用于semantic segmentation的forerunner,貢獻巨大。但不可回避,其提出的方法具有一些不足。為保證卻終的feature map不至于過小,FCN的conv1引入pad=100,引入了較大的噪聲; 

          32倍upsample(deconvolution)非常粗糙,而且deconvolution的filter不可學習; skip architecture雖能有效提高精度,但需要3次訓練即FCN-32s->FCN-16s->FCN-8s。除skip architecture外。隨著研究的深入,針對以上挑戰,有以下幾種方法解決:



          (1). Encoder-Decoder結構

          采用此種思想的代表為DeconvNet,SegNet,其基本思想是采用一種對稱結構將由于pooling操作而減小的feature map通過逐步的upsample逐漸恢復到原圖像大小,同時在upsample階段,融合了subsample中pooling index,具體細節可參見原文。 





          (2). Atrous convolution

          feature map的減小是由于pooling造成的,為確保一定精度的feature map,能否不使用或減少使用pooling呢?理論上是可行的,但如果這樣做會使得需要優化的參數過多,重要的是難以基于以前的model進行fine-tuning,atrous convolution解決了這個問題。 

          在DeepLab中令pool4,pool5的stride=1,再加上1 padding,這樣經過pooling后feature map大小不變,但后層的感受野發生了變化,為使感受野不變,后面的卷積層使用atrous convolution,其作用是在不增加參數的前提下,增加感受野。因此,解決了feature map空間分辨率下降的問題。







          (3). ASPP

          針對不同scale下的目標存在的狀況問題,可通過兩種方法解決: 

          A.標準的多尺度處理方法,用共享相同參數的并行CNN的分支,從不同尺度的Input image中提取score map,然后進行雙線性差值,最終對它們進行融合,在不同尺度上獲得每個位置的最大響應。訓練和測試時均這樣處理,比較繁瑣的是需要計算輸入圖像的每個尺度在各layer上的特征響應。 





          B.基于任意尺度上的區域都可以用在這個單一尺度上重采樣卷積特征進行有效地分類的思想,使用多個不同采樣率上的多個并行多空卷積,每個采樣率上提取的特征再用單獨的分支處理,融合生成最后的結果。











          (4). FC-CRF

          CRF幾乎可以用于所有的分割任務中圖像精度的提高。CNN可用于對圖像中的目標進行分類并預測出目標的大致位置,但并不能真正描繪他們的邊界。因此,將DCNN的識別能力和全連接CRF優化定位精度耦合在一起,能成功的處理定位挑戰問題,生成了的語義分割結果。全連接CRF理論較為復雜,在此不作闡述。類似的概率圖模型(PGM)還有MRF,G-CRF(高斯-條件隨機場)。







          3.總結

          目前,暫且先記錄以上4種提高分割精度的方法。后續若有新的方法,予以追加!

          ————————————————

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

          JS作用域與聲名提升

          seo達人

          JS的作用域一共有三個范圍,分別是:



          全局作用域

          定義在所有函數之外的變量,其作用范圍是在整個腳本中

          局部作用域(函數作用域)

          使用var定義在函數內部的變量,其作用范圍是整個函數結構,超出函數 {} 花括號的范圍則不能使用。

          塊級作用域

          ES6聲明變量的方式:let / const

          let 變量名 = 變量值;

          const 變量名 = 變量值;

          PS:注意: 使用const修飾的變量,賦值確定后,不允許再重新賦值。(一般修飾常量或者數組對象之類的)

          而且必須給予初始值。

          const修飾數組對象后雖然不可以再對變量進行等號賦值了,但是還是可以用數組和對象的方法去改變它的內部結構。

          IIFE(立即調用函數表達式 - - 自執行匿名函數):

          英文全名:(Immediately Invoked Function Expression)

          語法:

          //這三種都屬于IIFE寫法

          (function () {})();

          (function () {}());

          +function () {}();

          //作用與ES6當中的let是一樣的,只不過用這個語法是為了解決個別瀏覽器的兼容問題。

          1

          2

          3

          4

          5

          聲名提升:

          將使用var定義的變量聲名提升到對應作用域的最頂部,賦值部分位置不變。



          使用ES6的let與const沒有聲名提升。



          函數的定義也存在聲名提升:



          如果是聲名的方式定義的函數,將整個函數(聲名及函數主體)都提升到作用域的最頂部。

          如果是表達式的方式定義的函數,只提升聲名,不提升賦值(函數主體部分)

          示例:



          //在聲名函數前面輸出它。輸出的結果就是整個聲名函數的內容

          console.log(testArg)

          function testArg(a, b, c){

          console.log(arguments)

          }

          1

          2

          3

          4

          5

          輸出結果:





          //在函數表達式之前輸出函數

          console.log(testArg)

          var testArg = function(a, b, c) {

          console.log(arguments)

          }

          1

          2

          3

          4

          5

          輸出結果:



          這就是聲名提升的特點,只提升聲名部分,不提升賦值部分。大家一定要牢牢記住哦~

          ————————————————

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

          ECharts的resize失效原因以及使用方法

          seo達人

          很多朋友在開發的過程中要把ECharts圖標做成自適應瀏覽器寬高的效果。于是去翻看ECharts官網發現了resize方法,結果用了之后發現沒用,而且根本不知道什么原因。



          解決辦法:

          不能給ECharts的容器設置固定的寬高。



          寬度要寫百分比

          高度要寫vh

          然后再搭配resize方法才可以實現根據瀏覽器大小而改變大小的功能



          示例代碼:

          let ECharts = echarts.init(document.getElementById('wrapBox'));

          //ECharts的配置項和數據

          let option = {

          title: {

          text: 'demo'

          },

          tooltip: {},

          legend: {

          data: ['dataSource']

          },

          xAxis: {

          data: ['aa', 'bb', 'cc']

          },

          yAxis: {},

          series: [{

          name: 'dataSource',

          type: 'bar',

          data: [2, 5, 6],

          }]

          };

          //配置圖表數據及配置項

          ECharts.setOption(option);



          //根據瀏覽器大小改變大小

          window.onresize = () => {

          ECarts.resize();

          //如果有多個表變動在下方依次寫下去就可以了

          }

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

          vue單頁面標題設置 title

          seo達人

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

          推薦使用 vue-wechat-title

          vue-wechat-title作用
          Vuejs 單頁應用在iOS系統下部分APP的webview中 標題不能通過 document.title = xxx 的方式修改 該插件只為解決該問題而生(兼容安卓)

          已測試APP 
          微信 
          QQ 
          支付寶 
          淘寶

          安裝
          npm install vue-wechat-title --save
          1
          用法
          1,在 main.js 中引入
          import VueWechatTitle from 'vue-wechat-title'
          Vue.use(VueWechatTitle)
          1
          2
          2,在路由文件 index.js 中給每個路由添加 title
          // 掛載路由
          const router =  new Router({
             mode: 'history',
             routes:[
                  {
                    path: '/',
                    name: 'Index',
                    component: Index,
                    meta: {
                      title: '首頁'   // 標題設置
                    }
                  },
                  {
                    path: '/lists',
                    name: 'Lists',
                    component: Lists,
                    meta: {
                      title: '列表'  // 標題設置
                    }
                  }
               ]
          });

          3,在 app.vue 中修改 router-view 組件
          <router-view v-wechat-title='$route.meta.title'></router-view>
          1
          自定義加載的圖片地址 默認是 ./favicon.ico 可以是相對或者絕對的

          <div v-wechat-title="$route.meta.title" img-set="/static/logo.png"></div>
          1
          ok !重啟看看

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

          char[] 和 String 類型占用字節大小問題

          seo達人

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

          在 C 語言中
          1、char a[10] = {"China"} 中,這個 a 占用多少字節?

          答:占用 10 個字節。

          解析:上面代碼對 a 做了賦值的操作,

          a[0]='C' ,a[1]='h' ,a[2]='i' ,a[3]='n' ,a[4]='a' ,a[5]='\0',a[6]='\0',a[7]='\0',a[8]='\0',a[9]='\0'

          所以,它占用的是 10 個字節。

          2、如果單指 ”China“ ?

          答:共 6 個字節。China 占 5 個字節,最后以 '\0' 結束,占 1 個字節。

          在 Java 語言中
          1、String s = "China"; 占多少字節?

          答:占 5 個字節。

          System.out.println(Charset.defaultCharset());//獲取ide默認編碼類型
          String s = new String("China".getBytes());
          byte[] b = s.getBytes();
          System.out.println("" + b.length);
           以上代碼,可以輸出 "China" 所占的字節長度為 5

          2、String s = "中國"; 占多少字節?

          答:如果是 漢字 的情況需要考慮編碼。

          (1)GBK 編碼(ide默認)時,每一個漢字占用 2 個字節,那么中國占 4 個字節。

          (2)UTF-8 編碼時,每一個漢字占用 3 個字節,那么中國占用 6 個字節。

          3、轉碼問題,GBK 轉 UTF-8 時,字節占用會變大嗎?反過來呢?

          //獲取的是 UTF-8編碼
          System.out.println(Charset.defaultCharset());
          String s;
          try {
                  s = new String("中國".getBytes(),"GBK");
                  byte[] b = s.getBytes();
                  System.out.println("" + b.length);
              } catch (UnsupportedEncodingException e) {
                  e.printStackTrace();
          }
          如上代碼是:UTF-8 轉 GBK 編碼格式,s 長度從 6 字節變為 9 字節。
          s 內容變化:中國 —> 涓浗
          因為當前編碼是 UTF-8,轉碼之后變成了 3 個文字,占用 9 個字節。然而,反過來的情況是這樣的:

          中國 (gbk) —> ?й? (utf-8)
          s 長度從 4字節 變成了 4字節,雖然長度沒發生改變,但是文字已經改變。這里的 ? 占用 1 個字節。

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

          一個 npm 包的坎坷“續命”之生

          seo達人

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

          如果說 npm 的大新聞,莫過于之前的 left-pad 撤包事件,event-stream 投毒事件,Ant Design 彩蛋事件。使得很多前端開發者又開始重新思考 npm 生態時候真的存在問題?

          今天我們文章的主角是 memwatch,一個用來幫助我們檢查 Node.js 是否存在內存泄漏的庫,和這個庫傳奇的一生。

          2012 年 02 月 06 日,一位 Mozilla 的工程師 lloyd 創建了這個庫,并寫了一篇博文“Is My NodeJS Program Leaking?”(我的 Node.js 程序是否存在內存泄漏?)。這個包最初被命名為 gcstats,代碼上傳到了 github。

          6 月 27 日,npm 包改名為 memwatch,發布 0.1.1 版。

          7 月 4 日,lloyd 為這個庫添加了開源許可協議:WTFPL,發布 0.1.2 版。很多人對這個開源許可協議可能比較陌生,WTFPL 的全稱是 Do What The Fuck You Want To Public License,中文譯名:你他媽的想干嘛就干嘛公共許可證。也許就是這份協議開啟了 memwatch 庫不尋常的一生。

          2013 年 3 月 14 日,作者 lloyd 提交了最后一次代碼,發布了 0.2.2 版本。支持的 Node.js 版本為 0.6.0。隨后這個庫再也沒有更新過。

          從作者的博文和推文可以看到,作者在 2014 年離開了 Mozilla。而從作者的 github 動態更可以看出,作者應該是轉入了 golang 陣營。

          2014 年 6 月 28 日,作者的一位前同事 deepak1556 fork 了這個庫,增加了對 Node.js 0.11 的支持,并發起了合并請求。但是作者并沒有回復,也沒有合并此次請求。此時距離原作者放棄這個庫也已經過去一年多了。

          2015 年 2 月 7 日,marcominetti 又 fork 了 deepak1556 的庫,增加了對 Node.js 0.12 的支持,并向原庫發起了合并請求,同樣沒有得到作者的任何回復。于是 marcominetti 決定自立門戶,于是將 memwatch 改名為 memwatch-next 發布到了 npm。

          2017 年 1 月 27 日,如同前兩位維護者一樣,marcominetti 也最終放棄了繼續更新這個庫。到此時,此庫支持的 Node.js 版本為 4、5、6。

          2018 年 5 月 6 日,eduardbcom 又 fork 了 marcominetti 的庫,增加了 Node.js 9 的支持,并且放棄了對 Node.js 9 以下所有版本的支持。改名為 node-memwatch 并發布到了 npm。隨后再也沒有更新過代碼。

          2018 年 7 月 17 日,一位開發者 dyatko 又 fork 了 eduardbcom 的庫,增加了對 Node.js 8 的支持,并向原庫發起了合并請求,同樣沒有得到作者的任何回復。

          但在此次 pr 的評論中,另一位開發者說,airbnb 也 fork 了 marcominetti 的庫,并改名為 @airbnb/node-memwatch 發布到了 npm。

          有了大廠接手,也算是這個庫最終的歸宿吧。


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

          waterfull——ajax分析

          seo達人

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

          把項目放在wampserver的www目錄下,啟動wampserver,并且瀏覽器打開后手動修改url為localhost

          index.js=》getData():

          ajax.js以及index。js對它的調用:

          ajax的參數:method、data、url都是字符串

          index.js =》getData()=》調用ajax

          ajax('GET', 'http://localhost/web/ajax/waterfall2/src/js/getPics.php', addDom, 'cpage=' + num, true)

          并且url是localhost下——localhost/web/ajax/waterfall2/src/js/getPics.php

          不是直接圖片資源地址

          圖片資源地址寫在php中,只管調用就行

          data:

          ajax調用是data是這樣的=》'cpage=' + num

           

          測試用的data.txt:

          一個數組里有很多對象,每個對象都是一張圖片的全部信息,每條信息都是json.stringify格式

          所以測試用ajax的callback這樣寫:

          function addDom(data) {
              console.log(JSON.parse(data));
          }

          這個data不是自己定義的,是xhr.responseText,是接口的數據

          這個data是callback的參數

          回調函數的data參數和使用方法:

          xhr.onreadystatechange = function() {

          ////////狀態改變
                  if(xhr.readyState == 4) {
                      if(xhr.status == 200) {
                          callback(xhr.responseText);

          ////////滿足兩個條件時,callback才獲取數據成功,才能用數據做些什么


                      }else {
                          console.log('error');
                      }
                  }
              }

          ajax()中callback是參數,而callback的定義和對數據的操作通常在ajax()調用之后

          例如:

          (1)

          ajax('GET', 'http://localhost/web/ajax/waterfall2/src/js/data.txt', addDom, 'cpage=2', true);
          function addDom(data) {
              console.log(JSON.parse(data));
          }

          如此簡單明了

          (2)

          function getData() {
          //         if(!flag) {
          //             flag = true;
          //             ajax('GET', 'http://localhost/web/ajax/waterfall2/src/js/getPics.php', addDom, 'cpage=' + num, true)
          //             num++;
          //         }
          //     }
          //     getData();
          //     function addDom(data) {

          ……

          }

          回來…………

          ajax中的data在本例中是字符串'cpage=' + num  或者 'cpage=2'這種

          get中作用:

          xhr.open(method, url + '?' + data + '&timer=' + timer, flag);

          post中作用:

          xhr.send(data);

          話說回來…………

          都是獲取數據,data.txt和getPics.php區別:

          一個只有第2頁的地址,一個是動態獲取很多頁數據

          反正就那么傳吧  

          而ajax

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

          Vue教程(組件-切換案例)

          seo達人

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

          前面介紹了Vue中組件的創建方式和data及methods屬性,本文我們來做一個Vue組件的切換案例,效果如下:

          這個效果相信大家都能搞定,本文希望通過這個案例來加深下組件的使用,

          Vue 組件切換案例
          基礎頁面

          <!DOCTYPE html>
          <html lang="en">
          <head>
              <meta charset="UTF-8">
              <meta name="viewport" content="width=device-width, initial-scale=1.0">
              <meta http-equiv="X-UA-Compatible" content="ie=edge">
              <title>Document</title>
              <script src="./lib/vue-2.4.0.js"></script>
          </head>
          <body>
              <div id="app">

              </div>
              <script>
                  var vm = new Vue({
                      el: "#app",
                      data: {

                      },
                      methods: {
                          
                      }
                  })
              </script>
          </body>
          </html>


          一、通過v-if控制實現
          首先我們通過前面介紹的v-if標簽來實現下這種效果

          1.創建組件
          創建我們需要的兩個全局組件,并通過標簽使用。

          <div id="app">

              <login></login>
              <register ></register>
          </div>
          <script>

              // 創建登錄的組件
              Vue.component("login",{
                  template: "<h3>這是一個登錄LOGIN組件</h3>"
              })
              // 創建注冊的組件
              Vue.component("register",{
                  template: "<h3>這是一個注冊組件</h3>"
              })

              var vm = new Vue({
                  el: "#app",
                  data: {

                  },
                  methods: {
                      
                  }
              })
          </script>

          2.控制顯示
          添加鏈接標簽,通過 v-if 和 v-else 標簽來控制顯示和隱藏,如下



          效果



          完整代碼:

          <!DOCTYPE html>
          <html lang="en">
          <head>
              <meta charset="UTF-8">
              <meta name="viewport" content="width=device-width, initial-scale=1.0">
              <meta http-equiv="X-UA-Compatible" content="ie=edge">
              <title>Document</title>
              <script src="./lib/vue-2.4.0.js"></script>
          </head>
          <body>
              <div id="app">
                  <a href="" @click.prevent="flag=true">登錄</a>
                  <a href="" @click.prevent="flag=false">注冊</a>
                  <!--注意: v-if v-else-if v-else 使用^_^ -->
                  <login v-if="flag"></login>
                  <register v-else></register>
              </div>
              <script>

                  // 創建登錄的組件
                  Vue.component("login",{
                      template: "<h3>這是一個登錄LOGIN組件</h3>"
                  })
                  // 創建注冊的組件
                  Vue.component("register",{
                      template: "<h3>這是一個注冊組件</h3>"
                  })
                  var vm = new Vue({
                      el: "#app",
                      data: {
                          flag: false
                      },
                      methods: {}
                  })
              </script>
          </body>
          </html>

          二、通過component標簽來實現
          除了上面介紹的這種方式以外我們還可以通過Vue組件中給我們提供的一個component標簽來實現



          Vue提供了 component 來展示對應名稱的組件,component 是一個占位符, :is 屬性,可以用來指定要展示的組件的名稱

          效果



          完整代碼

          <!DOCTYPE html>
          <html lang="en">
          <head>
              <meta charset="UTF-8">
              <meta name="viewport" content="width=device-width, initial-scale=1.0">
              <meta http-equiv="X-UA-Compatible" content="ie=edge">
              <title>Document</title>
              <script src="./lib/vue-2.4.0.js"></script>
          </head>
          <body>
              <div id="app">
                      <a href="" @click.prevent="comName='login'">登錄</a>
                      <a href="" @click.prevent="comName='register'">注冊</a>

                      <component :is="comName"></component>
              </div>
              <script>

                  // 創建登錄的組件
                  Vue.component("login",{
                      template: "<h3>這是一個登錄LOGIN組件</h3>"
                  })
                  // 創建注冊的組件
                  Vue.component("register",{
                      template: "<h3>這是一個注冊組件</h3>"
                  })

                  var vm = new Vue({
                      el: "#app",
                      data: {
                          comName: "login"
                      },
                      methods: {

                      }
                  })
              </script>
          </body>
          </html>

          35
          36
          37
          38
          39
          組件切換-動畫
          前面我們介紹了 動畫 的使用,那么剛好我們可以在切換的時候把動畫效果給加上。
          添加動畫樣式:

          <style>
              .v-enter,
              .v-leave-to{
                  opacity: 0;
                  transform: translateX(150px) ;
              }

              .v-enter-active,
              .v-leave-active{
                  transition: all 1s ease;
              }
          </style>

          組件包裹 標簽



          效果



          我們發現動畫切換的時候兩個是一塊執行的,這時我們可以在 transition 標簽添加一個 mode屬性 來設置動畫的模式



          搞定~

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


          日歷

          鏈接

          個人資料

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

          存檔

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