小程序做個菜單組件,數(shù)據(jù)由外部灌入。實現(xiàn)菜單彈出的阻尼動畫效果
實現(xiàn)
代碼結構如下:
menu.js
var Logger = require('../utils/Logger.js')
Component({
properties: {
menu_list: Array,
},
data: {
showMenu: true
},
attached: function() {
this.setData({
menu_list: this.data.menu_list
})
},
methods: {
// 點擊新建按鈕
onCreateTap: function() {
this.setData({
showMenu: !this.data.showMenu
})
},
// 點擊展開的單個按鈕
onItemTap: function(event) {
var item = event.currentTarget.dataset.item;
// 微信小程序中是通過triggerEvent來給父組件傳遞信息的
//triggerEvent:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/events.html
var menuEventDetail = {
item
}
this.triggerEvent('handleMenu', menuEventDetail)
//menuEventOption是觸發(fā)事件的選項,包括設置事件是否冒泡之類的,不過這里默認是不冒泡的
// var menuEventOption = {
//
// }
// this.triggerEvent('handleMenu', menuEventDetail, menuEventOption)
}
}
})
參考文檔中Component的生命周期:
設置數(shù)據(jù)選擇在attached
方法內(nèi)。
查看文檔
this.triggerEvent(eventName, eventDetail, eventOption)
還有個關鍵的地方:(其實最開始創(chuàng)建component的時候就自動生成了)全手打的話,要記得在menu.json里添加自定義組件的聲明:
{
"component": true,
"usingComponents": {}
}
menu.wxml
菜單個數(shù)根據(jù)傳入的menu_list
來,菜單顯隱由showMenu
控制
<view class='container'>
<view hidden="{{showMenu?false:true}}" class='sub-btn-container'>
<block wx:for='{{menu_list}}' wx:key='index'>
<view class='sub-btns' catchtap='onItemTap' data-item='{{item}}'>
<image class='btn' src='{{item.src}}' />
<text class='sub-btn__name'>{{item.name}}</text>
</view>
</block>
</view>
<image catchtap='onCreateTap' class='btn' src='/resources/imgs/ic_create.png' />
</view>
菜單的顯示內(nèi)容,由外部datas/menu-data.js控制
var menu_list = [{
id: 1,
name: '帖子',
src: '/resources/imgs/ic_create_1.png'
}, {
id: 2,
name: '資訊',
src: '/resources/imgs/ic_create_2.png'
}, {
id: 3,
name: '照片',
src: '/resources/imgs/ic_create_3.png'
}]
module.exports = {
menu_list: menu_list
}
數(shù)據(jù)在使用的地方引入
home.js
var menuData = require('../../datas/menu-data.js')
var Logger = require('../../utils/Logger.js')
Page({
onLoad: function() {
this.setData({
menu_list: menuData.menu_list,
})
},
onReady: function() {
this.menu = this.selectComponent("#menu");
},
handleMenu: function(event) {
//這里的detail就是在自定義組件中定義的menuEventDetail
var item = event.detail.item;
Logger.v("item", item);
wx.showToast({
title: '新建' + item.name,
})
}
})
home.wxml
<view>
<!-- handleMenu為父組件和自定義組件之間通信的橋梁 -->
<menu class='menu' menu_list='{{menu_list}}' bind:handleMenu='handleMenu' />
<text class='text'>HOME</text>
</view>
還有個關鍵的地方:使用的地方,這里是home,要記得在home.json中使用該組件(引號前面的相當于別名,起啥名,wxml里就用啥名)
home.json
{
"usingComponents": {
"menu": "/components/menu"
}
}
小程序工具提供多類型商城/門店小程序制作,可視化編輯 1秒生成5步上線。通過拖拽、拼接模塊布局小程序商城頁面,所看即所得,只需要美工就能做出精美商城。更多小程序商店請查看:小程序商店
KESION 科汛軟件
KESION 科汛軟件是國內(nèi)領先的在線教育軟件及私域社交電商軟件服務提供商,長期專注于為企業(yè)提供在線教育軟件及社交電商SaaS平臺解決方案。
公司核心產(chǎn)品云開店SaaS社交電商服務平臺、在線教育SaaS服務平臺、教育企業(yè)數(shù)字化SaaS云平臺、企微營銷助手、私有化獨立部署品牌網(wǎng)校和在線教育咨詢等。KESION 不斷通過技術創(chuàng)新,提供產(chǎn)品和服務,助力企業(yè)向數(shù)字化轉型,通過科技驅(qū)動商業(yè)革新,讓商業(yè)變得更智慧!
做小程序開發(fā)發(fā)現(xiàn),頁面分享出去后,用戶通過分享進去的頁面很難找到返首頁的情況。(微信官方操作是點擊右上角三個點,在手機下方顯示返回首頁)。民間很多方案是自己在頁面加...
很多情況我們在開發(fā)小程序時,需要調(diào)用騰訊地圖的數(shù)據(jù),來作為地圖導航。那么該如何實現(xiàn)?...