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 相关文章推荐
超级简单的图片防盗(HTML),好用
Apr 08 Javascript
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
Jul 13 Javascript
js代码实现的加入收藏效果并兼容主流浏览器
Jun 23 Javascript
JavaScript面向对象的实现方法小结
Apr 14 Javascript
JavaScript运算符小结
Jun 03 Javascript
使用bootstrap3开发响应式网站
May 12 Javascript
jquery文字填写自动高度的实现方法
Nov 07 Javascript
js 两个日期比较相差多少天的实例
Oct 19 Javascript
Vue高版本中一些新特性的使用详解
Sep 25 Javascript
JS工厂模式开发实践案例分析
Oct 17 Javascript
Node对CommonJS的模块规范
Nov 06 Javascript
Vue深入理解插槽slot的使用
Aug 05 Vue.js
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
怎么在Windows系统中搭建php环境
2013/08/31 PHP
Destoon旺旺无法正常显示,点击提示“会员名不存在”的解决办法
2014/06/21 PHP
PHP计算近1年的所有月份
2017/03/13 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
JavaScript Event事件学习第一章 Event介绍
2010/02/07 Javascript
javascript 基础篇3 类,回调函数,内置对象,事件处理
2012/03/14 Javascript
jQuery输入城市查看地图使用介绍
2013/05/08 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
2013/12/26 Javascript
jQuery Validate 验证,校验规则写在控件中的具体实例
2014/02/27 Javascript
javascript刷新父页面的各种方法汇总
2014/09/03 Javascript
Javascript获取CSS伪元素属性的实现代码
2014/09/28 Javascript
javascript中setInterval的用法
2015/07/19 Javascript
js阻止浏览器默认行为触发的通用方法(推荐)
2016/05/15 Javascript
Vue自定义指令介绍(2)
2016/12/08 Javascript
vue双向数据绑定原理探究(附demo)
2017/01/17 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
2017/03/15 Javascript
原生js实现拖拽功能基本思路详解
2018/04/18 Javascript
node app 打包工具pkg的具体使用
2019/01/17 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
[00:32]DOTA2上海特级锦标赛 COL战队宣传片
2016/03/04 DOTA
python 运算符 供重载参考
2009/06/11 Python
Python中删除文件的程序代码
2011/03/13 Python
python制作企业邮箱的爆破脚本
2016/10/05 Python
Python中运算符"=="和"is"的详解
2016/10/08 Python
pandas去重复行并分类汇总的实现方法
2019/01/29 Python
django 框架实现的用户注册、登录、退出功能示例
2019/11/28 Python
Pandas时间序列:重采样及频率转换方式
2019/12/26 Python
matplotlib事件处理基础(事件绑定、事件属性)
2021/02/03 Python
香港万宁官方海外旗舰店:香港健与美连锁店
2018/09/27 全球购物
庆七一活动方案
2014/01/25 职场文书
大型会议策划方案
2014/05/17 职场文书
药店促销活动策划方案
2014/08/24 职场文书
2014医学院领导班子对照检查材料思想汇报
2014/09/19 职场文书
护士个人年终总结
2015/02/13 职场文书
读书笔记格式
2015/07/02 职场文书