热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微信小程序之(与唯品会来场粉红色的邂逅???)

WelcometomiaomiaoXiong’ssegmentfault微信小程序之--(与唯品会来场粉红色的邂逅???)买买买,虽然双十二刚过,可是唯品会的折扣却是依然火爆。一打

Welcome to miaomiaoXiong’s segmentfault

微信小程序之--(与唯品会来场粉红色的邂逅 ???)

买买买,虽然双十二刚过,可是唯品会的折扣却是依然火爆。一打开页面,便是粉色的主页映入眼帘,琳琅满目的商品,让我这个月光族过了把眼瘾。虽然买不起,那就自己模仿着写一个,把喜欢的商品一个个推进小推车里。(?)下面为大家分享一个把唯品会里面的精致商品推进自己购物车的微信小程序,?

《微信小程序之--(与唯品会来场粉红色的邂逅 ???)》

主要实现功能–购物车加购

话不多说,扔个代码看看:

主页面: 轮播图片这个小技巧比较普遍的被使用,代码如下:

《微信小程序之--(与唯品会来场粉红色的邂逅 ???)》

index.wxml:使用swiper组件,里面放置block wx:for 循环movies 图片数组,再次使用swiper-item 依次将item.url 图片地址输出,就可以看到我们的轮播图了。





swiper 属性具体小提示

动画效果

1. 购物车摇摆动画

两个小动画: 加购小车左右摇摆动画效果, 收藏小爱心动画效果。
《微信小程序之--(与唯品会来场粉红色的邂逅 ???)》

点击图中的购买图片,我们的购物车就会随之扭扭身体,表示已经加入购物车☺ , 具体代码如下:

在 wxml 中添加 animation=”{{rorateAnimation}}” 动画。
animation 动画

     

在对应的 js 中将购物车加购动画具体实现, 当 goumai: function() 触发时,创建动画 wx.createAnimation() , 通过 animation.rotate().step() 实现加购中小车摇摆的过程,代码如下:

biadtap 事件

// 购买点击事件,触发时使购物车图片放大
goumai: function (event) {
var animation = wx.createAnimation({
duration: 100,
})
//购物车旋转
animation.rotate(30).step();
animation.rotate(0).step();
animation.rotate(-30).step();
animation.rotate(0).step();
this.setData({
rorateAnimation: animation.export(),
})
},

2.爱心收藏动画

送走了购物车的加购动画,下面为大家分享一个收藏动画, 爱心 ♥
类似之前的购物车动画,首先我们在 wxml 中绑定事件 bindtap=’shoucang’ ,同样使用 animation=”{{enlargeAnimation}}”  获取动画效果, 代码如下:

js 文件中同样使用 wx.createAnimation() 创建动画,animation.opacity(0.6).scale(0.9).step();//修改透明度,放大

//收藏,动画放大效果
shoucang: function (event) {
var animation = wx.createAnimation({
duration: 700,
})
// 图片放大
animation.opacity(0.6).scale(0.9).step();//修改透明度,放大
this.setData({
enlargeAnimation: animation.export()
})
},

是不是觉得超级简单, 通过一个事件绑定秀出你的神操作。

下面,该是严肃的时候了,以上只是简单的切页面,我们要把喜欢的东西加进购物车,保持头脑清醒,跟着我把购物车的逻辑理理清楚 ?

《微信小程序之--(与唯品会来场粉红色的邂逅 ???)》

《微信小程序之--(与唯品会来场粉红色的邂逅 ???)》

数据流程步骤

1.easy-mock 创建数据

 首先我们要在 easy-mock 上创建一份自己的数据,
easy-mock 点击进入

通过 wx.request({url:”…..”}) 获取你的easy-mock 中的数据, 代码示例如下:

onLaunch(options) {
// 请求数据
wx.request({
url: ‘https://www.easy-mock.com/moc…‘,
success: (response) => {
       //console.log(response.data.data);
       // 通过  this.globalData.movies 获取easy-mock 中的 movies 数组,
        //  除了全局变量的 js, 其他 js 页面要获取数据,需要 const app = getApp() 定义,
        // 才能使用全局中的数据
 this.globalData.movies = response.data.data.movies,
this.globalData.img = response.data.data.img,
this.globalData.goods = response.data.data.goods
}
})
},

2.设置全局变量

由于商品页面加入购物车然后要在购物车页面显示, 我额外的设置了一个全局数组 buy ,以便之后在购物车页面显示我所添加的物品详情 (图片, 价格 ,数量等), 在 app.js 中代码如下:

globalData: {
buy:[]
}

3.获取全局数据并引用

 在商品页面中的 js 文件中通过 onLoad: function () 将数据从全局中获取

onLoad: function () {
this.setData({
movies: app.globalData.movies,
goods: app.globalData.goods
});

4.bindtap 事件绑定

在 wxml 中通过绑定事件 bindtap=’buy’ 将选中的商品放入我们的购物车页面

在对应的 js 文件中具体实现 buy 事件代码如下:

// 购买, 点击图片,购物车显示已加购
buy: function (e) {
for (var i = 0; i    //点击购买图片触发 buy 事件 ,其中的 item.id 具有唯一性, 将其传入函数中与原来的所有商品中的 id 相匹配, 如果存在,即把它 push 进新的数组 buy 中。
 if (e.currentTarget.dataset.id == this.data.goods[i].id) {
app.globalData.buy.push(this.data.goods[i])
console.log(app.globalData.buy)
}
}
},

购物车已经放好了我们的宝贝,接下来要显示才可以, 继续我们的 js 数据征途 fighting!!!

1.清楚地明白我们要什么, 如: 商品图片, 名称, 价格, 但是为了实现数量的增减效果,需要额外设置 全选 allSelect: “circle”, 数量 num: 0, 共计数额 count: 0

data: {
allSelect: “circle”,
num: 0,
count: 0,
},

2.将全局数据  buy 数组添加到我们购物车的 js 页面中, 代码如下:

setData

onLoad: function () {
 //通过  onload 函数加载数据
this.setData({
buy: app.globalData.buy,
});
},

3.计算商品数量, 代码如下:

//计算数量
countNum: function () {
var that = this
//遍历数组,把既选中的num加起来
var newList = that.data.buy
var allNum = 0
for (var i = 0; i if (newList[i].select == “success”) {
allNum += parseInt(newList[i].num)
}
}
parseInt
console.log(allNum)
that.setData({
num: allNum
})
},

4.计算商品金额,代码如下:

//计算金额方法
count: function () {
var that = this
//选中的订单,数量*价格加起来
var newList = that.data.buy
var newCount = 0
for (var i = 0; i if (newList[i].select == “success”) {
newCount += newList[i].num * newList[i].price
}
}
that.setData({
count: newCount
})
}
 
5.将购物车中的商品数量添加,代码如下:

//商品数量增加函数
 addtion: function (e) {
var that = this
//得到下标
var index = e.currentTarget.dataset.index
// 得到点击的值
var num = e.currentTarget.dataset.num
num++
// 把新的值给新的数组
var newList = that.data.buy
newList[index].num = num
//把新的数组传给前台
that.setData({
buy: newList
})
//调用计算数目方法
that.countNum()
//计算金额
that.count()
},

6.将购物车中的商品数量减少,但数量减少到小于1时,该商品就会消失,代码如下:

//商品数量减少
subtraction: function (e) {
var that = this
// 得到下标
var index = e.currentTarget.dataset.index
//得到点击的值
var num = e.currentTarget.dataset.num
//把新的值给新的数组
var newList = that.data.buy
//当1件时,点击移除
if (num == 1) {
newList.splice(index, 1)
} else {
num–
newList[index].num = num
}
// 把新的数组传给前台
that.setData({
buy: newList
})
//调用计算数目方法
that.countNum()
// 计算金额
that.count()
},

7.单选商品,结算金额


change: function (e) {
var that = this
//得到下标
var index = e.currentTarget.dataset.index
//得到选中状态
var select = e.currentTarget.dataset.select
console.log(e.currentTarget.dataset.select);
if (select == “circle”) {
var stype = “success”
} else {
var stype = “circle”
}
//把新的值给新的数组
var newList = that.data.buy
newList[index].select = stype
//把新的数组传给前台
that.setData({
buy: newList
})
//调用计算数目方法
that.countNum()
//计算金额
that.count()
},

8.全选商品,并结算金额



全选

//全选
allSelect: function (e) {
var that = this
//先判断现在选中没
var allSelect = e.currentTarget.dataset.select
var newList = that.data.buy
if (allSelect == “circle”) {
//先把数组遍历一遍,然后改掉select值
for (var i = 0; i newList[i].select = “success”
}
var select = “success”
} else {
for (var i = 0; i newList[i].select = “circle”
}
var select = “circle”
}
that.setData({
buy: newList,
allSelect: select
})
//调用计算数目方法
that.countNum()
//计算金额
that.count()
},

希望有兴趣的朋友一起讨论,一起切磋,欢迎交流 QQ:(1920459934)?
欢迎进入我的github浏览 ?  


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有