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


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 文本框使用小结
May 22 Javascript
JavaScript的parseInt 取整使用
May 09 Javascript
javascript自动生成包含数字与字符的随机字符串
Feb 09 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
Dec 31 Javascript
JQuery Dialog对话框 不能通过Esc关闭的原因分析及解决办法
Jan 18 Javascript
jQuery实现动态显示select下拉列表数据的方法
Feb 05 jQuery
js控制随机数生成概率代码实例
Mar 21 Javascript
javascript面向对象三大特征之封装实例详解
Jul 24 Javascript
JavaScript实现身份证验证代码实例
Aug 26 Javascript
js prototype深入理解及应用实例分析
Nov 25 Javascript
如何在微信小程序中存setStorage
Dec 13 Javascript
浅谈Vue2.4.0 $attrs与inheritAttrs的具体使用
Mar 08 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面向对象编程快速入门
2006/10/09 PHP
PHP生成带有雪花背景的验证码
2008/09/28 PHP
php 友好URL的实现(吐血推荐)
2008/10/04 PHP
PHP 基本语法格式
2009/12/15 PHP
利用php实现禁用IE和火狐的缓存问题
2012/12/03 PHP
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
Ext 表单布局实例代码
2009/04/30 Javascript
原生js实现半透明遮罩层效果具体代码
2013/06/06 Javascript
javascript jq 弹出层实例
2013/08/25 Javascript
JavaScript中的parse()方法使用简介
2015/06/12 Javascript
jQuery实现宽屏图片轮播实例教程
2015/11/24 Javascript
微信小程序 开发指南详解
2016/09/27 Javascript
手机软键盘弹出时影响布局的解决方法
2016/12/15 Javascript
简单的jQuery拖拽排序效果的实现(增强动态)
2017/02/09 Javascript
详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)
2017/07/13 Javascript
ReactNative踩坑之配置调试端口的解决方法
2017/07/28 Javascript
axios发送post请求,提交图片类型表单数据方法
2018/03/16 Javascript
微信开发之微信jssdk录音功能开发示例
2018/10/22 Javascript
Electron 如何调用本地模块的方法
2019/02/01 Javascript
Nodejs中的require函数的具体使用方法
2019/04/02 NodeJs
微信小程序实现弹框效果
2020/05/26 Javascript
[04:16]DOTA2英雄梦之声_第09期_斧王
2014/06/21 DOTA
Linux中安装Python的交互式解释器IPython的教程
2016/06/13 Python
Python中GIL的使用详解
2018/10/03 Python
利用Vscode进行Python开发环境配置的步骤
2020/06/22 Python
python如何建立全零数组
2020/07/19 Python
Python 实现一个简单的web服务器
2021/01/03 Python
大学本科毕业生求职信范文
2013/12/18 职场文书
户籍证明模板
2014/09/28 职场文书
2014年工作总结及2015工作计划
2014/12/12 职场文书
质检员岗位职责
2015/02/03 职场文书
浅谈mysql执行过程以及顺序
2021/05/12 MySQL
Go语言基础切片的创建及初始化示例详解
2021/11/17 Golang
GTX1650super好不好 gtx1650super显卡属于什么级别
2022/04/08 数码科技
GPU服务器的多用户配置方法
2022/07/07 Servers