亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 課堂 > 小程序 > 正文

微信小程序自定義select下拉選項框組件的實現代碼

2020-03-21 16:11:20
字體:
來源:轉載
供稿:網友

知識點:組件,animation,獲取當前點擊元素的索引與內容

微信小程序中沒有select下拉選項框,所以只有自定義。自定義的話,可以選擇模板的方式,也可以選擇組件的方式來創建。

這次我選擇了組件,這樣只需引入組件和添加數據,其它的不用管,就能實現多個地方重復使用了。

第一步:創建組件所需的文件

我喜歡把共用的內容都放在和pages文件同級的地方,所以有了下面的目錄結構

微信小程序,select,下拉選項框,代碼

(1) 先創建一個自定義名字的文件夾,例如我上面的Componet

(2) 再創建一個select文件夾,然后:右鍵這個文件夾,新建下面的這個Component。然后輸入需要創建的名稱,我這里為了方便就取了select的名字。然后就會自動創建4個文件,js、json、wxml、wxss。

微信小程序,select,下拉選項框,代碼

第二步:開始配置組件

注意:如果通過第一步創建的可直接跳過第二步。

(1) 通過第一步創建的組件的文件夾中,已經自動配置好了。只需在引入組件的時候,在引入組件的頁面的json文件中配置組件的名稱和組件的位置。

(2) 如果自己手動創建組件的js、json、wxml、wxss這個文件,那么需要在json文件中填入 "component": true 表示自定義組件聲明。js文件中也需要寫成這種格式:

Component({ properties: {  // 這里定義了innerText屬性,屬性值可以在組件使用時指定  innerText: {   type: String,   value: 'default value',  } }, data: {  // 這里是一些組件內部數據  someData: {} }, methods: {  // 這里是一個自定義方法  customMethod: function(){} }})

第三步:自定義組件樣式及js。

注意:這里可以在 app.json 的 pages 中把組件所在的頁面放到第一位,這樣就能在組件的頁面編寫代碼了,比如我上面的目錄結構:就需要寫成 "Componet/select/select", 后面再是其它的頁面。這樣方便得多。

1. 組件的wxml

<view class='com-selectBox'>  <view class='com-sContent' bindtap='selectToggle'>    <view class='com-sTxt'>{{nowText}}</view>    <image src='../../public/img/local/down.png' class='com-sImg' animation="{{animationData}}"></image>  </view>  <view class='com-sList' wx:if="{{selectShow}}">    <view wx:for="{{propArray}}" data-index="{{index}}" wx:key='' class='com-sItem' bindtap='setText'>{{item.text}}</view>  </view></view>

(1)  animation="{{animationData}}" 這個是下箭頭的動畫效果

(2)  data-index="{{index}}" 這個是當前元素被點擊時的索引

(3) selectToggle是模仿下拉選項框隱藏和顯示的事件。

(4) setText是模仿下拉選項框選擇子項之后,設置內容的事件。

(5) selectShow是表示option選項顯示與否

2. 組件的wxss

.com-selectBox{  width: 200px;}.com-sContent{  border: 1px solid #e2e2e2;  background: white;  font-size: 16px;  position: relative;  height: 30px;  line-height: 30px;}.com-sImg{  position: absolute;  right: 10px;  top: 11px;  width: 16px;  height: 9px;  transition: all .3s ease;}.com-sTxt{  overflow: hidden;  text-overflow: ellipsis;  white-space: nowrap;  padding:0 20px 0 6px;  font-size: 14px;}.com-sList{  background: white;  width: inherit;  position: absolute;  border: 1px solid #e2e2e2;  border-top: none;  box-sizing: border-box;  z-index: 3;  max-height: 120px;  overflow: auto;}.com-sItem{  height: 30px;  line-height: 30px;  border-top: 1px solid #e2e2e2;  padding: 0 6px;  text-align: left;  overflow: hidden;  text-overflow: ellipsis;  white-space: nowrap;  font-size: 14px;}.com-sItem:first-child{  border-top: none;}

 3. 組件的 js

// Componet/Componet.jsComponent({ /**  * 組件的屬性列表  */  properties: {    propArray:{      type:Array,    }  }, /**  * 組件的初始數據  */  data: {    selectShow:false,//初始option不顯示    nowText:"請選擇",//初始內容    animationData:{}//右邊箭頭的動畫  }, /**  * 組件的方法列表  */  methods: {   //option的顯示與否    selectToggle:function(){      var nowShow=this.data.selectShow;//獲取當前option顯示的狀態      //創建動畫      var animation = wx.createAnimation({        timingFunction:"ease"      })      this.animation=animation;      if(nowShow){        animation.rotate(0).step();        this.setData({          animationData: animation.export()        })      }else{        animation.rotate(180).step();                this.setData({          animationData: animation.export()        })      }      this.setData({        selectShow: !nowShow      })    },    //設置內容    setText:function(e){      var nowData = this.properties.propArray;//當前option的數據是引入組件的頁面傳過來的,所以這里獲取數據只有通過this.properties      var nowIdx = e.target.dataset.index;//當前點擊的索引      var nowText = nowData[nowIdx].text;//當前點擊的內容      //再次執行動畫,注意這里一定,一定,一定是this.animation來使用動畫      this.animation.rotate(0).step();      this.setData({        selectShow: false,        nowText:nowText,        animationData: this.animation.export()      })    }  }})

(1) 組件的 properties 屬性是對外屬性,我理解的是可以當做 data 數據來使用,它是一個含有三個屬性的對象,分別是 type 表示屬性類型、 value 表示屬性初始值、 observer 表示屬性值被更改時的響應函數。type 是必填的,其它的可選。如果只有 type,可以寫成:屬性名:type類型。

(2) 組件的 data 和普通頁面的data一樣,是組件的內部數據,和 properties 一同用于組件的模版渲染。

(3) 組件的 method 是專門用于 事件響應函數 和 任意的自定義方法。在這里面獲取數據有兩種方法:一種是獲取data里的數據: this.data.屬性名;一種是獲取 properties 中的屬性值: this.properties.屬性名

(4) 創建animation動畫,作用在通過 true 和 false 切換顯示狀態的內容上沒有過渡、沒有過渡、沒有過渡。

第四步:引入組件,傳入組件所需數據

1. 引入前,需要在引入組件的頁面的json文件中配置,比如我要在 index.wxml 中引入,那么在 index.json 中我就需要配置:

"usingComponents": {  "Select": "/Componet/select/select"}

(1) Select 是你定義的組件的名稱,后面的是組件所在的位置。 /  單斜杠表示根目錄,是絕對路徑。

(2) 如果出現下面這種說沒找到路徑的,一定是自己填寫的路徑不對,認真查找。

微信小程序,select,下拉選項框,代碼

2. 配置好后,就可以引入組件。

<Select prop-array='{{selectArray}}'></Select>

(1) prop-array 是我自定義的屬性名,這個是和組件所在的 js 中properties中的屬性是對應的。在 properties 定義的屬性中,屬性名采用駝峰寫法(例如:propArray);在引入組件的 wxml 中,指定屬性值時則對應使用連字符寫法(例如:prop-array="...")。

3. 最后就是傳入數據了。在引入組件的js的data中,添加:

selectArray: [{  "id": "10",  "text": "會計類"}, {  "id": "21",  "text": "工程類"}]

 最終結果:

微信小程序,select,下拉選項框,代碼

 如果引入兩個相同的組件,傳入的數據也相同:

<Select prop-array='{{selectArray}}'></Select><Select prop-array='{{selectArray}}'></Select>

總結

以上所述是小編給大家介紹的微信小程序自定義select下拉選項框組件的實現代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩在线播放av| 成人免费淫片视频软件| 欧美性在线观看| 国产精品美女呻吟| 欧美国产精品va在线观看| 欧美日韩免费观看中文| 人人做人人澡人人爽欧美| 国产欧美精品日韩精品| 欧美中文字幕在线| 成人国产精品色哟哟| 91最新在线免费观看| 国产精品久久久久久久久免费看| 国产91精品久| 少妇av一区二区三区| 欧美一级片免费在线| 色婷婷av一区二区三区在线观看| 欧美黑人又粗大| 热re91久久精品国99热蜜臀| 国模精品系列视频| 亚洲精品免费网站| 色先锋久久影院av| 亚洲色图欧美制服丝袜另类第一页| 久久久久久有精品国产| 韩国福利视频一区| 亚洲欧美激情四射在线日| 亚洲精品电影网站| 国产视频精品一区二区三区| 日韩少妇与小伙激情| 97在线免费观看| 国产欧美最新羞羞视频在线观看| 欧美精品一区在线播放| 97久久精品人搡人人玩| 精品国偷自产在线视频99| 在线观看亚洲区| 国产精品久久久久久中文字| 日韩欧美有码在线| 久久久久国产视频| 久久人人爽人人爽人人片亚洲| 中文字幕一区二区精品| 色七七影院综合| 亚洲精品视频在线播放| 国产视频精品久久久| 欧美成年人在线观看| 精品国产美女在线| 国产专区精品视频| 永久免费毛片在线播放不卡| 亚洲三级av在线| 日韩中文字幕视频在线| 狠狠色香婷婷久久亚洲精品| 疯狂做受xxxx欧美肥白少妇| 一区二区日韩精品| 操日韩av在线电影| 亚洲欧美中文字幕在线一区| 亚洲free性xxxx护士hd| xxav国产精品美女主播| 日韩激情在线视频| 亚洲自拍av在线| 亚洲欧美中文日韩在线| 日韩成人av网| 欧美电影在线播放| 国产va免费精品高清在线| 国产精品高潮视频| 亚洲有声小说3d| 国产精品久久久久aaaa九色| 亚洲a在线观看| 欧美孕妇孕交黑巨大网站| 国产亚洲欧洲黄色| 亚洲第一天堂无码专区| 久久夜色精品亚洲噜噜国产mv| 欧美精品在线视频观看| 亚洲变态欧美另类捆绑| 最近2019中文字幕大全第二页| 国产精品久久久久久超碰| 一本大道久久加勒比香蕉| 在线激情影院一区| 亚洲人成网站免费播放| 亚洲热线99精品视频| 一区二区三区动漫| 精品国模在线视频| 亚洲国产毛片完整版| 欧美激情小视频| 欧美猛男性生活免费| 欧美巨猛xxxx猛交黑人97人| 久久久精品999| 亚洲福利视频免费观看| 在线一区二区日韩| 亚洲色图av在线| 91精品国产99久久久久久| 97**国产露脸精品国产| 日韩精品在线看| 91久久精品国产91久久| 亚洲成av人片在线观看香蕉| 日韩亚洲精品电影| 热99精品只有里视频精品| 一区二区三区日韩在线| 亚洲欧洲第一视频| 精品高清美女精品国产区| 久久艳片www.17c.com| 中文字幕日韩精品有码视频| 日韩精品免费在线视频观看| 国产精品久久婷婷六月丁香| 91av在线国产| 欧美福利视频在线| 国产精品综合网站| 2018日韩中文字幕| 日本19禁啪啪免费观看www| 国产精品午夜国产小视频| 91久久精品一区| 久久在精品线影院精品国产| 国产精品亚洲网站| 蜜臀久久99精品久久久无需会员| 日韩午夜在线视频| 尤物精品国产第一福利三区| 国产高清在线不卡| 国产精品白嫩初高中害羞小美女| 国产一区私人高清影院| 欧美大秀在线观看| 成人午夜黄色影院| 在线中文字幕日韩| 91久久国产精品| 一区二区欧美在线| 亚洲成人教育av| 欧美综合国产精品久久丁香| 深夜成人在线观看| 成人激情视频在线播放| 成人a免费视频| 中文字幕日韩专区| 这里只有精品丝袜| 成人免费淫片aa视频免费| 免费av一区二区| 欧美大学生性色视频| 亚洲影视中文字幕| 亚洲三级 欧美三级| 国产日韩换脸av一区在线观看| 国产欧美精品一区二区三区-老狼| 亚洲欧美精品伊人久久| 久久噜噜噜精品国产亚洲综合| 亚洲成人精品久久久| 亚洲第一福利网站| 国产欧美精品va在线观看| 久久精品99无色码中文字幕| 欧美成人免费va影院高清| 欧美高清在线视频观看不卡| 亚洲一区免费网站| 亚洲一区二区中文| 日韩高清免费在线| 欧美国产日韩中文字幕在线| 成人在线一区二区| 91在线直播亚洲| 91精品国产91久久久| 日韩在线免费视频| 亚洲天堂成人在线视频| 国产精品91一区| 亚洲女人被黑人巨大进入| 欧美性猛交xxxx免费看久久久| 热re91久久精品国99热蜜臀| 九九热这里只有在线精品视| 亚洲黄色有码视频| 成人h视频在线| 曰本色欧美视频在线| 久久免费观看视频| 欧美高跟鞋交xxxxhd| 视频一区视频二区国产精品| 国产精品夜色7777狼人|