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


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的js分页代码
Jun 10 Javascript
Dom在ajax技术中的作用说明
Oct 25 Javascript
jQuery实现购物车数字加减效果
Mar 14 Javascript
JavaScript中的Math.LOG2E属性使用详解
Jun 14 Javascript
简述JavaScript中正则表达式的使用方法
Jun 15 Javascript
jQuery插件开发精品教程(让你的jQuery更上一个台阶)
Nov 07 Javascript
通过修改360抢票的刷新频率和突破8车次限制实现方法
Jan 04 Javascript
JS实现非首屏图片延迟加载的示例
Jan 06 Javascript
vue项目中使用Svg的方法
Oct 24 Javascript
浅谈bootstrap layer.open中end的使用方法
Sep 12 Javascript
原生JS实现天气预报
Jun 16 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
Jul 22 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循环检测目录是否存在并创建(循环创建目录)
2011/01/06 PHP
apache php模块整合操作指南
2012/11/16 PHP
PHP中new static()与new self()的区别异同分析
2014/08/22 PHP
PHP中Socket连接及读写数据超时问题分析
2016/07/19 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
2018/09/28 PHP
jQuery 表单验证插件formValidation实现个性化错误提示
2009/06/23 Javascript
JavaScript截取字符串的2个函数介绍
2014/08/27 Javascript
JS简单实现String转Date的方法
2016/03/02 Javascript
第一篇初识bootstrap
2016/06/21 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
2016/09/21 Javascript
Bootstrap导航条鼠标悬停下拉菜单
2017/01/04 Javascript
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】
2017/03/04 Javascript
Bootstrap + AngularJS 实现简单的数据过滤字符查找功能
2017/07/27 Javascript
vue嵌套路由与404重定向实现方法分析
2018/05/04 Javascript
Vue中&quot;This dependency was not found&quot;问题的解决方法
2018/06/19 Javascript
剖析Django中模版标签的解析与参数传递
2015/07/21 Python
深入浅析Python传值与传址
2018/07/10 Python
Python使用try except处理程序异常的三种常用方法分析
2018/09/05 Python
Python多线程应用于自动化测试操作示例
2018/12/06 Python
详解python中的线程与线程池
2019/05/10 Python
Python批量修改图片分辨率的实例代码
2019/07/04 Python
Python字符串hashlib加密模块使用案例
2020/03/10 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
2021/03/03 Python
css3实现简单的白云飘动背景特效
2020/10/28 HTML / CSS
任课老师推荐信范文
2013/11/24 职场文书
新闻专业个人求职信
2013/12/19 职场文书
新闻编辑求职信
2014/07/13 职场文书
学校政风行风评议心得体会
2014/10/21 职场文书
2014年村委会工作总结
2014/11/24 职场文书
2015大学迎新晚会主持词
2015/07/16 职场文书
保外就医申请书范文
2015/08/06 职场文书
大学生团支书竞选稿
2015/11/21 职场文书
让人感觉高大上的讲话稿怎么写?
2019/07/08 职场文书
导游词之泉州崇武古城
2019/12/20 职场文书
Android基础入门之dataBinding的简单使用教程
2022/06/21 Java/Android