Vue仿今日头条实例详解


Posted in Javascript onFebruary 06, 2018

前言

vue也弄了一段时间了, 前段时间一直想用vue写个移动端,加之年底也不是很忙,于是前几天便着手开始弄了,到今天为止也算是勉强能看了

因为也是纯粹的写写前端页面,所以数据方面用的是mock.js,为了真实的模拟请求,可以直接在 Easy Mock 自己生成API
也可直接登陆我这项目的Easy Mock账号密码:

账号: vue-toutiao
密码: 123456

如果你想修改接口,请copy一份在修改

如果你想后台接口也自己开发的话。可以阅读我这篇博客 Vue + Node + Mongodb 开发一个完整博客流程

技术栈:

vue + webpack + vuex + axios

结构:

  • build: webpack配置
  • config: 项目配置参数
  • src
  • assets: 静态资源文件,存放图片啥的
  • components: 常用组件。例如 弹窗 等等。。。
  • directive: 常用指令封装
  • router: 路由表
  • store: 状态管理 vuex
  • styles: 样式文件
  • utils: 常用工具类封装
  • views: 视图页面
  • static: 静态文件: 存放 favicon.ico 等等
  • 此项目用到了 DllPlugin 进行打包处理,所有启动该项目时记得,先执行一次该脚本命令生成配置

效果演示:

Vue仿今日头条实例详解

Vue仿今日头条实例详解

Vue仿今日头条实例详解

Vue仿今日头条实例详解

Vue仿今日头条实例详解

几个常用的知识点

1. 路由懒加载

{
  path: '/development',
  name: 'development',
  component: (resolve) => {
    require(['../views/development.vue'], resolve)
  }
}

const _import_ = file => () => import('views/' + file + '.vue')

{
  path: '/development',
  name: 'development',
  component: _import_('development')
}

2. 登陆拦截

通过路由的 beforeEach 钩子函数来判断是否需要登陆

// 如:系统设置需要登陆
{ 
  path: '/system', 
  name: '系统设置', 
  meta: { 
    login: true
  },
  component: _import_('System/index')
}

router.beforeEach((to, from, next) => {
  if (to.meta.login) { //判断前往的界面是否需要登陆
    if (store.state.user.user.name) { // 是否已经登陆
      next()
    }else{
      Vue.prototype.$alert('请先登录!')
        .then( () => {
          store.state.user.isLogin = true
        })
    }
  }else{
    if (to.meta.page) store.state.app.pageLoading = true
    next() 
  }
  
})

3. 动画切换

通过检测设置在 Router上的animate属性 来判断它做什么样的切换动画

Router.prototype.animate = 0

// 获取每个路由meta上面的slide 来判断它做什么动画
{ 
  path: '/system', 
  name: '系统设置', 
  meta: { 
    slide: 1 
  },
  component: _import_('System/index')
}


watch: {
  $route (to, from) {
    /*
    0: 不做动画
    1: 左切换
    2: 右切换
    3: 上切换
    4: 下切换
    ...
     */
    let animate = this.$router.animate || to.meta.slide
    if (!animate) {
      this.animate = '' 
    }else{
      this.animate = animate === 1 ? 'slide-left' :
        animate === 2 ? 'slide-right' :
        animate === 3 ? 'slide-top' :
        animate === 4 ? 'slide-bottom' : ''
    }
    this.$router.animate = 0
  }
}

4. 视频播放

因为在IOS上 无法隐藏video的controls ,所以我们可以隐藏video,通过绘制canvas来达到播放视频的效果

5. icon采用的是 阿里巴巴矢量图

6. mock.js

7. Easy Mock

代码实例:https://github.com/cd-dongzi/vue-project/tree/master/vue-toutiao

Javascript 相关文章推荐
javascript Xml增删改查(IE下)操作实现代码
Jan 30 Javascript
jquery事件与函数的使用介绍
Sep 29 Javascript
jqgrid 编辑添加功能详细解析
Nov 08 Javascript
Javascript获取CSS伪元素属性的实现代码
Sep 28 Javascript
微信小程序 122100版本更新问题解决方案
Dec 22 Javascript
bootstrap制作jsp页面(根据值让table显示选中)
Jan 05 Javascript
浅谈键盘上回车按钮的js触发事件
Feb 13 Javascript
js前端实现图片懒加载(lazyload)的两种方式
Apr 24 Javascript
js用类封装pop弹窗组件
Oct 08 Javascript
如何进行微信公众号开发的本地调试的方法
Jun 16 Javascript
vuejs+element UI table表格中实现禁用部分复选框的方法
Sep 20 Javascript
JS获取一个字符串中指定字符串第n次出现的位置
Feb 10 Javascript
electron demo项目npm install安装失败的解决方法
Feb 06 #Javascript
详解React开发必不可少的eslint配置
Feb 05 #Javascript
详解js的作用域、预解析机制
Feb 05 #Javascript
Vue使用枚举类型实现HTML下拉框步骤详解
Feb 05 #Javascript
jQuery实现动态显示select下拉列表数据的方法
Feb 05 #jQuery
详解vue静态资源打包中的坑与解决方案
Feb 05 #Javascript
理解Koa2中的async&await的用法
Feb 05 #Javascript
You might like
PHP实现分页的一个示例
2006/10/09 PHP
PHP开发框架kohana中处理ajax请求的例子
2014/07/14 PHP
php保存二进制原始数据为图片的程序代码
2014/10/14 PHP
PHP中捕获超时事件的方法实例
2015/02/12 PHP
php三种实现多线程类似的方法
2015/10/30 PHP
Extjs4 GridPanel的主要配置参数详细介绍
2013/04/18 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
js给selected添加options的方法
2015/05/06 Javascript
浅谈javascript中return语句
2015/07/15 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
2016/12/02 Javascript
windows下vue-cli及webpack搭建安装环境
2017/04/25 Javascript
Angular实现的进度条功能示例
2018/02/18 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
微信小程序调用摄像头隐藏式拍照功能
2018/08/22 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
2018/09/16 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
vue组件中watch props根据v-if动态判断并挂载DOM的问题
2019/05/12 Javascript
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
对Layer弹窗使用及返回数据接收的实例详解
2019/09/26 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
Python实现将DOC文档转换为PDF的方法
2015/07/25 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
Python定义二叉树及4种遍历方法实例详解
2018/07/05 Python
pytorch 状态字典:state_dict使用详解
2020/01/17 Python
python 安装impala包步骤
2020/03/28 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
2020/04/07 Python
Django Model中字段(field)的各种选项说明
2020/05/19 Python
Python导入数值型Excel数据并生成矩阵操作
2020/06/09 Python
使用npy转image图像并保存的实例
2020/07/01 Python
解决Django响应JsonResponse返回json格式数据报错问题
2020/08/09 Python
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
国税会议欢迎词
2014/01/16 职场文书
夫妻忠诚协议范文
2014/11/16 职场文书
小学教师师德培训心得体会
2016/01/09 职场文书
详解Django中 render() 函数的使用方法
2021/04/22 Python
Redis监控工具RedisInsight安装与使用
2022/03/21 Redis