摘要:微信小程序之與唯品會(huì)來場粉紅色的邂逅買買買,雖然雙十二剛過,可是唯品會(huì)的折扣卻是依然火爆。一打開頁面,便是粉色的主頁映入眼簾,琳瑯滿目的商品,讓我這個(gè)月光族過了把眼癮。
Welcome to miaomiaoXiong"s segmentfault
微信小程序之--(與唯品會(huì)來場粉紅色的邂逅 ???)
買買買,雖然雙十二剛過,可是唯品會(huì)的折扣卻是依然火爆。一打開頁面,便是粉色的主頁映入眼簾,琳瑯滿目的商品,讓我這個(gè)月光族過了把眼癮。雖然買不起,那就自己模仿著寫一個(gè),把喜歡的商品一個(gè)個(gè)推進(jìn)小推車?yán)?。?)下面為大家分享一個(gè)把唯品會(huì)里面的精致商品推進(jìn)自己購物車的微信小程序,?
主要實(shí)現(xiàn)功能--購物車加購話不多說,扔個(gè)代碼看看:
主頁面: 輪播圖片這個(gè)小技巧比較普遍的被使用,代碼如下:
index.wxml:使用swiper組件,里面放置block wx:for 循環(huán)movies 圖片數(shù)組,再次使用swiper-item 依次將item.url 圖片地址輸出,就可以看到我們的輪播圖了。
swiper 屬性具體小提示
動(dòng)畫效果 1. 購物車搖擺動(dòng)畫兩個(gè)小動(dòng)畫: 加購小車左右搖擺動(dòng)畫效果, 收藏小愛心動(dòng)畫效果。
點(diǎn)擊圖中的購買圖片,我們的購物車就會(huì)隨之扭扭身體,表示已經(jīng)加入購物車? , 具體代碼如下:
在 wxml 中添加 animation="{{rorateAnimation}}" 動(dòng)畫。
animation 動(dòng)畫
在對(duì)應(yīng)的 js 中將購物車加購動(dòng)畫具體實(shí)現(xiàn), 當(dāng) goumai: function() 觸發(fā)時(shí),創(chuàng)建動(dòng)畫 wx.createAnimation() , 通過 animation.rotate().step() 實(shí)現(xiàn)加購中小車搖擺的過程,代碼如下:
biadtap 事件
// 購買點(diǎn)擊事件,觸發(fā)時(shí)使購物車圖片放大
goumai: function (event) {
var animation = wx.createAnimation({
duration: 100,
})
//購物車旋轉(zhuǎn)
animation.rotate(30).step();
animation.rotate(0).step();
animation.rotate(-30).step();
animation.rotate(0).step();
this.setData({
rorateAnimation: animation.export(),
})
},
送走了購物車的加購動(dòng)畫,下面為大家分享一個(gè)收藏動(dòng)畫, 愛心 ?
類似之前的購物車動(dòng)畫,首先我們?cè)?wxml 中綁定事件 bindtap="shoucang" ,同樣使用 animation="{{enlargeAnimation}}" ?獲取動(dòng)畫效果, 代碼如下:
js 文件中同樣使用 wx.createAnimation() 創(chuàng)建動(dòng)畫,animation.opacity(0.6).scale(0.9).step();//修改透明度,放大
//收藏,動(dòng)畫放大效果
shoucang: function (event) {
var animation = wx.createAnimation({
duration: 700,
})
// 圖片放大
animation.opacity(0.6).scale(0.9).step();//修改透明度,放大
this.setData({
enlargeAnimation: animation.export()
})
},
是不是覺得超級(jí)簡單, 通過一個(gè)事件綁定秀出你的神操作。
下面,該是嚴(yán)肅的時(shí)候了,以上只是簡單的切頁面,我們要把喜歡的東西加進(jìn)購物車,保持頭腦清醒,跟著我把購物車的邏輯理理清楚 ?
數(shù)據(jù)流程步驟 1.easy-mock 創(chuàng)建數(shù)據(jù)?首先我們要在 easy-mock 上創(chuàng)建一份自己的數(shù)據(jù),
easy-mock 點(diǎn)擊進(jìn)入
通過 wx.request({url:"....."}) 獲取你的easy-mock 中的數(shù)據(jù), 代碼示例如下:
onLaunch(options) {
// 請(qǐng)求數(shù)據(jù)
wx.request({
url: "https://www.easy-mock.com/moc...",
success: (response) => {
? ? ? ?//console.log(response.data.data);
? ? ? ?// 通過 ?this.globalData.movies 獲取easy-mock 中的 movies 數(shù)組,
? ? ? ? // ?除了全局變量的 js, 其他 js 頁面要獲取數(shù)據(jù),需要 const app = getApp() 定義,
? ? ? ? // 才能使用全局中的數(shù)據(jù)
?this.globalData.movies = response.data.data.movies,
this.globalData.img = response.data.data.img,
this.globalData.goods = response.data.data.goods
}
})
},
由于商品頁面加入購物車然后要在購物車頁面顯示, 我額外的設(shè)置了一個(gè)全局?jǐn)?shù)組 buy ,以便之后在購物車頁面顯示我所添加的物品詳情 (圖片, 價(jià)格 ,數(shù)量等), 在 app.js 中代碼如下:
globalData: {
buy:[]
}
?在商品頁面中的 js 文件中通過 onLoad: function () 將數(shù)據(jù)從全局中獲取
onLoad: function () {
this.setData({
movies: app.globalData.movies,
goods: app.globalData.goods
});
在 wxml 中通過綁定事件 bindtap="buy" 將選中的商品放入我們的購物車頁面
在對(duì)應(yīng)的 js 文件中具體實(shí)現(xiàn) buy 事件代碼如下:
// 購買, 點(diǎn)擊圖片,購物車顯示已加購
buy: function (e) {
for (var i = 0; i < this.data.goods.length;i++){
? ?//點(diǎn)擊購買圖片觸發(fā) buy 事件 ,其中的 item.id 具有唯一性, 將其傳入函數(shù)中與原來的所有商品中的 id 相匹配, 如果存在,即把它 push 進(jìn)新的數(shù)組 buy 中。
?if (e.currentTarget.dataset.id == this.data.goods[i].id) {
app.globalData.buy.push(this.data.goods[i])
console.log(app.globalData.buy)
}
}
},
購物車已經(jīng)放好了我們的寶貝,接下來要顯示才可以, 繼續(xù)我們的 js 數(shù)據(jù)征途 fighting!!!
1.清楚地明白我們要什么, 如: 商品圖片, 名稱, 價(jià)格, 但是為了實(shí)現(xiàn)數(shù)量的增減效果,需要額外設(shè)置 全選 allSelect: "circle", 數(shù)量 num: 0, 共計(jì)數(shù)額 count: 0
data: {
allSelect: "circle",
num: 0,
count: 0,
},
2.將全局?jǐn)?shù)據(jù) ?buy 數(shù)組添加到我們購物車的 js 頁面中, 代碼如下:
setData
onLoad: function () {
?//通過 ?onload 函數(shù)加載數(shù)據(jù)
this.setData({
buy: app.globalData.buy,
});
},
3.計(jì)算商品數(shù)量, 代碼如下:
//計(jì)算數(shù)量
countNum: function () {
var that = this
//遍歷數(shù)組,把既選中的num加起來
var newList = that.data.buy
var allNum = 0
for (var i = 0; i < newList.length; i++) {
if (newList[i].select == "success") {
allNum += parseInt(newList[i].num)
}
}
parseInt
console.log(allNum)
that.setData({
num: allNum
})
},
4.計(jì)算商品金額,代碼如下:
//計(jì)算金額方法
count: function () {
var that = this
//選中的訂單,數(shù)量*價(jià)格加起來
var newList = that.data.buy
var newCount = 0
for (var i = 0; i < newList.length; i++) {
if (newList[i].select == "success") {
newCount += newList[i].num * newList[i].price
}
}
that.setData({
count: newCount
})
}
?
5.將購物車中的商品數(shù)量添加,代碼如下:
//商品數(shù)量增加函數(shù)
?addtion: function (e) {
var that = this
//得到下標(biāo)
var index = e.currentTarget.dataset.index
// 得到點(diǎn)擊的值
var num = e.currentTarget.dataset.num
num++
// 把新的值給新的數(shù)組
var newList = that.data.buy
newList[index].num = num
//把新的數(shù)組傳給前臺(tái)
that.setData({
buy: newList
})
//調(diào)用計(jì)算數(shù)目方法
that.countNum()
//計(jì)算金額
that.count()
},
6.將購物車中的商品數(shù)量減少,但數(shù)量減少到小于1時(shí),該商品就會(huì)消失,代碼如下:
//商品數(shù)量減少
subtraction: function (e) {
var that = this
// 得到下標(biāo)
var index = e.currentTarget.dataset.index
//得到點(diǎn)擊的值
var num = e.currentTarget.dataset.num
//把新的值給新的數(shù)組
var newList = that.data.buy
//當(dāng)1件時(shí),點(diǎn)擊移除
if (num == 1) {
newList.splice(index, 1)
} else {
num--
newList[index].num = num
}
// 把新的數(shù)組傳給前臺(tái)
that.setData({
buy: newList
})
//調(diào)用計(jì)算數(shù)目方法
that.countNum()
// 計(jì)算金額
that.count()
},
7.單選商品,結(jié)算金額
change: function (e) {
var that = this
//得到下標(biāo)
var index = e.currentTarget.dataset.index
//得到選中狀態(tài)
var select = e.currentTarget.dataset.select
console.log(e.currentTarget.dataset.select);
if (select == "circle") {
var stype = "success"
} else {
var stype = "circle"
}
//把新的值給新的數(shù)組
var newList = that.data.buy
newList[index].select = stype
//把新的數(shù)組傳給前臺(tái)
that.setData({
buy: newList
})
//調(diào)用計(jì)算數(shù)目方法
that.countNum()
//計(jì)算金額
that.count()
},
8.全選商品,并結(jié)算金額
//全選
allSelect: function (e) {
var that = this
//先判斷現(xiàn)在選中沒
var allSelect = e.currentTarget.dataset.select
var newList = that.data.buy
if (allSelect == "circle") {
//先把數(shù)組遍歷一遍,然后改掉select值
for (var i = 0; i < newList.length; i++) {
newList[i].select = "success"
}
var select = "success"
} else {
for (var i = 0; i < newList.length; i++) {
newList[i].select = "circle"
}
var select = "circle"
}
that.setData({
buy: newList,
allSelect: select
})
//調(diào)用計(jì)算數(shù)目方法
that.countNum()
//計(jì)算金額
that.count()
},
希望有興趣的朋友一起討論,一起切磋,歡迎交流 QQ:(1920459934)?
歡迎進(jìn)入我的github瀏覽 ? ?
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/92181.html
摘要:微信小程序之與唯品會(huì)來場粉紅色的邂逅買買買,雖然雙十二剛過,可是唯品會(huì)的折扣卻是依然火爆。一打開頁面,便是粉色的主頁映入眼簾,琳瑯滿目的商品,讓我這個(gè)月光族過了把眼癮。 Welcome to miaomiaoXiongs segmentfault 微信小程序之--(與唯品會(huì)來場粉紅色的邂逅 ???) 買買買,雖然雙十二剛過,可是唯品會(huì)的折扣卻是依然火爆。一打開頁面,便是粉色的主頁映入...
摘要:微信小程序之與唯品會(huì)來場粉紅色的邂逅買買買,雖然雙十二剛過,可是唯品會(huì)的折扣卻是依然火爆。一打開頁面,便是粉色的主頁映入眼簾,琳瑯滿目的商品,讓我這個(gè)月光族過了把眼癮。 Welcome to miaomiaoXiongs segmentfault 微信小程序之--(與唯品會(huì)來場粉紅色的邂逅 ???) 買買買,雖然雙十二剛過,可是唯品會(huì)的折扣卻是依然火爆。一打開頁面,便是粉色的主頁映入...
摘要:春招結(jié)果五月份了,春招已經(jīng)接近尾聲,因?yàn)榈搅酥芪逋砩蟿偤糜锌?,所以簡單地記錄一下自己的春招過程。我的春招從二月初一直持續(xù)到四月底,截止今天,已經(jīng)斬獲唯品會(huì)電商前端研發(fā)部大數(shù)據(jù)與威脅分析事業(yè)部京東精銳暑假實(shí)習(xí)生的騰訊的是早上打過來的。 春招結(jié)果 五月份了,春招已經(jīng)接近尾聲,因?yàn)榈搅酥芪逋砩蟿偤糜锌眨院唵蔚赜涗浺幌伦约旱拇赫羞^程。我的春招從二月初一直持續(xù)到四月底,截止今天,已經(jīng)斬獲唯品...
摘要:基于年底或年初沒有推廣的現(xiàn)狀,唯品會(huì)部門目前已經(jīng)做了兩年的時(shí)間。唯品會(huì)現(xiàn)狀唯品會(huì)目前線上有一千多個(gè)域,每個(gè)域之間相互的依賴比較復(fù)雜,每次的部署發(fā)布困難。這是唯品會(huì)的架構(gòu),主要包含持續(xù)集成和持續(xù)部署。 數(shù)人云上海&深圳兩地容器之Mesos/K8S/Swarm三國演義的嘉賓精彩實(shí)錄第三更來啦。唯品會(huì)是數(shù)人云Meetup的老朋友,去年曾做過RPC服務(wù)框架和Mesos容器化的分享。本次分享中,...
摘要:另外回答的時(shí)候要淡定,一些問題就算不懂也不能慌,要和面試官談笑風(fēng)生,然后盡量扯回到自己懂的東西上面大公司比如百度給我的感覺就是很重視基礎(chǔ)思維和潛力。 —— 雖然我的offer少,但是我的拒信多啊 這幾天終于閑下來,做一點(diǎn)微小的工作,整理了一些之前幾家公司的前端面試題和個(gè)人經(jīng)驗(yàn),想做前端的師弟妹可以參考,也歡迎各同行大神來指教~ (以下問題不分先后,時(shí)間久遠(yuǎn)難免有些遺漏;很多問題面試官都...
閱讀 834·2023-04-25 19:40
閱讀 3492·2023-04-25 17:41
閱讀 3006·2021-11-11 11:01
閱讀 2622·2019-08-30 15:55
閱讀 3231·2019-08-30 15:44
閱讀 1361·2019-08-29 14:07
閱讀 485·2019-08-29 11:23
閱讀 1330·2019-08-27 10:54