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 相关文章推荐
Prototype使用指南之hash.js
Jan 10 Javascript
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
Apr 14 Javascript
jquery 跨域访问问题解决方法(笔记)
Jun 08 Javascript
关于锚点跳转及jQuery下相关操作与插件
Oct 01 Javascript
PHP+mysql+Highcharts生成饼状图
May 04 Javascript
深入理解jQuery 事件处理
Jun 14 Javascript
原生JavaScrpit中异步请求Ajax实现方法
Nov 03 Javascript
vue项目总结之文件夹结构配置详解
Dec 13 Javascript
JS学习笔记之贪吃蛇小游戏demo实例详解
May 29 Javascript
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
Jun 17 Javascript
微信小程序身份证验证方法实现详解
Jun 28 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
Jul 30 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 批量删除 sql语句
2009/06/05 PHP
php 启动时报错的简单解决方法
2014/01/27 PHP
destoon设置自定义搜索的方法
2014/06/21 PHP
php生成二维码
2015/08/10 PHP
swoole_process实现进程池的方法示例
2018/10/29 PHP
减少访问DOM的次数提升javascript性能
2014/02/24 Javascript
用jquery.sortElements实现table排序
2014/05/04 Javascript
IE6兼容透明背景图片及解决方案
2015/08/19 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
2016/04/28 Javascript
jQuery解决input元素的blur事件和其他非表单元素的click事件冲突问题
2016/08/15 Javascript
nodejs实现的连接MySQL数据库功能示例
2018/01/25 NodeJs
微信小程序使用canvas的画图操作示例
2019/01/18 Javascript
vue实现的网易云音乐在线播放和下载功能案例
2019/02/18 Javascript
运用js实现图层拖拽的功能
2019/05/24 Javascript
[48:31]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第一场 2月2日
2021/03/11 DOTA
Python使用Socket(Https)Post登录百度的实现代码
2012/05/18 Python
Python中列表和元组的使用方法和区别详解
2020/12/30 Python
K-近邻算法的python实现代码分享
2017/12/09 Python
Python中的pack和unpack的使用
2018/03/12 Python
对Python实现简单的API接口实例讲解
2018/12/10 Python
python英语单词测试小程序代码实例
2019/09/09 Python
css3实现波纹特效、H5实现动态波浪效果
2018/01/31 HTML / CSS
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
NBA欧洲商店(英国):NBA Europe Store UK
2018/07/27 全球购物
印度手工编织服装和家居用品商店:Fabindi
2019/10/07 全球购物
J2EE模式面试题
2016/10/11 面试题
会计自我鉴定范文
2013/10/06 职场文书
奥巴马英文演讲稿
2014/05/15 职场文书
个人贷款授权委托书样本
2014/10/07 职场文书
酒店保洁员岗位职责
2015/02/26 职场文书
大学毕业生自我评价
2015/03/02 职场文书
高一英语教学反思
2016/03/03 职场文书
2019年大学推荐信
2019/06/24 职场文书
python实战之90行代码写个猜数字游戏
2021/04/22 Python
详解Java实现数据结构之并查集
2021/06/23 Java/Android