vue.js移动端app实战1:初始配置详解


Posted in Javascript onJuly 24, 2017

本系列将会用vue.js2制作一个移动端的webapp单页面,页面不多,大概在7,8个左右,不过麻雀虽小,五脏俱全,常用的效果如轮播图,下拉刷新,上拉加载,图片懒加载都会用到。css方面也会有一些描述,像不同分辨率的适配,flex布局以及scss来编写mixin来处理2x,3x图等。

vue.js移动端app实战1:初始配置详解

初始工作:

通过vue-cli安装webpack模板后,会自动生成一大堆文件,通常我们只关心src/目录下的东西。
 个人习惯在src下新建一个base目录,用来存放通用的css及js,比如样式重置css,一切js工具函数。

下载好文件后,npm run dev

启动服务你就会看到熟悉的hello vue。由于我们做的是移动端的页面,所以把chrome切换到手机模式(打开开发工具,ctrl+shift+m或者点左上角那个手机)

对于移动端如何适配不同的手机屏幕,估计每个人都有自己的做法,我用的是淘宝的flexible.js,根据不同类型来缩放以及调整html字体的大小,用rem来布局。使用的方法也很简单,只需要引入Js文件就可以了,github地址。

这里简单介绍一下如何计算rem:

假如设计稿为640,有一个div宽200px,则css应该为width:(200/640)*10=3.125rem

假如设计稿为750,有一个div宽200px,则css应该为width:(200/750)*10=2.666rem

可以发现如果每次量好一个DIV宽后都要用一个计算器算一遍,那这速度也太慢了。

假如你用的是scss,那么可以编写一个函数来处理(函数下面的75px来自设计稿大小,假如设计稿为750,则为75;)

@function torem($px) {
 @return $px / 75px * 1rem;
}

假如你用的sublime编辑器,可以到https://github.com/flashlizi/cssrem 下载一个插件,写起来更方便;

字体的处理:

字体方面我们仍然用px来写,不过需要针对不同的缩放比例写不用的大小,比如安卓下,字体大小为14px,那么iphone6下大小应为28,Iphone6s应为42px。flexible.js会根据屏幕缩放比给html添加data-dpr属性,因此可以通过scss编写mixin来处理字体

@mixin fz($font-size) {
 font-size: $font-size;
 [data-dpr="2"] & {
  font-size: $font-size * 2;
 }
 [data-dpr="3"] & {
  font-size: $font-size * 3;
 }
}

需要用到字体的地方,@include fz(16px);

图片的处理:

通常为了适应retain和非retain屏幕,我们会准备不同的图片大小,也就是2x和3x图,我的做法是[data-dpr="3"]下使用3x图,其他情况统一使用2X图。

在为了方便,编写一个mixin来处理:(假设放在2x文件夹和3x文件夹下)

@mixin dpr-img($url,$name,$type:".jpg"){
 background-image: url($url+"2x/"+ $name+"@2x"+$type);
 [data-dpr="3"] &{
  background-image: url($url+"3x/"+ $name+"@3x"+$type);
 }
}

vue.js移动端app实战1:初始配置详解

第一个参数为2x,3x文件夹所在路径,第二个参数为文件名,第三个参数为文件类型,默认为.jpg结尾。

写CSS时有些代码块可能会经常用到,因此也可以写成mixin,比如单行文本溢出和多行文本溢出

@mixin t-overflow($line:1) {
 @if $line==1 {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
 }
 @else {
  display: -webkit-box;
  -webkit-line-clamp: $line;
  -webkit-box-orient: vertical;
  overflow: hidden;
  text-overflow: ellipsis;
 }
}

比如左右垂直居中

@mixin table-center {
 display: table-cell;
 vertical-align: middle;
 text-align: center;
}

@mixin flex-center {
 display: flex;
 justify-content: center;
 align-items: center;
}

字体图标的处理:

页面通常都会有很多小图标,为了减少请求以前可能会用雪碧图来合并,不过我现在基本不用了,用字体图标来代替。我用的是阿里的在线字体图标,上传svg到阿里字体库或者直接使用阿里的图标,选中图标后添加到项目,生成地址后,import到项目中就可已使用了。

vue.js移动端app实战1:初始配置详解

在App.vue中:

@import url('//at.alicdn.com/t/font_nfzwlroyg2vuz0k9.css');

编写main组件:

页面上底部有4个tab,点击时会切换对应的组件,所以Main组件的结构是这样的

<template>
 <div>
  <router-view></router-view>  
  <foot-nav></foot-nav>
 </div>
</template>

foot-nav底部导航的布局如下:

<template>
 <div class="foot-nav-containner">
  <ul class="bottom-nav">
   <router-link tag="li" to='/index' class="bottom-nav__li iconfont icon-shouye bottom-nav__li--home"></router-link>
   <router-link tag="li" to='/search' class="bottom-nav__li iconfont icon-ss bottom-nav__li--search"></router-link>
   <router-link tag="li" to='/car' class="bottom-nav__li iconfont icon-shoppingcart bottom-nav__li--car"></router-link>
   <router-link tag="li" to='/vip' class="bottom-nav__li iconfont icon-gerenzhongxinxia bottom-nav__li--vip"></router-link>
  </ul>
  </div>
</template>

点击底部每个导航,导航上面的组件都会相应的替换。不过要注意点击购物车时,购物车页面底部需要有去结算按钮,所以购物车页面是没有导航的,也就是说购物车的路由配置时不会放在mian路由的children下面。

编写路由:

 

{
  path:'/',
  redirect:"/home"
 }, 
 {
  path:'/home',
  component:Main,
  children:[
   {
    path:'/',
    redirect:"/index"
   },
   {
    path:'/index',
    component:Index
   },
   {
    path:'/search',
    component:Search
   },   
   {
    path:'/vip',
    component:Vip
   }
  ]
 },
 {
  path:'/car',
  component:Car
 }

我们把home路由设置为默认路由,当路由为空时,就会重定向到home路由,home路由下又把index路由设置为默认路由。我们把car设为单独的路由而不是home下,因此点击导航的购物车时就会从home路由切换到car路由,而由于底部的路由是放置在home路由下,所以到了购物车页面导航也就不存在了,这样基本的配置就差不多完成了。

本节先把基本的结构搭建起来,后续才开始进入每个页面内容的编写。

目前已经写好几个页面,项目已上传到github,地址https://github.com/linrunzheng/vueApp

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript中json使用自己总结
Aug 13 Javascript
jQuery拖拽 &amp; 弹出层 介绍与示例
Dec 27 Javascript
javascript编程异常处理实例小结
Nov 30 Javascript
javascript模块化简单解析
Apr 07 Javascript
js实现人民币大写金额形式转换
Apr 27 Javascript
JS检测移动端横竖屏的代码
May 30 Javascript
JavaScript如何实现图片懒加载(lazyload) 提高用户体验(增强版)
Nov 30 Javascript
详解微信小程序 登录获取unionid
Jun 27 Javascript
vue-router之nuxt动态路由设置的两种方法小结
Sep 26 Javascript
webpack4+express+mongodb+vue实现增删改查的示例
Nov 08 Javascript
vuex实现及简略解析(小结)
Mar 01 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
Mar 10 Javascript
React 子组件向父组件传值的方法
Jul 24 #Javascript
浅谈Node.js ORM框架Sequlize之表间关系
Jul 24 #Javascript
vue 实现 tomato timer(蕃茄钟)实例讲解
Jul 24 #Javascript
jQuery实现拼图小游戏(实例讲解)
Jul 24 #jQuery
php register_shutdown_function函数详解
Jul 23 #Javascript
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
Jul 23 #Javascript
JavaScript30 一个月纯 JS 挑战中文指南(英文全集)
Jul 23 #Javascript
You might like
zend framework多模块多布局配置
2011/02/26 PHP
php中日期加减法运算实现代码
2011/12/08 PHP
TMDPHP 模板引擎使用教程
2012/03/13 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
Zend Framework基于Command命令行建立ZF项目的方法
2017/02/18 PHP
js监听输入框值的即时变化onpropertychange、oninput
2011/07/13 Javascript
使用javascript:将其它类型值转换成布尔类型值的解决方法详解
2013/05/07 Javascript
getAsDataURL在Firefox7.0下无法预览本地图片的解决方法
2013/11/15 Javascript
js 获取浏览器版本以此来调整CSS的样式
2014/06/03 Javascript
node.js中的console.trace方法使用说明
2014/12/09 Javascript
基于jQuery实现仿淘宝套餐选择插件
2015/03/04 Javascript
JS实现微信弹出搜索框 多条件查询功能
2016/12/13 Javascript
js仿小米手机上下滑动效果
2017/02/05 Javascript
解决Layui当中的导航条动态添加后渲染失败的问题
2019/09/25 Javascript
ant-design-vue 实现表格内部字段验证功能
2019/12/16 Javascript
跟老齐学Python之私有函数和专有方法
2014/10/24 Python
Python内建数据结构详解
2016/02/03 Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
2016/09/19 Python
基于python中的TCP及UDP(详解)
2017/11/06 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
2018/04/19 Python
python opencv实现运动检测
2018/07/10 Python
浅谈Python批处理文件夹中的txt文件
2019/03/11 Python
Python批量查询关键词微信指数实例方法
2019/06/27 Python
python自动化测试之DDT数据驱动的实现代码
2019/07/23 Python
Scrapy框架介绍之Puppeteer渲染的使用
2020/06/19 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
2020/10/22 Python
pycharm中选中一个单词替换所有重复单词的实现方法
2020/11/17 Python
HTML5之SVG 2D入门5—颜色的表示及定义方式
2013/01/30 HTML / CSS
英国著名的茶叶品牌:Whittard of Chelsea
2016/09/22 全球购物
Gloeilampgoedkoop荷兰:在线购买灯泡
2019/02/16 全球购物
建筑工程技术应届生自荐信
2013/09/27 职场文书
八年级历史教学反思
2014/01/10 职场文书
知识竞赛拉拉队口号
2014/06/16 职场文书
2015年技术员工作总结
2015/04/10 职场文书
导游词之云南省玉龙雪山
2019/12/19 职场文书
Spring Security动态权限的实现方法详解
2022/06/16 Java/Android