微信小程序基于本地缓存实现点赞功能的方法


Posted in Javascript onDecember 18, 2017

本文实例讲述了微信小程序基于本地缓存实现点赞功能的方法。分享给大家供大家参考,具体如下:

wxml中的写法

注意:

1. 使用wx:if="{{condition}}" wx:else实现图标的切换效果;
2. 为图片绑定点击事件bindtap="toCollect",两个image标签都要绑定!

<image wx:if="{{collection}}" src="/images/icon/pic1.png" bindtap="toCollect"></image>
<image wx:else src="/images/icon/pic2.png" bindtap="toCollect"></image>

js中的写法:

Page({
 data: {
 },
 onLoad: function(option) {
  // 获取接收到的id值
  var getId = option.id;
  // 让接收到的id值传递到data:{}里面
  this.setData({
   currentId: getId
  });
  // 读取所有的文章列表点赞缓存状态
  var cache = wx.getStorageSync('cache_key');
  // 如果缓存状态存在
  if (cache) {
   // 拿到所有缓存状态中的1个
   var currentCache = cache[getId];
   // 把拿到的缓存状态中的1个赋值给data中的collection,如果当前文章没有缓存状态,currentCache 的值就是 false,如果当前文章的缓存存在,那么 currentCache 就是有值的,有值的说明 currentCache 的值是 true
   this.setData({
    collection: currentCache
   })
  } else {
   // 如果所有的缓存状态都不存在 就让不存在的缓存存在
   var cache = {};
   // 既然所有的缓存都不存在,那么当前这个文章点赞的缓存也不存在,我们可以把当前这个文章点赞的缓存值设置为 false
   cache[getId] = false;
   // 把设置的当前文章点赞放在整体的缓存中
   wx.setStorageSync('cache_key',cache);
  }
 },
 // 点击图片的点赞事件 这里使用的是同步的方式
 toCollect: function(event) {
  // 获取所有的缓存
  var cache = wx.getStorageSync('cache_key');
  // 获取当前文章是否被点赞的缓存
  var currentCache = cache[this.data.currentId];
  // 取反,点赞的变成未点赞 未点赞的变成点赞
  currentCache = !currentCache;
  // 更新cache中的对应的1个的缓存值,使其等于当前取反的缓存值
  cache[this.data.currentId] = currentCache;
  // 重新设置缓存
  wx.setStorageSync('cache_key',cache);
  // 更新数据绑定,从而切换图片
  this.setData({
   // collection 默认的是 false
   collection: currentCache
  });
  // 交互反馈
  wx.showToast({
   title: currentCache?'点赞':'取消',
   icon: 'success',
   duration: 2000
  });
 }
})

js中操作反馈—wx.showModal的写法:

// 点击图片的点赞事件 这里使用的是同步的方式
toCollect: function(event) {
  // 获取缓存,得到当前文章是否被点赞
  var cache = wx.getStorageSync('cache_key');
  // 获取当前文章是否被点赞的缓存
  var currentCache = cache[this.data.currentId];
  // 取反,点赞的变成未点赞 未点赞的变成点赞
  currentCache = !currentCache;
  // 更新cache中的对应的1个的缓存值,使其等于当前取反的缓存值
  cache[this.data.currentId] = currentCache;
  // 调用 showModal方法
  this.showModal(cache,currentCache);
},
showModal: function(cache,currentCache) {
 var that = this;
 wx.showModal({
  title: "点赞"
  content: currentCache?"要点赞吗?":"要取消赞吗?",
  showCancel: "true",
  cancelText: "取消",
  cancelColor: "#666",
  confirmText: "确定",
  confirmColor: "#222",
  success: function(res) {
   if (res.confirm) {
    // 重新设置缓存
    wx.setStorageSync('cache_key',cache);
    // 更新数据绑定,从而切换图片
    that.setData({
     collection: currentCache
    })
   }
  }
 })
}

希望本文所述对大家微信小程序开发有所帮助。

Javascript 相关文章推荐
jquery异步循环获取功能实现代码
Sep 19 Javascript
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
Oct 31 Javascript
JS实现FLASH幻灯片图片切换效果的方法
Mar 04 Javascript
javascript简单实现等比例缩小图片的方法
Jul 27 Javascript
Bootstrap基本布局实现方法详解
Nov 25 Javascript
详解js前端代码异常监控
Jan 11 Javascript
详解vue父子模版嵌套案例
Mar 04 Javascript
angular使用post、get向后台传参的问题实例
May 27 Javascript
Auto.js自动收取自己和好友蚂蚁森林能量脚本
Jun 28 Javascript
VUE 实现复制内容到剪贴板的两种方法
Apr 24 Javascript
使用Easyui实现查询条件的后端传递并自动刷新表格的两种方法
Sep 09 Javascript
JavaScript如何操作css
Oct 24 Javascript
JavaScript模块详解
Dec 18 #Javascript
webpack打包js文件及部署的实现方法
Dec 18 #Javascript
react+redux的升级版todoList的实现
Dec 18 #Javascript
总结js中的一些兼容性易错的问题
Dec 18 #Javascript
详解最新vue-cli 2.9.1的webpack存在问题
Dec 16 #Javascript
HTML5+JS+JQuery+ECharts实现异步加载问题
Dec 16 #jQuery
详解如何使用 vue-cli 开发多页应用
Dec 16 #Javascript
You might like
PHP中对各种加密算法、Hash算法的速度测试对比代码
2014/07/08 PHP
PHP入门教程之上传文件实例详解
2016/09/11 PHP
php基于闭包实现函数的自调用(递归)实例分析
2016/11/11 PHP
详解Yii2.0 rules验证规则集合
2017/03/21 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
禁用页面部分JavaScript不是全部而是部分
2014/09/03 Javascript
nodejs中的fiber(纤程)库详解
2015/03/24 NodeJs
js HTML5 Ajax实现文件上传进度条功能
2016/02/13 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
2016/05/12 Javascript
Node.js刷新session过期时间的实现方法推荐
2016/05/18 Javascript
JavaScript奇技淫巧44招【实用】
2016/12/11 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
Nodejs核心模块之net和http的使用详解
2019/04/02 NodeJs
Vue.js轮播图走马灯代码实例(全)
2019/05/08 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
2019/05/21 Javascript
python搜索指定目录的方法
2015/04/29 Python
Python实现的递归神经网络简单示例
2017/08/11 Python
详解Python自建logging模块
2018/01/29 Python
Python模拟登录的多种方法(四种)
2018/06/01 Python
使用tensorflow实现线性回归
2018/09/08 Python
Python Django的安装配置教程图文详解
2019/07/17 Python
dpn网络的pytorch实现方式
2020/01/14 Python
Python json格式化打印实现过程解析
2020/07/21 Python
详解淘宝H5 sign加密算法
2020/08/25 HTML / CSS
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
红色连衣裙精品店:Red Dress Boutique
2018/08/11 全球购物
Foot Locker德国官方网站:美国运动服和鞋类零售商
2018/11/01 全球购物
DNA测试:Orig3n
2019/03/01 全球购物
以下为Windows NT 下的32 位C++程序,请计算sizeof 的值
2016/12/07 面试题
25道Java面试题集合
2013/05/21 面试题
本科毕业生自我鉴定
2013/11/02 职场文书
初中美术教学反思
2014/01/29 职场文书
法院四风对照检查材料思想汇报
2014/10/06 职场文书
个人学习总结范文
2015/02/15 职场文书
Python Django搭建文件下载服务器的实现
2021/05/10 Python