最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

taro小程序添加骨架屏的實(shí)現(xiàn)代碼

 更新時(shí)間:2019年11月15日 10:55:48   作者:Dlingling  
這篇文章主要介紹了taro小程序添加骨架屏的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

最近做了一些小程序方面的性能優(yōu)化,如分包加載,添加骨架屏等,這次主要說一下骨架屏的相關(guān)內(nèi)容。

關(guān)于骨架屏,有三種方法:

1.直接請(qǐng)UI同學(xué)幫忙P張圖,當(dāng)做loading圖放上去。這種方法簡(jiǎn)單粗暴,但是需要請(qǐng)人幫忙~
2.根據(jù)每個(gè)頁面,自己寫一套相同的代碼來覆蓋樣式。這種方法的工程量,你懂的~
3.能不能寫個(gè)組件呢?該組件自動(dòng)獲取元素位置大小信息來渲染,數(shù)據(jù)返回后將其卸載。

下面主要說第三種方法~

主框架采用taro,一套代碼兼容多端,但是今天這個(gè)代碼,需要考慮兼容性~

根據(jù)上面的思路,我們首先要找到骨架屏的容器,然后找到需要P成灰色的元素,獲取該元素的位置大小信息,最后就是渲染了~

獲取元素,taro提供了API,Taro.createSelectorQuery()。通過這個(gè)API返回一個(gè)SelectorQuery對(duì)象實(shí)例,然后再通過selectAll()來查找骨架中帶有特定類的class名,查找之后通過boundingClientRect()獲取元素的位置大小信息,把這些信息存放在數(shù)組中。
我這邊寫了兩個(gè)類,一個(gè)是skeleton-radius,渲染圓形;一個(gè)是skeleton-rect,渲染長(zhǎng)方形。后續(xù)大家可以自行擴(kuò)展。

文字有點(diǎn)多,大家可能看著有點(diǎn)云里霧里的,下面上代碼~

  // 百度小程序目前不支持跨自定義組件的后代選擇器: >>>
  // 但是H5使用后代選擇器(.the-ancestor .the-descendant)的時(shí)候,可以自動(dòng)識(shí)別自定義組件內(nèi)的后代
  // 微信小程序支持跨自定義組件都后代選擇器(.the-ancestor >>> .the-descendant),可修改為如`.${this.props.selector} >>> .${this.props.selector}-radius`
  if (process.env.TARO_ENV === 'weapp') {
    Taro.createSelectorQuery().selectAll(`.${this.props.selector} >>> .${this.props.selector}-radius`)
      .boundingClientRect().exec(rect => {
        that.setState({
          radiusList: rect[0]
        });
      });
  }
  else {
    Taro.createSelectorQuery().selectAll(`.${this.props.selector} .${this.props.selector}-radius`)
    .boundingClientRect().exec(rect => {
      that.setState({
        radiusList: rect[0]
      });
    });
  }

大家也看到上面的注釋了,如果要在多端運(yùn)行,可先判斷環(huán)境,根據(jù)環(huán)境使用不同的選擇器。上面代碼是實(shí)現(xiàn)一個(gè)圓形的灰色區(qū)域~大家如果有多個(gè)形狀的需求的話,可以簡(jiǎn)單封裝一個(gè)函數(shù),這里我就不再細(xì)說了,具體的可以到Demo詳細(xì)查看~
細(xì)說一下后代選擇器的兼容性問題:

  1. 百度小程序目前不支持跨自定義組件的后代選擇器: >>>。
  2. 但是H5使用后代選擇器(.the-ancestor .the-descendant)的時(shí)候,可以自動(dòng)識(shí)別自定義組件內(nèi)的后代。使用自定義組件時(shí),外層是否有元素包裹,都可識(shí)別到自定義組件內(nèi)部的指定類選擇器。
  3. 微信小程序支持跨自定義組件的后代選擇器(.the-ancestor >>> .the-descendant),但使用自定義組件時(shí),外層不能嵌套元素,否則無法識(shí)別。

接下來就是渲染了,這個(gè)比較簡(jiǎn)單,直接上代碼~這里背景色和將要P成條狀等的元素的背景色都可以在使用組件時(shí)自定義傳入,也可以不傳,有默認(rèn)色~

 <View className='skeleton-container' style={{background: `${bgColor}`}}>
      {
        radiusList.map(radiusItem => (
          <View className='skeleton-item skeleton-item-radius' style={{width: `${radiusItem.width}PX`, height: `${radiusItem.height}PX`,
            background: `${itemColor}`, top: `${radiusItem.top}PX`, left: `${radiusItem.left}PX`}}
          />
        ))
      }
      {
        rectList.map(rectItem => (
          <View className='skeleton-item' style={{width: `${rectItem.width}PX`, height: `${rectItem.height}PX`,
            background: `${itemColor}`, top: `${rectItem.top}PX`, left: `${rectItem.left}PX`}}
          />
        ))
      }
    </View>

到這里,組件已經(jīng)完成了,使用的時(shí)候可以直接引入組件,然后傳入selector就可以了,注意,由于數(shù)據(jù)是動(dòng)態(tài)獲取的,頁面開始為空,這里就需要mock一些假數(shù)據(jù)來填充頁面了~要覆蓋的元素類名必須和組件中的圖形類保持一致~

  <View className='container' style={{fontSize: '20PX'}}>
      {
        showSkeleton && <Skeleton
          selector='skeleton'
          bgColor='pink'
          itemColor='skyblue'
        />
      }
      <View className='skeleton'>
        <View className='userInfo'>
          <Image
            src={userInfo.avatarUrl}
            alt='用戶頭像'
            className='userInfo-avatar skeleton-radius'
          />
          <Text>{userInfo.nickName}</Text>
        </View>
        <View>
          {
            list.map(item => (
              <View className='skeleton-rect' style={{marginBottom: '30PX'}}>{item}</View>
            ))
          }
        </View>
        {/* 自定義組件外層最好沒有元素包裹,否則微信小程序無法識(shí)別,但是H5可以識(shí)別 */}
        <List />
      </View>
    </View>

看到注釋了嗎?使用自定義組件時(shí)一定要注意噢~自定義組件若被元素報(bào)錯(cuò),微信小程序無法識(shí)別到自定義組件內(nèi)的圖形類?。?!

最后要說一下適合使用骨架屏的場(chǎng)景:頁面結(jié)構(gòu)簡(jiǎn)單,元素的寬高固定~若元素寬高不固定的話,你寫的mock假數(shù)據(jù)可能和實(shí)際渲染出來的頁面差距較大,例如瀑布流~

好了,這次的一些收獲就到這里了~大家如果有更好的方法,可以留言交流~最后,附上完整的代碼地址~

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JavaScript 通過模式匹配實(shí)現(xiàn)重載

    JavaScript 通過模式匹配實(shí)現(xiàn)重載

    昨天rank同學(xué)向我提出一個(gè)問題,在實(shí)際應(yīng)用中有些接口需要提供類似于函數(shù)重載的功能,以方便開發(fā)者組織代碼邏輯,簡(jiǎn)化使用者調(diào)用。
    2010-08-08
  • javascript模擬C#格式化字符串

    javascript模擬C#格式化字符串

    學(xué)習(xí)C#的朋友都知道format()這個(gè)方法,本文給大家介紹在javascript中如何實(shí)現(xiàn)此操作,js模擬C#字符串格式化操作,需要的盆友一起學(xué)習(xí)吧
    2015-08-08
  • ES6中Array.copyWithin()函數(shù)的用法實(shí)例詳解

    ES6中Array.copyWithin()函數(shù)的用法實(shí)例詳解

    ES6為Array增加了copyWithin函數(shù),用于操作當(dāng)前數(shù)組自身,用來把某些個(gè)位置的元素復(fù)制并覆蓋到其他位置上去。下面重點(diǎn)給大家介紹ES6中Array.copyWithin()函數(shù)的用法,需要的朋友參考下
    2017-09-09
  • 原生JS實(shí)現(xiàn)《別踩白塊》游戲(兼容IE)

    原生JS實(shí)現(xiàn)《別踩白塊》游戲(兼容IE)

    本文主要介紹了原生JS實(shí)現(xiàn)《別踩白塊》游戲(兼容IE)的示例代碼。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • JS實(shí)現(xiàn)窗口加載時(shí)模擬鼠標(biāo)移動(dòng)的方法

    JS實(shí)現(xiàn)窗口加載時(shí)模擬鼠標(biāo)移動(dòng)的方法

    這篇文章主要介紹了JS實(shí)現(xiàn)窗口加載時(shí)模擬鼠標(biāo)移動(dòng)的方法,涉及javascript鼠標(biāo)事件的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • 關(guān)于 byval 與 byref 的區(qū)別分析總結(jié)

    關(guān)于 byval 與 byref 的區(qū)別分析總結(jié)

    關(guān)于 byval 與 byref 的區(qū)別分析總結(jié)...
    2007-10-10
  • 用js的for循環(huán)獲取radio選中的值

    用js的for循環(huán)獲取radio選中的值

    獲取radio選中值的方法有很多,在本文為大家介紹的是使用for循環(huán)來實(shí)現(xiàn),具體的實(shí)現(xiàn)如下,感興趣的朋友可以參考下
    2013-10-10
  • 使用post方法實(shí)現(xiàn)json往返傳輸數(shù)據(jù)的方法

    使用post方法實(shí)現(xiàn)json往返傳輸數(shù)據(jù)的方法

    今天小編就為大家分享一篇關(guān)于使用post方法實(shí)現(xiàn)json往返傳輸數(shù)據(jù)的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • TypeScript字符串的常用操作總結(jié)

    TypeScript字符串的常用操作總結(jié)

    這篇文章主要為大家詳細(xì)介紹了TypeScript中字符串的常用操作,例如substring、indexOf、slice、replace等,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08
  • JavaScript中操作字符串小結(jié)

    JavaScript中操作字符串小結(jié)

    字符串在javascript中幾乎無處不在,在你處理用戶的輸入數(shù)據(jù)的時(shí)候,在讀取或設(shè)置DOM對(duì)象的屬性時(shí),在操作cookie時(shí),當(dāng)然還有更多...。JavaScript的核心部分提供了一組屬性和方法用于通用的字符串操作,如分割字符串,改變字符串的大小寫,操作子字符串等。
    2015-05-05

最新評(píng)論

蛟河市| 祁门县| 安阳县| 延津县| 兰考县| 柳江县| 宜都市| 全南县| 都昌县| 调兵山市| 长海县| 从江县| 即墨市| 常州市| 尉犁县| 灌阳县| 长武县| 宝山区| 白银市| 青海省| 西华县| 库车县| 敖汉旗| 长葛市| 治多县| 介休市| 长沙县| 确山县| 罗江县| 张家界市| 广灵县| 德兴市| 常熟市| 徐州市| 新晃| 南宫市| 云龙县| 新和县| 黄石市| 东城区| 南木林县|