微信小程式開發初體驗
微信小程式開發,一些業務實現直接去查官方開發文件去找合適的元件和支援就好了,本篇也就是根據第一次接觸到的業務羅列了一些知識,作為熟悉過程。
0、image標籤下的圖片微信預設給出了高寬,為長方形。
1、只有被text標籤包圍的文字才能被長摁選中。
2、關於檔案之間的引用
"pages":[
"pages/welcome/welcome"
]
此處註冊了welcome路徑下的所有welcome的檔案(即微信小程式標配四個檔案),檔案之間無需再彼此顯示引用即可使用。
3、關於樣式寫在wxml中通過style方式(動態改變)還是寫在wxss中的class樣式(靜態不變)中,是根據是靜態不變的樣式還是需要動態改變的樣式。
注意:style中的樣式每次編譯都會去解析這樣的一個樣式,如果靜態樣式也放到style中執行效率會比較低。
4、flex彈性佈局,以及flex配套的屬性,用於垂直和居中
.container{
display: flex;
flex-direction: column;
align-items: center;
}
5、全域性的統一的樣式可以放在app.wxss中,可以用text這種標籤去確定樣式,表明text這種文字文字在小程式中都帶有這種樣式,除非是本頁的樣式檔案中重新定義了該屬性。
text{
font-family: Microsoft Yahei;
}
6、文字垂直居中一般設定文字行高為容器行高即可:
.moto{
font-size: 22rpx;
font-weight: bold;
line-height: 80rpx;//容器行高
}
7、在給整個頁面設定背景時要注意:
<view class="container">
<image class="user-avatar" src='/images/avatar.jpeg'></image>
<text class="user-name">Hello,九月</text>
<view class="moto-container">
<text class="moto">開啟小程式之旅</text>
</view>
</view>
上面是我們寫的佈局,但是其實在小程式中,預設是在外面還有一層page標籤,這才是真正的最外層佈局。window中可以設定視窗導航欄的背景等關於視窗的引數。
8、text標籤巢狀以及text支援轉義字元:(hello是紅色,並且e後面是換行)
<text class="user-name"><text style='color:red'>He\nllo</text>,九月</text>
9、微信小程式的滑塊元件swiper
<swiper style='width:100%;height:300rpx'>
<swiper-item>
<image src='/images/swipe_item.jpg' style='width:100%;height:100%'></image>
</swiper-item>
<swiper-item><icon type='sucess'></icon></swiper-item>
<swiper-item>hahah</swiper-item>
</swiper>
swiper-item的寬高由swiper來決定,item內部的元素可以根據業務自行定義,寬高需要自行定義。
上述樣式同樣可以放入wxss樣式中,因為這個輪播滑塊的元件不是那麼頻繁使用,應該在本頁面只使用這一次,所以通過給標籤設定樣式即可:
swiper{
width:100%;
height:300rpx
}
swiper image{
width:100%;
height:100%
}
10、對於不同的頁面導航欄需要不同的樣式,可以在子頁面目錄下單獨配置json檔案中關於當前頁面的樣式,但是子頁面下的json檔案中只能對window設定,所以微信小程式直接忽略掉了window的字首,直接設定window內部屬性就好。
-
專案的json配置(還可以更多,此處主要說明差別)
{
"pages":[
"pages/posts/posts",
"pages/welcome/welcome"
],
"window":{
"navigationBarBackgroundColor": "#b3d4db"
}
}
-
子頁面的json配置
{
"navigationBarBackgroundColor": "#405f80"
}
11、關於小程式中的布林值
swiper indicator-dots='true' autoplay='true' interval='2000'
小程式中的布林值設定的時候在引號之間,設定字串true或者false本身並不起作用,只是因為設定true時解析時為空,預設將該屬性設定為true,那麼此時設定false則不會生效,仍然解析為空,設定此屬性預設值true,那麼怎麼設定布林值呢?其實正確的姿勢應該和繫結資料一樣{{false}}(雙大括號內寫值)
12、小程式中的資料繫結
-
首先資料格式如下:
onLoad:function(options){
console.log("onLoad");
var post_content1={
date:"2018-10-12",
title:"正是秋高雲淡時",
post_img:"/images/item2.jpg",
content:"1900年初,日本人蜂擁而至,並在大邱市中心形成集中居住地,隨之而來的娼妓也在此聚集。2004年韓國製定《性買賣防止特別法》後,據統計最多時有350餘名性工作者雲集大邱紅燈區,但現在登記在冊的不足百人,還有不少在非法營業。隨著城市發展和地鐵陸續開通,在大邱紅燈區周邊建起多個大型住宅小區,入住居民的投訴也接連不斷,這讓歷經百年風雨的紅燈區面臨生存危機。",
view_num:"112",
collect_num:"96",
author_img:"/images/avatar.jpeg"
}
this.setData(post_content1);
}
-
繫結時的寫法:
<view class='post-container'>
<view class='post-author-date'>
<image class="post-author" src='{{imgs.author_img}}'></image>
<text class="post-date">{{date}}</text>
</view>
<text class='post-title'>{{title}}</text>
<image class="post-image" src='{{imgs.post_img}}'></image>
<text class='post-content'>{{content}}</text>
<view class="post-like">
<image class="post-like-image" src='/images/avatar1.jpg'></image>
<text class="post-like-font">{{view_num}}</text>
<image class="post-like-image" src='/images/avatar1.jpg'></image>
<text class="post-like-font">{{collect_num}}</text>
</view>
</view>
注意其中的imgs是又套了一層,繫結資料時也略有不同。
設定陣列資料:
var post_content = [
{
date: "2018-10-12",
title: "正是秋高雲淡時",
post_img: "/images/item2.jpg",
author_img: "/images/avatar.jpeg",
content: "1900年初,日本人蜂擁而至,並在大邱市中心形成集中居住地,隨之而來的娼妓也在此聚集。2004年韓國製定《性買賣防止特別法》後,據統計最多時有350餘名性工作者雲集大邱紅燈區,但現在登記在冊的不足百人,還有不少在非法營業。隨著城市發展和地鐵陸續開通,在大邱紅燈區周邊建起多個大型住宅小區,入住居民的投訴也接連不斷,這讓歷經百年風雨的紅燈區面臨生存危機。",
view_num: "112",
collect_num: "96"
},
{
date: "2018-10-12",
title: "正是秋高雲淡時",
post_img: "/images/item2.jpg",
author_img: "/images/avatar.jpeg",
content: "1900年初,日本人蜂擁而至,並在大邱市中心形成集中居住地,隨之而來的娼妓也在此聚集。2004年韓國製定《性買賣防止特別法》後,據統計最多時有350餘名性工作者雲集大邱紅燈區,但現在登記在冊的不足百人,還有不少在非法營業。隨著城市發展和地鐵陸續開通,在大邱紅燈區周邊建起多個大型住宅小區,入住居民的投訴也接連不斷,這讓歷經百年風雨的紅燈區面臨生存危機。",
view_num: "112",
collect_num: "96"
}
]
var post_content1={
date:"2018-10-12",
title:"正是秋高雲淡時",
post_img: "/images/item2.jpg",
author_img: "/images/avatar.jpeg",
content:"1900年初,日本人蜂擁而至,並在大邱市中心形成集中居住地,隨之而來的娼妓也在此聚集。2004年韓國製定《性買賣防止特別法》後,據統計最多時有350餘名性工作者雲集大邱紅燈區,但現在登記在冊的不足百人,還有不少在非法營業。隨著城市發展和地鐵陸續開通,在大邱紅燈區周邊建起多個大型住宅小區,入住居民的投訴也接連不斷,這讓歷經百年風雨的紅燈區面臨生存危機。",
view_num:"112",
collect_num:"96"
}
this.setData({
post_key:post_content
});
注意陣列設定setData的方式與單個資料略有不同,主要還是涉及到一個資料平移到data中的格式問題。
<block wx:for="{{post_key}}" wx:for-item="item">
<view class='post-container'>
<view class='post-author-date'>
<image class="post-author" src='{{item.author_img}}'></image>
<text class="post-date">{{item.date}} {{idx}}</text>
</view>
<text class='post-title'>{{item.title}} {{index}}</text>
<image class="post-image" src='{{item.post_img}}'></image>
<text class='post-content'>{{item.content}}</text>
<view class="post-like">
<image class="post-like-image" src='/images/avatar1.jpg'></image>
<text class="post-like-font">{{item.view_num}}</text>
<image class="post-like-image" src='/images/avatar1.jpg'></image>
<text class="post-like-font">{{item.collect_num}}</text>
</view>
</view>
</block>
資料迴圈通過wx:for進行迴圈,每個item其實是預設為item的,不寫也可以,index預設是index,但是也可以通過wx:for-index=""的方式更改index索引的標識。
13、小程式中的事件繫結:
bind和catch,bind繫結方法不能阻止冒泡事件,而catch則可以阻止冒泡事件。
14、小程式的一個資料繫結的事情:
var local_database = [
{
date: "2018-10-12",
title: "正是秋高雲淡時",
imgSrc: "/images/item2.jpg",
avatar: "/images/avatar.jpeg",
content: "1900年初,日本人蜂擁而至,並在大邱市中心形成集中居住地,隨之而來的娼妓也在此聚集。2004年韓國製定《性買賣防止特別法》後,據統計最多時有350餘名性工作者雲集大邱紅燈區,但現在登記在冊的不足百人,還有不少在非法營業。隨著城市發展和地鐵陸續開通,在大邱紅燈區周邊建起多個大型住宅小區,入住居民的投訴也接連不斷,這讓歷經百年風雨的紅燈區面臨生存危機。",
reading: "112",
collection: "96"
},
{
date: "2018-10-12",
title: "正是秋高雲淡時",
imgSrc: "/images/item2.jpg",
avatar: "/images/avatar.jpeg",
content: "1900年初,日本人蜂擁而至,並在大邱市中心形成集中居住地,隨之而來的娼妓也在此聚集。2004年韓國製定《性買賣防止特別法》後,據統計最多時有350餘名性工作者雲集大邱紅燈區,但現在登記在冊的不足百人,還有不少在非法營業。隨著城市發展和地鐵陸續開通,在大邱紅燈區周邊建起多個大型住宅小區,入住居民的投訴也接連不斷,這讓歷經百年風雨的紅燈區面臨生存危機。",
reading: "112",
collection: "96"
},
{
date: "2018-10-12",
title: "正是秋高雲淡時",
imgSrc: "/images/item2.jpg",
avatar: "/images/avatar.jpeg",
content: "1900年初,日本人蜂擁而至,並在大邱市中心形成集中居住地,隨之而來的娼妓也在此聚集。2004年韓國製定《性買賣防止特別法》後,據統計最多時有350餘名性工作者雲集大邱紅燈區,但現在登記在冊的不足百人,還有不少在非法營業。隨著城市發展和地鐵陸續開通,在大邱紅燈區周邊建起多個大型住宅小區,入住居民的投訴也接連不斷,這讓歷經百年風雨的紅燈區面臨生存危機。",
reading: "112",
collection: "96"
},
{
date: "2018-10-12",
title: "正是秋高雲淡時",
imgSrc: "/images/item2.jpg",
avatar: "/images/avatar.jpeg",
content: "1900年初,日本人蜂擁而至,並在大邱市中心形成集中居住地,隨之而來的娼妓也在此聚集。2004年韓國製定《性買賣防止特別法》後,據統計最多時有350餘名性工作者雲集大邱紅燈區,但現在登記在冊的不足百人,還有不少在非法營業。隨著城市發展和地鐵陸續開通,在大邱紅燈區周邊建起多個大型住宅小區,入住居民的投訴也接連不斷,這讓歷經百年風雨的紅燈區面臨生存危機。",
reading: "112",
collection: "96"
},
{
date: "2018-10-12",
title: "正是秋高雲淡時",
imgSrc: "/images/item2.jpg",
avatar: "/images/avatar.jpeg",
content: "1900年初,日本人蜂擁而至,並在大邱市中心形成集中居住地,隨之而來的娼妓也在此聚集。2004年韓國製定《性買賣防止特別法》後,據統計最多時有350餘名性工作者雲集大邱紅燈區,但現在登記在冊的不足百人,還有不少在非法營業。隨著城市發展和地鐵陸續開通,在大邱紅燈區周邊建起多個大型住宅小區,入住居民的投訴也接連不斷,這讓歷經百年風雨的紅燈區面臨生存危機。",
reading: "112",
collection: "96"
}
]
module.exports = {
postList: local_database
}
var postsData = require('../../data/posts-data.js');
Page({
data:{},
onLoad:function(options){
console.log("onLoad");
var post_content = [
{
date: "2018-10-12",
title: "正是秋高雲淡時",
imgSrc: "/images/item2.jpg",
avatar: "/images/avatar.jpeg",
content: "1900年初,日本人蜂擁而至,並在大邱市中心形成集中居住地,隨之而來的娼妓也在此聚集。2004年韓國製定《性買賣防止特別法》後,據統計最多時有350餘名性工作者雲集大邱紅燈區,但現在登記在冊的不足百人,還有不少在非法營業。隨著城市發展和地鐵陸續開通,在大邱紅燈區周邊建起多個大型住宅小區,入住居民的投訴也接連不斷,這讓歷經百年風雨的紅燈區面臨生存危機。",
reading: "112",
collection: "96"
},
{
date: "2018-10-12",
title: "正是秋高雲淡時",
imgSrc: "/images/item2.jpg",
avatar: "/images/avatar.jpeg",
content: "1900年初,日本人蜂擁而至,並在大邱市中心形成集中居住地,隨之而來的娼妓也在此聚集。2004年韓國製定《性買賣防止特別法》後,據統計最多時有350餘名性工作者雲集大邱紅燈區,但現在登記在冊的不足百人,還有不少在非法營業。隨著城市發展和地鐵陸續開通,在大邱紅燈區周邊建起多個大型住宅小區,入住居民的投訴也接連不斷,這讓歷經百年風雨的紅燈區面臨生存危機。",
reading: "112",
collection: "96"
}
]
var post_content1={
date:"2018-10-12",
title:"正是秋高雲淡時",
post_img: "/images/item2.jpg",
author_img: "/images/avatar.jpeg",
content:"1900年初,日本人蜂擁而至,並在大邱市中心形成集中居住地,隨之而來的娼妓也在此聚集。2004年韓國製定《性買賣防止特別法》後,據統計最多時有350餘名性工作者雲集大邱紅燈區,但現在登記在冊的不足百人,還有不少在非法營業。隨著城市發展和地鐵陸續開通,在大邱紅燈區周邊建起多個大型住宅小區,入住居民的投訴也接連不斷,這讓歷經百年風雨的紅燈區面臨生存危機。",
view_num:"112",
collect_num:"96"
}
this.data.post_key = postsData.postList;
// this.setData({
// post_key:postsData.postList
// });
}
})
小程式總會讀取data物件來做資料繫結,這個動作我們稱為動作A;而這個動作A的執行是在onLoad事件執行之後發生的,那麼我們在onLoad事件中直接給data物件中進行初始化賦值是可以的。那麼setData是否還有存在的必要呢?答案是如果onLoad中有一個非同步的方法獲取資料,那麼並不能保證onLoad執行完畢之後非同步方法已經獲取到資料,這時候就要用setData去更新資料。
15、動態更新圖片的兩種方式:
<view class='container'>
<image class="head-image" src='{{post_key.headImgSrc}}'></image>
<view class="author-date">
<image class="avatar" src='{{post_key.avatar}}'></image>
<image catchtap="onMusicTap" class="audio" src='{{isPlayingMusic?"/images/music/music-stop.png":"/images/music/music-start.png"}}'></image>
<text class="author">{{post_key.author}}</text>
<text class="const-text">發表於</text>
<text class="date">{{post_key.date}}</text>
</view>
<text class="title">{{post_key.title}}</text>
<view class='tool'>
<view class='circle-img'>
<image wx:if="{{collected}}"catchtap="onCollection" src='/images/collection.png'></image>
<image wx:else catchtap="onCollection" src='/images/collection-anti.png'></image>
<image catchtap="onShare" class="share-img" src='/images/avatar.jpeg'></image>
</view>
<view class='horizon'></view>
</view>
<text class='detail'>{{post_key.detail}}</text>
</view>
一種是設定一個image,通過繫結的資料做三目運算,設定好兩張圖片
另外一種是設定兩個image,通過if else方式顯示出不同的image。
16、事件冒泡的應用
-
方法1 每個子元素單獨設定tap事件
<swiper indicator-dots='true' autoplay='true' interval='2000'>
<swiper-item>
<image catchtap="onItemSwiperTap" src='/images/swipe_item.jpg' data-postId='1'></image>
</swiper-item>
<swiper-item>
<image catchtap="onItemSwiperTap" src='/images/swiper_item2.jpg' data-postId='2'></image>
</swiper-item>
<swiper-item>
<image catchtap="onItemSwiperTap" src='/images/swipe_item.jpg' data-postId='3'></image>
</swiper-item>
</swiper>
在每個子元素中進行事件繫結,這個也太麻煩了
onItemSwiperTap:function(event){
var postId = event.currentTarget.dataset.postid;
wx.navigateTo({
url: 'post-detail/post-detail?id=' + postId
})
}
-
方法2 在父元素上設定tap事件
<swiper bindtap="onSwiperTap" indicator-dots='true' autoplay='true' interval='2000'>
<swiper-item>
<image src='/images/swipe_item.jpg' data-postId='1'></image>
</swiper-item>
<swiper-item>
<image src='/images/swiper_item2.jpg' data-postId='2'></image>
</swiper-item>
<swiper-item>
<image src='/images/swipe_item.jpg' data-postId='3'></image>
</swiper-item>
</swiper>
在父元素上繫結一個事件
onSwiperTap:function(event){
//target指的是當前點選的元件 currentTarget指的是事件捕獲的元件
var postId = event.target.dataset.postid;
wx.navigateTo({
url: 'post-detail/post-detail?id=' + postId
})
}
兩個方法獲取資料的方式不太一樣,注意看註釋。
相關文章
- 微信小程式初體驗微信小程式
- 小程式開發初體驗
- 微信小程式元件初體驗微信小程式元件
- 微信小程式初體驗--玩安卓小程式微信小程式安卓
- 小程式雲開發初體驗
- 微信小程式之:雲開發初體驗--致我的第一個小程式微信小程式
- 初嘗微信小程式開發與實踐經驗分享微信小程式
- 從前端介面開發談微信小程式體驗前端微信小程式
- 微信小程式input標籤正則初體驗微信小程式
- 小程式 網易雲課堂雲開發初體驗
- 一次微信小程式的快速開發體驗微信小程式
- 小程式的初體驗
- 微信小程式開發平臺新功能「雲開發」快速上手體驗微信小程式
- 小程式雲開發體驗
- 攜程小程式初體驗
- 微信小程式開發一些經驗微信小程式
- 微信小程式開發BUG經驗總結微信小程式
- 小程式雲開發之初體驗
- 微信小程式開發微信小程式
- Electron開發初體驗
- 微信小程式開發小記微信小程式
- 微信小程式全域性狀態管理,並提供Vuex的開發體驗微信小程式Vue
- 【小程式】微信小程式開發實踐微信小程式
- 【小程式】微信小程式開發準備微信小程式
- 微信小程式開發教程微信小程式
- 微信小程式開發2微信小程式
- 微信開發與小程式
- 快速開發微信小程式微信小程式
- 初學微信小程式 TodoList微信小程式
- 關於Android開源庫分享平臺,(GitClub)微信小程式的開發體驗AndroidGit微信小程式
- 微信小程式開發總結微信小程式
- 開發微信小程式的作用微信小程式
- 微信小程式藍芽開發微信小程式藍芽
- 微信小程式雲開發6微信小程式
- 微信小程式開發神器-Grace微信小程式
- 微信小程式開發--『狗蛋TV』微信小程式
- 使用mpvue開發微信小程式Vue微信小程式
- 使用TypeScript開發微信小程式TypeScript微信小程式