Vue.js实现模拟微信朋友圈开发demo


Posted in Javascript onApril 20, 2017

我用Vue.js实现微信朋友圈的一些功能,实现展示朋友圈,评论,点赞。

先构造一个vue的实例,对会更改的数据进行双向绑定,

我用JSON伪造模版数据,先实现显示朋友圈的效果,使用v-for方法去循环ALLFeeds中的每一项item生成包括name、content、time在内的各项数据。

微信朋友圈实现效果

Vue.js实现模拟微信朋友圈开发demo

HTML代码:

<div class="border" v-for="item in AllFeeds" track-by="$index">
      <div class="user-pic">
       <img v-bind:src="item.url" alt="">
      </div>
      <div class="user-content">
       <h2 class="spacing">{{item.name}}</h2>
       <p class="spacing">{{item.content}}</p>
       <img class="spacing" v-bind:src="item.picUrl" alt="">
       <span class="spacing time">{{item.time}}</span>
       <div class="commit" v-show="item.showComt">
        <a v-on:click="likeClick($event,item)" class="btn btn-left" href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >
         <span class="icon-heart-empty"></span>{{item.like}}
        </a>
        <a v-on:click="comtClick($event,item)" href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="btn btn-comment">
         <span class="icon-comment-alt"></span>评论
        </a>
       </div>

实现朋友圈点赞

当like的值变为赞时,向userLike中push一个点赞的username,然后将like的值变为取消。当用户点击取消按钮的时候,将userLike数组中添加的赞pop掉。

likeClick: function (event, feed) {
     event.stopPropagation();
     if (feed.like === "赞") {
      if (gUserInfo) {
       feed.userLike.push(gUserInfo.username);
       feed.like = '取消';
      }
     } else {
      if (gUserInfo) {
       feed.userLike.pop();
       feed.like = '赞';
      }
     }
    }

实现评论功能

input的val()push到content的值里。

inputClick: function (event) {
     event.stopPropagation();
     var comText = $(".inset input").val();
     this.clickFeed.comment.push({"name": gUserInfo.username, "content": comText});
     $(".inset").addClass("hidden");
     $(".overplay").addClass("hidden");
     $('.inset input').val('');
    }

实现评论回复功能

给comment中添加reply的key。由于微信的回复是平铺的所以只要显示谁对谁的回复即可,不需要进行评论的嵌套。所以HTML中使用v-if对comment中是否存在reply进行判断。

replyClick:function(event){
     event.stopPropagation();
     var replyText = $(".replybox input").val();
     this.clickFeed.comment.push({
      "name":gUserInfo.username,
      "content":replyText,
      "reply":this.replyUser
     });
     $(".replybox").addClass("hidden");
     $(".overplay").addClass("hidden");
     $(".replybox input").val('');
    }

对comment中是否存在reply进行判断 

<div v-if="!(onecommet.reply)">
             <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" v-on:click="replyComt($event,item,onecommet)" class="reply">
              <span class="user">{{onecommet.name}}:</span>
              {{onecommet.content}}
             </a>
            </div>
            <div v-else>
             <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" v-on:click="replyComt($event,item,onecommet)" class="reply">
              <span class="user">{{userinfo.username}}</span>回复 <span class="user">{{replyUser}}:
              <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="reply">{{onecommet.content}}</a>
             </span>
             </a>
            </div>

遇到的坑:

当异步加载JSON的时候,不能直接获取到JSON的值,因为可能等下面函数加载完后JSON的值还未拿到。所以会出现data数据为undefined的情况。所以需要在JSON的回调函数中进行函数调用。

初始化showComt时,需要用到ready,当DOM加载完后再执行。

收获:

学会了使用v-for、v-if、v-show,v-on:click等vue的方法,vue的构造器,jQuery的Ajax相关的方法。

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

Javascript 相关文章推荐
jquery中eq和get的区别与使用方法
Apr 14 Javascript
jQuery 事件的命名空间简单了解
Nov 22 Javascript
基于JavaScript实现手机短信按钮倒计时(超简单)
Dec 30 Javascript
jquery实现简单的banner轮播效果【实例】
Mar 30 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
Aug 09 Javascript
利用jsonp跨域调用百度js实现搜索框智能提示
Aug 24 Javascript
jQuery实现页面顶部下拉广告
Dec 30 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
Jul 09 Javascript
使用angular-cli webpack创建多个包的方法
Oct 16 Javascript
js实现列表向上无限滚动
Jan 13 Javascript
Js视频播放器插件Video.js使用方法详解
Feb 04 Javascript
Vue Element-ui表单校验规则实现
Jul 09 Vue.js
AngularJS 单选框及多选框的双向动态绑定
Apr 20 #Javascript
Vue如何引入远程JS文件
Apr 20 #Javascript
AngularJS改变元素显示状态
Apr 20 #Javascript
bootstrap 设置checkbox部分选中效果
Apr 20 #Javascript
详解Vue2.0之去掉组件click事件的native修饰
Apr 20 #Javascript
AngularJS实现根据不同条件显示不同控件
Apr 20 #Javascript
详解Vuejs2.0之异步跨域请求
Apr 20 #Javascript
You might like
教你IIS6的PHP最佳配置方法
2006/09/05 PHP
PHP 遍历XP文件夹下所有文件
2008/11/27 PHP
Views rows style模板重写代码
2011/05/16 PHP
PHP缓存技术的使用说明
2011/08/06 PHP
php自动更新版权信息显示的方法
2015/06/19 PHP
PHP7新特性foreach 修改示例介绍
2016/08/26 PHP
php通过pecl方式安装扩展的实例讲解
2018/02/02 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
asp.net下利用js实现返回上一页的实现方法小集
2009/11/24 Javascript
js 判断计算字符串长度/判断空的简单方法
2013/08/05 Javascript
JavaScript中的ubound函数使用实例
2014/11/04 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
jQuery 3 中的新增功能汇总介绍
2016/06/12 Javascript
AngularJS 入门教程之HTML DOM实例详解
2016/07/28 Javascript
JS控件bootstrap datepicker使用方法详解
2017/03/25 Javascript
es6+angular1.X+webpack 实现按路由功能打包项目的示例
2017/08/16 Javascript
javascript  删除select中的所有option的实例
2017/09/17 Javascript
微信小程序实现下拉刷新动画
2019/06/21 Javascript
tensorflow实现softma识别MNIST
2018/03/12 Python
pycharm 配置远程解释器的方法
2018/10/28 Python
Python实现求两个数组交集的方法示例
2019/02/23 Python
VSCode中自动为Python文件添加头部注释
2019/11/14 Python
如何在django中添加日志功能
2020/02/06 Python
PyTorch中的C++扩展实现
2020/04/02 Python
解决Keras TensorFlow 混编中 trainable=False设置无效问题
2020/06/28 Python
使用html5 canvas创建太空游戏的示例
2014/05/08 HTML / CSS
台湾最大网路书店:博客来
2018/03/18 全球购物
干部培训自我鉴定
2014/01/22 职场文书
《台湾的蝴蝶谷》教学反思
2014/02/20 职场文书
保险公司早会主持词
2014/03/22 职场文书
经贸专业毕业生求职信
2014/03/23 职场文书
护士实习求职信
2014/06/22 职场文书
村主任个人对照检查材料
2014/10/01 职场文书
遗嘱继承权公证书
2015/01/26 职场文书
2015年员工工作总结范文
2015/04/08 职场文书