赞
踩
简述:主流APP:原生APP、H5(webapp)、混合APP,相对应的定制研发即原生开发、H5开发、混合开发
简述:HTML5开发,利用WEB技术进行的APP开发。可以在手机浏览器上打开的网站
优缺点:
简述:将原生的代码利用WebView插件或者其他框架为H5提供容器,程序主要的业务实现、界面展示都是由H5完成
优缺点:
1、原生主导开发模式:需要安卓和IOS开发人员,整个APP既有原生开发又有H5开发,在需要H5页面时由原生开发人员实现内联
2、H5主导的开发:只需H5开发工程师,借助一些封装好的工具实现应用的打包和调用原生设备的功能,比如Builder的云端打包功能
页面下拉刷新时,如果没有明显的刷新现象,则是原生开发;H5会闪一下屏
下拉页面的时候显示网址就是H5开发
`<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">`
语法:
伸缩容器 display:flex
伸缩流方向 flex-direction : row | row-reverse | column | column-reverse解释:reverse反向
伸缩换行flex-wrap:适用于伸缩容器,也就是伸缩项目的父元素,主要用来定义伸缩容器里是单行还是多行显示。语法:flex-wrap:nowrap | wrap | wrap-reverse
主轴对齐justify-content:flex-start | flex-end | center | space-between | space-around解释:主轴对齐适用于伸缩容器,主要用来定义伸缩项目沿着主轴线的对齐方式。其中:flex-start:伸缩项目向一行的起始位置靠齐
space-between:伸缩项目会平均分布在行里。第一个伸缩项目在一行中的最开始位置,最后一个伸缩项目在一行中的终点位置。 space-around:伸缩项目会平均分布在行里,两端保留一半的空间。
侧轴对齐align-items和align-self
伸缩项目在侧轴的对齐方式,主要由属性align-items控制
语法:align-items:flex-start | flex-end | center | baseline | stretch解释:baseline:根据伸缩项目的基线对齐,基线根据伸缩项目的内容计算得到。stretch:默认值,伸缩项目拉伸填充整个伸缩容器
伸缩项目自身在侧轴的对齐方式,主要由属性align-self控制属性值同align-items,实际上相当于特殊给自己定义对齐方式
堆栈伸缩行align-content
语法:align-content : flex-start | flex-end | center | space-between | space-around | stetch解释:stetch:默认值,各行将会伸展以占用额外的空间这个属性只有伸缩项目有多行时才生效,这种情况只有flex-wrap为wrap时,并且没有足够的空间把伸缩项目行放在同一行中。也就是这个属性将对每一行起作用而不是每个伸缩项目。
伸缩性flex
语法:flex : none | flex-grow
显示顺序order
语法:order : number
解释:改变伸缩项目出现在源文档的次序。eg:order:1 ; order : 2伸缩容器会以序号最小的组开始布局,在同一个组里的伸缩项目依据源文档里的次序布局
px2rem 结合lib-flexible 1、安装: npm i lib-flexible --save npm i px2rem-loader --save-dev 2、引入 在main.js中引入 import 'lib-flexible' 3、配置 vue.config.js中 // css: module.exports = { chainWebpack: config => { config.module .rule('css') .test(/\.css$/) .oneOf('vue') .resourceQuery(/\?vue/) .use('px2rem') .loader('px2rem-loader') .options({ remUnit: 75 }) } // less: .rule('less') .test(/\.less$/) .oneOf('vue') .resourceQuery(/\?vue/) .use('px2rem') .loader('px2rem-loader') .before('postcss-loader') .options({ remUnit: 75 }) .end() 4、使用:750px的设计图量多少px就直接写多少px即可 5、补充: (1)按照px来编写都会转化成rem的形式,但是有些地方我们不想转换,可以用下面两种方法。 a.在px后面添加/*no*/或者单位写成大写的PX,不会转化px,会原样输出。 — 一般border需用这个 b.在px后面添加/*px*/,会根据dpr的不同,生成三套代码。---- 一般字体需用这个 * postcss-pxtorem 结合lib-flexible(推荐) 1、安装:npm install postcss-pxtorem -D 2、vue.config.js中配置
- css: {
- loaderOptions: {
- postcss: {
- plugins: [
- require('postcss-pxtorem')({
- rootValue : 75, // 换算的基数
- selectorBlackList : ['weui','mu'], // 忽略转换正则匹配项
- propList : ['*'],
- }),
- ]
- }
- }
- }
3、rem函数:结合lib-flexible(推荐)
- // 设置 rem 函数
- function setRem () {
-
- // 320 默认大小16px; 320px = 20rem ;每个元素px基础上/16
- let htmlWidth = document.documentElement.clientWidth || document.body.clientWidth;
- //得到html的Dom元素
- let htmlDom = document.getElementsByTagName('html')[0];
- //设置根元素字体大小
- htmlDom.style.fontSize= htmlWidth/10 + 'px';
- }
- // 初始化
- setRem();
- // 改变窗口大小时重新设置 rem
- window.onresize = function () {
- setRem()
- }
只要结合百分比布局和弹性盒布局使用。手机端视觉体验上差别不大,根据项目具体情况选择技术方案,一般border边框和字体大小可以使用px
1、H5开发兼容性
transition 谨慎使用
一定要遵守url传参规范url标准形式:特殊字符:,"" {} {name:xxx} ## 空格 等等问题:IOS有可能h会出现白屏
2、与原生App"互斥"的功能
下拉刷新(推荐由H5的开发工程师实现)
overflow-y
android和h5交互
window.control.callHandler("事件名","参数")
1.打开带小程序标题新页面
事件名js_wx 参数是JSON.stringify({"url": path})
例子:打开百度网址的新页面window.control.callHandler("js_wx", JSON.stringify({
"url": "https://www.baidu.com/" }))
2.打开本地h5页面(主要针对需要打开word\pdf文件)
事件名js_native 参数是JSON.stringify({"name": name})例子:打开日报window.control.callHandler("js_native", JSON.stringify({
"name": "dailyReport" }))
3.token失效退出登录事件名token_invalid 参数是""window.control.callHandler("token_invalid","")
4.控制首页隐藏、显示底部栏window.control.callHandler("bottom_title","show") 显示window.control.callHandler("bottom_title","invisible") 隐藏
5.h5透明标题 结合1方法url参数带transparentTitle=1
IOS与H5交互window.webkit.messageHandlers.js_wx.postMessage(JSON.stringify({
'url': url
}))
1、根据插件查看包的大小和体检,进行针对性分析--方式一
安装:npm install webpack-bundle-analyzer --save-dev
配置:
vue.config.js
- module.exports = {
- chainWebpack: config => {
- if (process.env.use_analyzer) {
- config
- .plugin('webpack-bundle-analyzer')
- .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
- }
- }
- }
package.json
- {
- "scripts”: {
- ...
- "analyzer": "use_analyzer=true npm run serve”
- }
2、CDN引入--方式二
index.html cdn引入
vue.config.js
- configureWebpack: config => {
-
- // devtool: 'source-map'
-
- // 优化,采用外部CDN
-
- config.externals = {
-
- 'vue':'Vue',
-
- 'element-ui':'ELEMENT',
-
- 'echarts':'echarts'
-
- }
-
- },
3、Gzip压缩--方式三
1、安装依赖:npm install --save-dev compression-webpack-plugin
2、vue.config.js进行配置
const CompressionWebpackPlugin = require('compression-webpack-plugin')
const isProduction = process.env.NODE_ENV === 'production'// 需要gzip压缩的文件后缀
- const productionGzipExtensions = ['js', 'css']
-
- configureWebpack: config => {
-
- // devtool: 'source-map'
-
- if (isProduction) {
- config.plugins.push(new CompressionWebpackPlugin({
- algorithm: 'gzip',
- test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'),
- threshold: 10240,
- minRatio: 0.8
- })
- )
- }
-
- }
在mian.js文件里引入: import Vconsole from 'vconsole'
const vconsole = new Vconsole Vue.use(vconsole)
参考网址:GitHub - liriliri/eruda: Console for mobile browsers
npm install eruda
在 main.js里引入:
erdua.init()
Vue.prototype.$echarts = echarts
概念:其实webview就是用来展示的view组件,他是使用webkit引擎来进行展示,它具有前进后退放大缩小等功能,简单来说,webview就相当于在你的手机中安装一个高性能的webkit浏览器。
webview的初始化浏览器:网络请求耗时->服务端处理->渲染耗时->完成webview:webview初始化->网络请求耗时->服务端处理->渲染耗时->完成
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。