WeChatウィジェットimageのロードに成功する前にデフォルトのビットマップが表示されます
4660 ワード
WeChatウィジェットでは、
ユーザ体験度を向上させるために、空白を表示するのではなく、画像のロードが完了する前に、ローカルのデフォルトの占有画像を事前に表示することができます.
ウィジェットの
実装の原理
WeChatウィジェットの
属性名
を選択します.
説明
binderror
HandleEvent
エラーが発生した場合、AppServiceにパブリッシュされるイベント名、イベントオブジェクトevent.detail={errMsg:'something wrong'}
bindload
HandleEvent
画像の読み込みが完了すると、AppServiceにパブリッシュされるイベント名、イベントオブジェクトevent.detail={height:'ピクチャ高さpx'、width:'ピクチャ幅px'}
この2つのイベントを実現できます.は を表示する.は
具体的な実装
新しいウィジェットプロジェクト
WeChat開発者ツールを開き、新しいウィジェットプロジェクト
カスタムコンポーネント
実際の開発では、複数の場所で
新規
現在のプロジェクトのディレクトリ構造:
初期化時には、
その後、
以下にすべてのコードを貼り付けます
image-loader.js
image-loader.jsong
image-loader.wxml
image-loader.wxss
注意:ここでは簡略化のために
テスト
最後に、プラグイン を有効にする
index.jsonテストコード: index.wxml
ソースコード
完全なコンポーネントのソースコードは私は
Image
コンポーネントを使用して画像を表示します.画像ソースはローカルリソースでもサーバリソースでも構いません.しかし、コンテンツのダイナミックな表示のために、image
のピクチャソースとしてサーバリソースを使用することがほとんどです.サーバリソースである以上、ネットワークの速度に依存する必要があり、ネットワークが遅い場合、image
でピクチャをロードするプロセスが非常に遅い可能性があるため、ピクチャをロードする過程で、処理をしなければ、ピクチャのロードが完了するまで空白の状況が発生し、これは非常に悪いユーザー体験である.ユーザ体験度を向上させるために、空白を表示するのではなく、画像のロードが完了する前に、ローカルのデフォルトの占有画像を事前に表示することができます.
ウィジェットの
image
コンポーネントはデフォルトの画像の属性を提供していません.私たち自身がこの機能を実現する必要があります.実装の原理
WeChatウィジェットの
image
コンポーネントには、次の2つのプロパティがあります.属性名
を選択します.
説明
binderror
HandleEvent
エラーが発生した場合、AppServiceにパブリッシュされるイベント名、イベントオブジェクトevent.detail={errMsg:'something wrong'}
bindload
HandleEvent
画像の読み込みが完了すると、AppServiceにパブリッシュされるイベント名、イベントオブジェクトevent.detail={height:'ピクチャ高さpx'、width:'ピクチャ幅px'}
この2つのイベントを実現できます.
bindload
を実現し、画像がロード完了していない場合、ビットマップを表示し、ロードが完了すると、すぐにビットマップを非表示にし、真の業務画像binderror
を実現し、ピクチャのロードエラー時にビットマップを表示する.具体的な実装
新しいウィジェットプロジェクト
WeChat開発者ツールを開き、新しいウィジェットプロジェクト
Demo
を作成し、不要なコードを削除します.カスタムコンポーネント
実際の開発では、複数の場所で
image
コンポーネントが使用され、使用する場所ごとに1回のビットマップ機能を実現すれば、コード量を増やすだけでなく、メンテナンス量も増加するので、これらの論理をカスタムコンポーネントにカプセル化することができ、ここではimage-loader
と名付けられ、その後、どの場所でも使用することができます.image-loader
の代わりにimage
を直接使えばいいです.新規
image-loader
WeChat開発ツールを使用してカスタムコンポーネントを新規作成し、プロジェクトのディレクトリcomponents
に配置します.次に、プロジェクトのimages
ディレクトリの下に配置された占拠図を見つけ、完了した後現在のプロジェクトのディレクトリ構造:
$ tree
.
├── app.js
├── app.json
├── app.wxss
├── components
│ ├── image-loader.js
│ ├── image-loader.json
│ ├── image-loader.wxml
│ └── image-loader.wxss
├── images
│ └── placeholder800x400.png
├── pages
│ └── index
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
└── project.config.json
image-loader
の実装image-loader
には、2つのimage
、1つのimage
がデフォルトのピクチャをロードし、1つのimage
が真のピクチャをロードします.説明の便宜上、この2つのimage
をimage-default
とimage-real
と呼ぶ初期化時には、
image-default
ピクチャが表示されます.また、image-real
も一緒にロードされますが、css
プロパティ制御によってimage-real
は表示されません..before-load {
width: 0;
height: 0;
opacity: 0;
}
その後、
image-real
にbindload
およびbinderror
を実装し、ロードが完了して成功した後、image-default
のwidth
およびheight
を空にすると、image-default
は表示されなくなり、image-real
のwidhth
およびheight
を元の値に戻し、opcity
を1
に設定する.以下にすべてのコードを貼り付けます
image-loader.js
/**
*
*/
Component({
properties: {
//
defaultImage: String,
//
originalImage: String,
width: String,
height: String,
// mode, Image mode
mode: String
},
data: {
finishLoadFlag: false
},
methods: {
finishLoad: function (e) {
this.setData({
finishLoadFlag: true
})
}
}
})
image-loader.jsong
{
"component": true,
"usingComponents": {}
}
image-loader.wxml
image-loader.wxss
.before-load {
width: 0;
height: 0;
opacity: 0;
}
注意:ここでは簡略化のために
image
のbindload
のみが実現され、binderror
は実現されていません.テスト
最後に、
pages/index
ページのコードを修正してテストします.index.json
{
"usingComponents": {
"image-loader": "/components/image-loader"
}
}
ソースコード
完全なコンポーネントのソースコードは私は
Github
の上に置いて、みんなは見ることができます:wx-mini-image-preload