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子窗口ModalDialog中操作父窗口对像
Dec 11 Javascript
jQuery让控件左右移动的三种实现方法
Sep 08 Javascript
$.each与$().each的区别示例介绍
Mar 20 Javascript
JavaScript获得指定对象大小的方法
Jul 01 Javascript
学习javascript面向对象 理解javascript对象
Jan 04 Javascript
ichart.js绘制虚线、平均分虚线效果的实现代码
May 05 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
Nov 09 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
Dec 25 Javascript
footer定位页面底部(代码分享)
Mar 07 Javascript
信息滚动效果的实例讲解
Sep 18 Javascript
在Vue中使用antv的示例代码
Jun 29 Javascript
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
Dec 09 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 操作数组(合并,拆分,追加,查找,删除等)
2012/07/20 PHP
PHP取整函数:ceil,floor,round,intval的区别详细解析
2013/08/31 PHP
php微信公众号开发(4)php实现自定义关键字回复
2016/12/15 PHP
jQuery之字体大小的设置方法
2014/02/27 Javascript
一个判断抢购时间是否到达的简单的js函数
2014/06/23 Javascript
ztree获取当前选中节点子节点id集合的方法
2015/02/12 Javascript
JS实现向表格行添加新单元格的方法
2015/03/30 Javascript
js实现Select列表内容自动滚动效果代码
2015/08/20 Javascript
JavaScript实现的多个图片广告交替显示效果代码
2015/09/04 Javascript
深入浅析JavaScript中prototype和proto的关系
2015/11/15 Javascript
详解angular路由高亮之RouterLinkActive
2018/04/28 Javascript
实例详解BootStrap的动态模态框及静态模态框
2018/08/13 Javascript
javascript中floor使用方法总结
2019/02/02 Javascript
JavaScript实现的拼图算法分析
2019/02/13 Javascript
JS实现网页端猜数字小游戏
2020/03/06 Javascript
JavaScript ECMA-262-3 深入解析(一):执行上下文实例分析
2020/04/25 Javascript
jQuery zTree如何改变指定节点文本样式
2020/10/16 jQuery
PHP魔术方法__ISSET、__UNSET使用实例
2014/11/25 Python
Python os模块介绍
2014/11/30 Python
Python压缩和解压缩zip文件
2015/02/14 Python
Python黑魔法@property装饰器的使用技巧解析
2016/06/16 Python
python获取程序执行文件路径的方法(推荐)
2018/04/26 Python
Python绘制KS曲线的实现方法
2018/08/13 Python
python实现五子棋人机对战游戏
2020/03/25 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
2020/10/16 Python
python如何编写类似nmap的扫描工具
2020/11/06 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
马来西亚航空官方网站:Malaysia Airlines
2017/07/28 全球购物
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
加州风格的游泳和沙滩装品牌:Cupshe
2019/06/10 全球购物
个人实用简单的自我评价
2013/10/19 职场文书
高职教师岗位职责
2013/12/24 职场文书
先进个人获奖感言
2014/01/24 职场文书
2014元旦晚会策划方案
2014/02/19 职场文书
质监局领导班子践行群众路线整改方案
2014/10/26 职场文书
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/06 PostgreSQL