《微信小程序開發(fā)之自定義tips組件》

目前小程序官方提供的交互反饋組件只有Toast、Loading、Modal這3種线婚。

wx.showToast()

默認有success和loading兩種圖標可選,也可以自定義圖標盆均,設置好duration持續(xù)時間后可自動消失塞弊,或者主動調用wx.hideToast()來關閉。title設置過長會被隱藏部分內容泪姨。

wx.showToast({
  title: '成功',
  icon: 'success',
  duration: 2000
})

wx.showLoading()

loading組件無圖標可選游沿,只有轉圈圈的圖標可用,而且必須調用wx.hideLoading()來關閉驴娃。同樣title設置過長文字會被隱藏奏候。

wx.showLoading({
  title: '加載中',
})
...
wx.hideLoading()

wx.showModal()

Modale組件功能就更豐富了一些〈匠ǎ可以設置title蔗草、content咒彤、confirm和cancel按鈕的內容和顏色,還有各自的回調函數(shù)等等咒精。title和content設置過長也會被完整顯示镶柱。在上一篇的《微信小程序開發(fā)之授權邏輯》中就用到了這種彈窗來讓用戶進行選擇操作。

wx.showModal({
  title: '提示',
  content: '這是一個模態(tài)彈窗',
  success: function(res) {
    if (res.confirm) {
      console.log('用戶點擊確定')
    } else if (res.cancel) {
      console.log('用戶點擊取消')
    }
  }
})

不過在開發(fā)過程中模叙,總有一些提示性的信息需要一個更舒服的提示組件來展示歇拆。比如提示用戶電話號碼輸入錯誤、搜索內容不能為空范咨、無法打開地圖等等故觅。這些提示如果用上述的3種組件來展示,會很難受渠啊,也不優(yōu)美输吏,所以需要我們自己去開發(fā)一個新的提示組件,來滿足我們項目的需求替蛉。

個人提示組件myTopTips

網(wǎng)上其實有很多大廠開發(fā)的微信組件ui贯溅,可以直接集成到項目中,或者只提取出我們需要的部分躲查,以下我使用的topTips組件來源于有贊開源的組件它浅,zanui-weapp,基于其topTips組件镣煮,我將其樣式做了修改姐霍,添加了3種不同的提示類型:success、warning怎静、error邮弹,基本上滿足了我在項目中的使用。
項目中新建一個page蚓聘,命名為mytips腌乡,記得將其引用路徑從app.json中刪除,不然會有很多錯誤夜牡。參看我的另一篇博客《微信小程序開發(fā)之踩坑記錄》与纽。然后編輯mytips.js文件

<!-- mytips.js文件 -->
module.exports = {
  showMyTips(content = '', icon = '', options = {}) {
    let MyTips = this.data.MyTips || {};
    // 如果已經(jīng)有一個計時器在了,就清理掉先
    if (MyTips.timer) {
      clearTimeout(MyTips.timer);
      MyTips.timer = undefined;
    }
    if (typeof options === 'number') {
      options = {
        duration: options
      };
    }
    // options參數(shù)默認參數(shù)擴展
    options = Object.assign({
      duration: 3000
    }, options);
    // 設置定時器塘装,定時關閉topTips
    let timer = setTimeout(() => {
      this.setData({
        'MyTips.show': false,
        'MyTips.timer': undefined
      });
    }, options.duration);
    // 展示出topTips
    this.setData({
      MyTips: {
        show: true,
        content,
        icon,
        options,
        timer
      }
    });
  }
};

接下來編輯wxml和wxss文件

<!-- mytips.wxml文件 -->
 <template name='mytips'>
  <view class="mytips {{ MyTips.show ? 'mytips-show' : '' }}">
    <view class='mytips-box'>
      <text class='mytips-{{MyTips.icon}}'>{{ MyTips.content}}</text>
    </view>
  </view>
</template> 
<!-- mytips.wxss文件 -->
<!-- 圖標使用了base64的背景圖 -->
.mytips{position:fixed;top:10rpx;left:0;right: 0;z-index: 999;display: flex;justify-content: center;-webkit-transform:translateZ(0) translateY(-150%);transition:all .3s ease}
.mytips-show{-webkit-transform:translateZ(0) translateY(0)}
.mytips .mytips-box{padding: 12rpx 28rpx;background: #fff;box-shadow:0 2px 8px rgba(0,0,0,.2);border-radius: 8rpx;height:36rpx;}
.mytips .mytips-box text{padding-left:40rpx; font-size: 24rpx;line-height: 36rpx;height: 36rpx;display: block}
.mytips .mytips-box text.mytips-success{background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAADh0lEQVRIia2WPYhcVRTHf+fc92ZXO4PBRkgsYiOaQIxEEXaJ4LIrCTbpIgQJiYQtLaIgBCstbCyCBsRCbbYJISQbP4gs+AEaggS2iIKspQEVETTz3rvnbzGzyc5zZrNj5hQP3rn3/H/349x7j00vA4CZY14CggiyQd3JlE2BZz+gFPOG7THZLmBbL4rfZfpJ6AfLvhwprtRFQ1klkgB3wFDUSNHjjAYKJTuZwk8a9phhCDHM1tuEVrPHGcs6k2RbA0oC6VGMs25phpGYYeDeN5RXEMcx+9FsEOiDIQJYMPfrZj6jMWDr0UKY+Yy5XwcWaCm0gMyZ2UVgagzOKJvqa82NAu4EX54AqGW+3NPu/3WnoeoY5sUSyCaBMBl3hGTmxVLVMbrT4Erg+FHH900K1njzeiaeA/4CcHyf40eVwMovCsrwNcN2jJMgw8zldFP1du35VKcpKfCbwHYDhH6pPXZ6yj5r+ARgRjdV79RFPlU0hSfsG4Pt0MtTw3ek7LOuFAftHmkmo0r1W3XKrxZVaR2lrx17WgN9QCkOeor0ZNwD0TCyxwdVmV9D0In0lRn724phIkXa68CO/w+DkD6uLR9DMB3leTOe2WT4DzvwYMv5pyz2GizaJqekB+PDypuXcspM1eX5IqdD2ny1HiqGOLPgWmNxzbHHHTvRlliHdb15OcrMVFOeK6M4FBabwQCSA7+1nNtc6dtMwz9F9UqWPt04TwMy+uTWbVhxrszFi1uAAfzqwFrba7C/UPoIoPGYB1bXoULLQkfcxVRTLI0BA1jz7Pmqt/ZKCCcduS933nRQtjgg1AhdDbSQMKZz+V6Ri8NbzXCXkT1fc8t+YVRuJPkbKfzYrdTcrFLzhIlnvXdLnhWcuEuCDE7CwLJfuOvV5jL+LqrnMX1+f90hTO+DHd8yid6+377a6k5DlfLpjff74MjEVBQXy5wOC94dF9YDGlXKp+tOg9mXYGFM5/I7sKEvhvXIjLOErWF/fyvVT8k1UNPsNO/8PKk38Y4ZiuoRKdZg8MVfg1iYLAwg5thw9No1zWVJLwDdCZC6SPPAZxudLaABXJJitxQrxqhUGm5Gv0ZVrEixG7hMS6E9w16QdCMsZmtvFgOt0hcaDeq1BVqtvVkMi1mTbgzt+5/KWwIF2aFOmVL9Ut9iwbA9hu0CHujH/yH6pb78UqS4UltDmRMpAHNoFcL/AsvcwfKVBFWTAAAAAElFTkSuQmCC) no-repeat left center/28rpx 28rpx;} 
.mytips .mytips-box text.mytips-warning{background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAACRElEQVRIib3WT2sVZxTH8c95xpCWFhQVuilo6Z9dVUQQRBClatNFuyt05dK2vom8iuJWXGRtF9WWkGwtFFp1JdJE6KoLS7spGuc+x8Xca9Jrkju3cvODgZnnnPN8zzwzz3lO5JKXqhVJFCLxHPvI4oJqQTiBD3FwGPIXHkm/KW5HtaLFHIKanVMpm4zYFTjwbRZfCx+LzratRrb0IKrrGt9NC/xIuo7zOyAmaTXC1ZoejQPLK67hU+n+a8DgfKZ7uDRuGAdeCm5jfpfJ2kjHo3VGGuzi92bwIz7ZOrh1Sd/Lam1i7vyDAxLhb+yf4F+j+ADrUDzFBlkt7R63mSQaRTO8n6SS1ZINPKUYkFwRTvcEdtrpj90+xdPJFQOKeeyzONUE0yqHjHlKNs7h6AxxIx3Nxrli4PNeX+J1FRj4oihOzXQ5R0oUJwuO7AFupHcLDu8h8J1XS9ts1RQ82UPgnwWP9xD4uKh+mXJbdCdld9XeUYHq16Lx/ZTb4m2cxUm8NVWajVuRN8li3eyrzVpU7xfP0FqcabUpGFi0oTtkItzAzz3D2+BIdAWj7RVR3Y3qpqB4A3NE+Eq/nyAzNZka/Q6pNlpfqnTATa0nl3tMMCesCWtdqhOyYwF/jJ7LmHU50wKe9QBP0r+ZLmN56+B2pe2OcFxY/V+YrkddVh0Tfho371RLH0a6oLqGB1Pg7qm+iXRR+n3bfP7TCA+bvlHnnc+JZtjqp8+EY7pW/9Aw5Imu1b8v/BDVStYuPpNshm/V6upS8AJ22r+NeHvxEQAAAABJRU5ErkJggg==) no-repeat left center/28rpx 28rpx;}
.mytips .mytips-box text.mytips-error{background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAACD0lEQVRIibWWz0tVQRTHP5NCJLoIqk3/RxBEUGKLQCjaFrgICWwhlBKC4KqNv/BHqzZFIChoi1qGC1dCLdpFi+CBYaKIiIqrOafFnZvXaaY743sNfLmPmXPO587c884co/w9yjlTPC4o9AI9wHXgKtBWMd8G1g2sKnwwsFPGMIHYaEBS6LzAoMCGgCZqX2FUoUsisWPAWwI/MkC+fgrcSQX2NQE6JYUndcBHrYJVoANBoMC1VsMq0B4f2Caw6Rl+FVg6A+CjwGdv7lCLbP+zu8GA44J7mRepMAszzud1YP1lCewQ2I8cxUgqtAIbjthYhcsI3K85/1EpAj1vAlaqH4E3CW8/5aDPAmtzsbWA3iPwLfX7iLcLC/MZMBXYQGAvJykcYM7Covs9lOovcITAUYaDWli2J3+n+RxfgYP2UEGvGca4Ag9cCt4I/xq5R6onR7pgAQuTGTs8ROB7JqyaNNMOOpEIbCDwNgEWTX0LUw46nQBcROBBDexVDFaxGXfQmRrgQwQ6Y5lqYVYSU9/CRM1OjxUulu1EKOCy1JS0AHTSxov3WPV6Oiew7Rl80YSyF9A7hU/e3N6p68ldUTfOEDxJCt2xFuPxf4A9rWui+lsIG/Djx9rEboFGE7CGwt2cvhQpOoFhgV8ZoC2BEYGOUFwFjAbqqzfXCdwDbgM3gSue+S6wBqwaWFE4gEibD/wGOu7Ykd5d0vYAAAAASUVORK5CYII=) no-repeat left center/28rpx 28rpx;}

文件編輯完之后急迂,就是頁面的引用了,其實現(xiàn)在來看蹦肴,引入自定義組件還是比較麻煩的一件事僚碎,每個用到的頁面都需單個引入,異常麻煩阴幌。不過我現(xiàn)在也沒有更好的解決方案勺阐,只能先這樣使用了卷中。
假如我們要在index頁面中使用這tips組件,則需要分別在index.wxmlindex.js中引入該組件的內容渊抽,樣式文件mytips.wxss直接放到了app.wxss中進行引入蟆豫,所以該組件的樣式會在所有小程序頁面中覆蓋到,建議取的class類名個性一點懒闷,防止影響頁面樣式十减。

<!-- app.wxss文件中全局引入mytips.wxss樣式 -->
@import "/component/mytips/mytips.wxss";
...
<!-- index.wxml中引入mytips的模板 -->
<import src="path/to/component/mytips/mytips"/>
<template is="mytips" data="{{ MyTips }}"></template>
<view class='container'>
...
<view>
<!-- index.js中需要這樣引入,修改Page({})為如下愤估,其他數(shù)據(jù)不會受到影響 -->
const MyTips = require('path/to/component/mytips/mytips');
Page(Object.assign({}, MyTips, {
  data:{  },
  onLoad: function(){  }
}))

如上引入完畢后帮辟,在頁面中要使用該tips提示時,只需在js方法中

<!-- 第二個參數(shù)可選為:success,warning,error灵疮;第三個參數(shù)為顯示的時間 -->
showTips: function(){
  this.showMyTips('這里填需要提示內容', 'warning', 2000);
}

最后的提示效果如下:

warning.png

error.jpg

還有一個success的樣式?jīng)]有截到(因為這個很少使用到织阅,就不找了),為一個綠色背景的白色對勾圖標震捣。
個人github博客地址:https://liyang0207.github.io/

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市闹炉,隨后出現(xiàn)的幾起案子蒿赢,更是在濱河造成了極大的恐慌,老刑警劉巖渣触,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件羡棵,死亡現(xiàn)場離奇詭異,居然都是意外死亡嗅钻,警方通過查閱死者的電腦和手機皂冰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來养篓,“玉大人秃流,你說我怎么就攤上這事×” “怎么了舶胀?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長碧注。 經(jīng)常有香客問我嚣伐,道長,這世上最難降的妖魔是什么萍丐? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任轩端,我火速辦了婚禮,結果婚禮上逝变,老公的妹妹穿的比我還像新娘基茵。我一直安慰自己奋构,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布耿导。 她就那樣靜靜地躺著声怔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪舱呻。 梳的紋絲不亂的頭發(fā)上醋火,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音箱吕,去河邊找鬼芥驳。 笑死,一個胖子當著我的面吹牛茬高,可吹牛的內容都是我干的兆旬。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼怎栽,長吁一口氣:“原來是場噩夢啊……” “哼丽猬!你這毒婦竟也來了?” 一聲冷哼從身側響起熏瞄,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤脚祟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后强饮,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體由桌,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年邮丰,在試婚紗的時候發(fā)現(xiàn)自己被綠了行您。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡剪廉,死狀恐怖娃循,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情妈经,我是刑警寧澤淮野,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站吹泡,受9級特大地震影響骤星,放射性物質發(fā)生泄漏。R本人自食惡果不足惜爆哑,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一洞难、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧揭朝,春花似錦队贱、人聲如沸色冀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锋恬。三九已至,卻和暖如春编丘,著一層夾襖步出監(jiān)牢的瞬間与学,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工嘉抓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留索守,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓抑片,卻偏偏與公主長得像卵佛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子敞斋,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容