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 相关文章推荐
Script的加载方法小结
Jan 12 Javascript
Js实现无刷新删除内容
Apr 29 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
Sep 01 Javascript
jQuery实现两款有动画功能的导航菜单代码
Sep 16 Javascript
12个超实用的JQuery代码片段
Nov 02 Javascript
比较常见的javascript中定义函数的区别
Nov 09 Javascript
javascript多物体运动实现方法分析
Jan 08 Javascript
vue 实现 tomato timer(蕃茄钟)实例讲解
Jul 24 Javascript
javascript基于定时器实现进度条功能实例
Oct 13 Javascript
vue 指定组件缓存实例详解
Apr 01 Javascript
Webpack之tree-starking 解析
Sep 11 Javascript
浅谈webpack devtool里的7种SourceMap模式
Jan 14 Javascript
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
PHP数组排序之sort、asort与ksort用法实例
2014/09/08 PHP
php中print(),print_r(),echo()的区别详解
2014/12/01 PHP
php中使用gd库实现下载网页中所有图片
2015/05/12 PHP
ThinkPHP安装和设置
2015/07/27 PHP
php mysql like 实现多关键词搜索的方法
2016/10/29 PHP
php PDO实现的事务回滚示例
2017/03/23 PHP
&amp;lt;script defer&amp;gt; defer 是什么意思
2009/05/10 Javascript
模仿百度三维地图的js数据分享
2011/05/12 Javascript
jQuery实用基础超详细介绍
2013/04/11 Javascript
javascript中2个感叹号的用法实例详解
2014/09/04 Javascript
JavaScript页面模板库handlebars的简单用法
2015/03/02 Javascript
jquery实现的美女拼图游戏实例
2015/05/04 Javascript
JavaScript生成验证码并实现验证功能
2016/09/24 Javascript
Jq通过td获取同行其它列td的方法
2016/10/05 Javascript
JS闭包用法实例分析
2017/03/27 Javascript
Angular排序实例详解
2017/06/28 Javascript
微信小程序实现表单校验功能
2020/03/30 Javascript
Angular.js通过自定义指令directive实现滑块滑动效果
2017/10/13 Javascript
AngularJS实现的获取焦点及失去焦点时的表单验证功能示例
2017/10/25 Javascript
cdn模式下vue的基本用法详解
2018/10/07 Javascript
Python 数据结构之堆栈实例代码
2017/01/22 Python
对Python模块导入时全局变量__all__的作用详解
2019/01/11 Python
Python 从subprocess运行的子进程中实时获取输出的例子
2019/08/14 Python
Python中Subprocess的不同函数解析
2019/12/10 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
2020/11/17 Python
python 自动识别并连接串口的实现
2021/01/19 Python
HTML5的表单(绝对特别强大的功能)使用示例
2013/06/20 HTML / CSS
美国葡萄酒网上商店:Martha Stewart Wine Co.
2019/03/17 全球购物
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
2013/03/30 面试题
自动化工程专业个人应聘自荐信
2013/09/26 职场文书
还款承诺书范文
2014/05/20 职场文书
邀请函模板
2015/02/02 职场文书
大明湖导游词
2015/02/03 职场文书
网络研修随笔感言
2015/11/18 职场文书
校园文化艺术节开幕词
2016/03/04 职场文书
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis