微信小程序实现点赞业务


Posted in Javascript onFebruary 10, 2021

本文实例为大家分享了微信小程序实现点赞业务的具体代码,供大家参考,具体内容如下

一、效果

微信小程序实现点赞业务

二、实现

1.逻辑

1.从登录界面时,用户数据已经缓存到本地,在onload中从本地获取用户信息保存在data.userInfo中
2.判断用户的_openid是否在loveList返回的列表中,如果是取消赞,如果不是点赞加入昵称到loveList中
3.下面用的是nickName判断,后期优化成使用_openid判断

微信小程序实现点赞业务

微信小程序实现点赞业务

微信小程序实现点赞业务

微信小程序实现点赞业务

2.wxml

<!-- 
 wx:index = "index":列表循环后所有位置都可以访问索引
 -->
<view class="item" wx:for="{{list}}" wx:index = "index">
 <view class="left">
 <image class="avatar"></image>
 </view>
 <view class="right">
 <view class="nickname">{{item.nickName}}</view>
 <view class="content">{{item.content}}</view>
 <view class="image-list">
  <image class="image" wx:for="{{item.imageList}}"></image>
 </view>
 <view class="time-area">
  <view class="time">{{item.time}}</view>
  <view>
  <!--
   data-index="{{index}}"
   1.设置后在回调函数中currentTarget.dataset中显示
   -->
  <image class="operation-button" src="../../images/caozuo.png" catchtap="showOperationPannel" data-index="{{index}}"></image>
  <!-- 判断当前索引和面盘索引是否一致 -->
  <view class="operation-pannel" wx:if="{{showOperationPannelIndex == index}}">
   <!-- 设置索引和点击函数 -->
   <view class="tab" catchtap="clickLove" data-index="{{index}}">
   <image class="image" src="../../images/love-white.png"></image>
   <text>赞</text>
   </view>
   <view class="tab">
   <image class="image" src="../../images/comment-white.png"></image>
   <text>评论</text>
   </view>
  </view>
  </view>
  
 </view>
 <view class="love-comment">
  <!-- 
  item.loveList=重复
  item.loveList
  <view class="love" wx:if="{{item.loveList.length > 0}}">
  <image class="love-icon" src="../../images/love-blue.png"></image>
  <text class="love-nickname" wx:for="{{item.loveList}}">老夫子 兰陵王</text>
  </view>
  -->
  <view class="love" wx:if="{{item.loveList.length > 0}}">
  <image class="love-icon" src="../../images/love-blue.png"></image>
  <!-- love和整个循环的item不冲突 -->
  <text class="love-nickname" wx:for-items="{{item.loveList}}"
  wx:for-item = "love"
  >{{love.nickName}}</text>
  </view>
  <view class="comment" wx:if="{{item.commentList.length > 0}}">
  <view wx:for-items="{{item.commentList}}"
  wx:for-item = "comment">
   <text class="comment-nickname">{{comment.nickName}}</text>
   <text class="comment-content">{{comment.content}}</text>
  </view>
  </view>
 </view>
 </view>
</view>

3.js

// pages/circle/list.js
var that;
Page({

 /**
 * 页面的初始数据
 */
 data: {
 userInfo:null,
 list:[],
 // 当前点击操作面板的索引,每条朋友圈一个面板
 showOperationPannelIndex:-1,
 },

 /**
 * 生命周期函数--监听页面加载
 */
 onLoad: function (options) {
 that = this;
 for (var i = 1; i < 10; i++) {
  // 定义一个对象存储数据
  var circleData = {};
  circleData.nickName = "朋友-" + i;
  circleData.content = "朋友发布内容-" + i;
  circleData.time = "2020-05-0" + i;

  //图片列表
  var imageList = [];
  // 点赞列表
  var loveList = [];
  // 评论列表
  var commentList = [];


  // 这三个数组赋值给circleData
  circleData.imageList = imageList;
  circleData.loveList = loveList;
  circleData.commentList = commentList;

  // 给3个数组赋值
  for (var j = 1; j < i; j++) {
  // 图片路径,占位
  imageList.push(j);
  // loveList,定义loveData对象
  var loveData = {};
  loveData.nickName = '点赞-' + j;
  // 点赞数组加入loveList
  loveList.push(loveData);

  // 评论数据
  var commentData = {};
  commentData.nickName = "兰陵王-" + j + ":";
  commentData.content = "评论内容-" + j;
  // 加入数据
  commentList.push(commentData);
  }

  that.data.list.push(circleData);
 }
 // 重新渲染
 that.setData({
  list: that.data.list
 })
 //获取用户信息
 wx.getStorage({
  key: 'userInfo',
  success(res){
  //转换成对象
  console.log("getStorage success:",JSON.parse(res.data));
  that.setData({
   userInfo:JSON.parse(res.data)
  })
  }
 })
 },
 //控制操作面板展示
 showOperationPannel(e){
 console.log("showOperationPannel",e);
 // 获取点击的索引
 var index = e.currentTarget.dataset.index;
 // 如果正在展示,则关闭
 if(that.data.showOperationPannelIndex == index){
  that.setData({
  // 索引从0开始
  showOperationPannelIndex:-1
  })
 }
 else{
  that.setData({
  // 设置成当前点击的索引
  showOperationPannelIndex:index
  })
 }
 
 },
 // 点赞功能
 clickLove(e){
 console.log(e);
 var index = e.currentTarget.dataset.index;
 // 将这条数据取出
 var circleData = that.data.list[index];
 var loveList = circleData.loveList;
 var isHaveLove = false;
 for(var i = 0; i < loveList.length; i++){
  if(that.data.userInfo.nickName == loveList[i].nickName){
  isHaveLove = true;
  // 移除点赞
  loveList.splice(i,1);
  break;
  }
 }

 if(!isHaveLove){
  loveList.push({nickName:that.data.userInfo.nickName});
 }
 that.setData({
  list:that.data.list,
  // 关闭点赞评论面板
  showOperationPannelIndex:-1
 })

 },
 
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
实现复选框全选/全不选切换
Dec 23 Javascript
Javascript之旅 对象的原型链之由来
Aug 25 Javascript
分享一个asp.net pager分页控件
Jan 04 Javascript
Extjs优化(一)删除冗余代码提高运行速度
Apr 15 Javascript
JavaScript实现移动端滑动选择日期功能
Jun 21 Javascript
JS+canvas绘制的动态机械表动画效果
Sep 12 Javascript
使用vue-router设置每个页面的title方法
Feb 11 Javascript
jQuery实现图片简单轮播功能示例
Aug 13 jQuery
vue中将html字符串转换成html后遇到的问题小结
Dec 10 Javascript
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
Apr 08 Javascript
你知道JavaScript Symbol类型怎么用吗
Jan 08 Javascript
JavaScript检测是否开启了控制台(F12调试工具)
Oct 02 Javascript
JS获取一个字符串中指定字符串第n次出现的位置
Feb 10 #Javascript
JavaScript canvas实现跟随鼠标移动小球
Feb 09 #Javascript
javascript实现简单留言板案例
Feb 09 #Javascript
javascript实现下拉菜单效果
Feb 09 #Javascript
用javascript实现倒计时效果
Feb 09 #Javascript
javascript实现倒计时关闭广告
Feb 09 #Javascript
javascript实现固定侧边栏
Feb 09 #Javascript
You might like
PHP自动生成表单代码分享
2015/06/19 PHP
php 输入输出流详解及示例代码
2016/08/25 PHP
PHP实现获取url地址中顶级域名的方法示例
2019/06/05 PHP
讨论javascript(一)工厂方式 js面象对象的定义方法
2009/12/15 Javascript
jQuery的初始化与对象构建之浅析
2011/04/12 Javascript
jQuery中removeAttr()方法用法实例
2015/01/05 Javascript
js鼠标悬浮出现遮罩层的方法
2015/01/28 Javascript
jQuery原生的动画效果
2015/07/10 Javascript
jQuery使用ajax跨域获取数据的简单实例
2016/05/18 Javascript
jQuery 选择同时包含两个class的元素的实现方法
2016/06/01 Javascript
Javascript点击其他任意地方隐藏关闭DIV实例
2016/06/21 Javascript
深入理解JavaScript函数参数(推荐)
2016/07/26 Javascript
javascript中的 object 和 function小结
2016/08/14 Javascript
vue实现的上传图片到数据库并显示到页面功能示例
2018/03/17 Javascript
如何更好的编写js async函数
2018/05/13 Javascript
ES6 Set结构的应用实例分析
2019/06/26 Javascript
[02:05]2014DOTA2西雅图邀请赛 老队长全明星大猜想谁不服就按进显示器
2014/07/08 DOTA
Python numpy.array()生成相同元素数组的示例
2018/11/12 Python
对pandas里的loc并列条件索引的实例讲解
2018/11/15 Python
Django框架用户注销功能实现方法分析
2019/05/28 Python
python ChainMap的使用和说明详解
2019/06/11 Python
Python3远程监控程序的实现方法
2019/07/15 Python
如何在Canvas上的图形/图像绑定事件监听的实现
2020/09/16 HTML / CSS
VIVOBAREFOOT赤脚鞋:让您的脚做自然的事情
2017/06/01 全球购物
婴儿鞋,独特的婴儿服装和配件:Zutano
2018/11/03 全球购物
澳大利亚香水在线商店:City Perfume
2020/09/02 全球购物
中层干部竞聘演讲稿
2014/05/15 职场文书
团队口号大全
2014/06/06 职场文书
人事经理岗位职责范本
2014/08/04 职场文书
邻里守望志愿服务活动方案
2014/08/15 职场文书
自我工作评价范文
2015/03/06 职场文书
食堂采购员岗位职责
2015/04/03 职场文书
让生命充满爱观后感
2015/06/08 职场文书
毕业欢送会致辞
2015/07/29 职场文书
信息技术国培研修日志
2015/11/13 职场文书
在虚拟机中安装windows server 2008的图文教程
2022/06/28 Servers