热门标签 | 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浏览 ?  


推荐阅读
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • 深入解析ESFramework中的AgileTcp组件
    本文详细介绍了ESFramework框架中AgileTcp组件的设计与实现。AgileTcp是ESFramework提供的ITcp接口的高效实现,旨在优化TCP通信的性能和结构清晰度。 ... [详细]
  • Python自动化测试入门:Selenium环境搭建
    本文详细介绍如何在Python环境中安装和配置Selenium,包括开发工具PyCharm的安装、Python环境的设置以及Selenium包的安装方法。此外,还提供了编写和运行第一个自动化测试脚本的步骤。 ... [详细]
  • KMP算法是处理字符串匹配的一种高效算法它首先用O(m)的时间对模板进行预处理,然后用O(n)的时间完成匹配。从渐进的意义上说,这样时间复 ... [详细]
  • 本文介绍了 Python 的 Pmagick 库中用于图像处理的木炭滤镜方法,探讨其功能和用法,并通过实例演示如何应用该方法。 ... [详细]
  • 在编译BSP包过程中,遇到了一个与 'gets' 函数相关的编译错误。该问题通常发生在较新的编译环境中,由于 'gets' 函数已被弃用并视为安全漏洞。本文将详细介绍如何通过修改源代码和配置文件来解决这一问题。 ... [详细]
  • 本文介绍了一种基于选择排序思想的高效排序方法——堆排序。通过使用堆数据结构,堆排序能够在每次查找最大元素时显著提高效率。文章详细描述了堆排序的工作原理,并提供了完整的C语言代码实现。 ... [详细]
  • 访问一个网页的全过程
    准备:DHCPUDPIP和以太网启动主机,用一根以太网电缆连接到学校的以太网交换机,交换机又与学校的路由器相连.学校的这台路由器与一个ISP链接,此ISP(Intern ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • 使用JS、HTML5和C3创建自定义弹出窗口
    本文介绍如何结合JavaScript、HTML5和C3.js来实现一个功能丰富的自定义弹出窗口。通过具体的代码示例,详细讲解了实现过程中的关键步骤和技术要点。 ... [详细]
  • 本文档汇总了Python编程的基础与高级面试题目,涵盖语言特性、数据结构、算法以及Web开发等多个方面,旨在帮助开发者全面掌握Python核心知识。 ... [详细]
  • Symfony是一个功能强大的PHP框架,以其依赖注入(DI)特性著称。许多流行的PHP框架如Drupal和Laravel的核心组件都基于Symfony构建。本文将详细介绍Symfony的安装方法及其基本使用。 ... [详细]
  • 本文深入探讨了 Java 中 LocalTime 类的 isSupported() 方法,包括其功能、语法和使用示例。通过具体的代码片段,帮助读者理解如何检查特定的时间字段或单位是否被 LocalTime 类支持。 ... [详细]
  • 针对表格详情切换功能,对HTML代码进行了优化和调整,以确保更好的显示效果和用户体验。 ... [详细]
  • 优化SQL Server批量数据插入存储过程的实现
    本文介绍了一种改进的SQL Server存储过程,用于生成批量插入语句。该方法不仅提高了性能,还支持单行和多行模式,适用于SQL Server 2005及以上版本。 ... [详细]
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社区 版权所有