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 相关文章推荐
javascript 读取xml,写入xml 实现代码
Jul 10 Javascript
原生JS操作网页给p元素添加onclick事件及表格隔行变色
Dec 01 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
Jan 11 Javascript
使用RequireJS优化JavaScript引用代码的方法
Jul 01 Javascript
JavaScript实现广告的关闭与显示效果实例
Jul 02 Javascript
SWFObject基本用法实例分析
Jul 20 Javascript
详解浏览器渲染页面过程
Feb 09 Javascript
Bootstrap媒体对象学习使用
Mar 07 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
Sep 20 Javascript
在vue里面设置全局变量或数据的方法
Mar 09 Javascript
vue获取验证码倒计时组件
Aug 26 Javascript
JS指定音频audio在某个时间点进行播放
Nov 28 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
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
2013/08/06 PHP
php实现快速排序的三种方法分享
2014/03/12 PHP
PHP中把数据库查询结果输出为json格式简单实例
2015/04/09 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
JavaScript制作windows经典扫雷小游戏
2015/03/31 Javascript
jquery获取下拉框中的循环值
2017/02/08 Javascript
浅谈MUI框架中加载外部网页或服务器数据的方法
2018/01/31 Javascript
vue中echarts3.0自适应的方法
2018/02/26 Javascript
vue.js 底部导航栏 一级路由显示 子路由不显示的解决方法
2018/03/09 Javascript
基于node搭建服务器,写接口,调接口,跨域的实例
2018/05/13 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
2019/06/14 Javascript
jQuery操作事件完整实例分析
2020/01/10 jQuery
Vue3 的响应式和以前有什么区别,Proxy 无敌?
2020/05/20 Javascript
JQuery获得内容和属性方法解析
2020/05/30 jQuery
原生javascript如何实现共享onload事件
2020/07/03 Javascript
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
用Python的Django框架来制作一个RSS阅读器
2015/07/22 Python
浅谈python 线程池threadpool之实现
2017/11/17 Python
python批量查询、汉字去重处理CSV文件
2018/05/31 Python
python用plt画图时,cmp设置方法
2018/12/13 Python
Python3爬虫之自动查询天气并实现语音播报
2019/02/21 Python
使用TensorFlow搭建一个全连接神经网络教程
2020/02/06 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
2020/06/01 Python
python时间time模块处理大全
2020/10/25 Python
PyQt5中QSpinBox计数器的实现
2021/01/18 Python
纯css实现照片墙3D效果的示例代码
2017/11/13 HTML / CSS
HTML5的结构和语义(5):交互
2008/10/17 HTML / CSS
AmazeUI 面板的实现示例
2020/08/17 HTML / CSS
世界排名第一的万圣节服装店:Spirit Halloween
2018/10/16 全球购物
KARATOV珠宝在线商店:俄罗斯珠宝品牌
2019/03/13 全球购物
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
小学教学随笔感言
2014/02/26 职场文书
读群众路线心得体会
2014/03/07 职场文书
2015年世界无烟日活动总结
2015/02/10 职场文书
golang使用map实现去除重复数组
2022/04/14 Golang