mui开发app前言(一)
dcloud mui开发app前言
大一那会就听说html5快要发布了,前景无量,厉害到能写操作系统==|||(什么???蛤?)
似乎html5标准还没正式发布那会,使用hybrid模式开发app已经起步,阿里就是国内这一领域的布道者。(你看看淘宝,支付宝,一处开发,处处运行,多卡,呸,多叼啊)
如今w3c联盟发布html5已经三个年头了。我才刚刚开始涉足,真是惭愧,马上要考研了,最近一个外包项目拖缓了我学习高数的脚步,该项目我完全使用了基于dcloud html5+的混合式开发app技术(考完研我会对项目构建写一些随笔,里面用到了大量html5+的API,包括map,audio,payment,share,等等等利用率很高,可以做个example),做了这么久,终于有空总结一下这一路的坑坑洼洼。
dcloud的产品线比较纷杂,大家可以去官网看看:http://www.dcloud.io/
主要包括了mui,hbuilder,5+sdk,native.js,html5+规范,近期还推出了一个流应用。
其中html5+是类似并基于w3c html5的一套规范,目前由html5+中国产业联盟负责定制撰写文档
官网:http://www.html5plus.org/doc/h5p.html
mui是dcloud开发的一个十分精简的前端框架,核心包含了mui.css,mui.js,基本就类似于bootstrap这样的前端框架,如果是用来开发web,wap等项目的话似乎有点过于精简而溃乏,但是对于app来说,里面的布局和js功能已经够用了,当然光是前端框架也没什么卵用咯,只能使用html5的功能罢了,这就和单纯的jquery mobile差不多了,笔者两年前,html5刚发布那会,就是使用jquery mobile+phonegap的方式开发app的,可以说功能比较糟糕,使用体验,性能都很勉强。如今在facebook react native技术的引领下映射原生类库和方法已经成为主流,这就是所谓的hybrid混合开发的最好应用吧
hbuilder:IDE开发工具,个人觉得名不虚传,国内最好的html5app集成开发环境,我做ios开发的朋友看到都惊叹的说:哇,你这个居然可以直接连iphone?还是windows电脑???你这还能直接配置地图sdk??你这个怎么还有支付接口???还有你这个消息推送???。。。
讲真要是dlcoud能做个linux平台的出来,我就不要切换到windows写了。强烈建议!
5+sdk,实现打包和手机系统(an,ios)的对接
native.js,将js映射为java,oc等类库方法
话不多说,来看看在进入dcloud mui一些要点:
webview第一
窗口,这是做mui开发app的核心要素,重中之重,一定要好好看文档,我之前写过一篇《mui开发app之什么是webview》的文章,阅读量还算可人,这是快一年前的文章了,由于当时也是刚接触mui,里面有很多疏漏,填填补补,现在已经不在去更新了
webview其实就相当于android原生开发中的activity,当然android是将layout(布局)和activity(活动)分离开发的,而webview像是一个浏览器,底层使用了一些android,ios原生的功能,其中比如跳转动画,webview最大的特点是充分利用了js对dom的操作,将activity和layout统一在了一起,使之更加简单了,个人建议没必要像浏览器那样把js,css单独放文件(外联),这在web开发中是颇受推崇的,但是app并不会考虑多浏览器的支持(因为无论ios,android都被apple的safari旗下的webkit内核垄断着),如果你将js和css分离出去顶多也只是一个文件(web分离两大原因,其一是因为web是要下载html,js,css资源的,是B/S模式,这样可能使用分布式存放资源,你所看到的资源会来自不同服务器,减轻每一个独立服务器的压力,这是非常好的做法,所以web老手看到你写内联尤其是style属性会对你的代码嗤之以鼻;其二是因为不同浏览器内核对html,尤其是版本4的支持乱七八糟,导致前端小组需要分配不同浏览器不同的js,css,早些年是这样的,随着前端技术的提高,浏览器的统一化,框架的繁衍,如今就算是web开发,可能也很少有开发者会考虑为不同浏览器拽写css,js的不同版本了吧,不过app就更没有这个必要了。所以你的关注点是要放在手机系统,屏幕像素等问题上来。
关于webview需要知道以下几点:
1、使用一套自己规定的统一的id编号,个人使用的是“目录/文件名去掉后缀”的形式,保证不会出现冲突。学会通过getWebviewById好好操作这些webview,灵活调动各个页面
2、不要过度依赖mui封装的openWindow和openWindowwithtitle,这两个方法虽然很方便,但是封装性太强,当你要对窗口进行各种骚操作的时候,建议使用plus.webview.create方法来获取webviewObj,然后使用他的方法,比如,show(),hide(),close(),clear(),其中注意,只有close会销毁当前webview!
3、层叠问题,新打开的webview默认会遮挡老打开的webview,比如openWindow,打开以后覆盖原来的页面,原来的页面并不会关闭!不会销毁!注意,这点很重要,一定要记住openWindow打开的页面是一层一层覆盖的,下面的窗口依然存在,尤其是android系统上,这像activity,又像是数据结构的栈道,先进后出层层堆叠。逻辑理清很重要,因为再使用地图的时候,笔者遇到一个不知道能不能算bug的bug,在android端,dcloud的plus.mas.Map对象只能共用一个,当你在第一个页面new了一个mapObj,然后从这页面使用openWindow打开另一个页面的时候,你再在这个新的webview里new一个map对象你会发现这个新的map对象和上一个map似乎很像,没错我研究了一下这TM就是同一个个啊,连我标记的icon都还在,地图位置也在原来地点,根本没有new出新的map对象嘛,这或许是一个bug吧,我在dcloud社区问了,似乎也没能得到一个回复,因为这可能和android的机制有关,前面的webview没有关闭,所以map插件没有销毁,所以当然新页面还会沿用,关键是沿用也就算了,还不能拖动仿佛被罩住了一样,这个问题我会另外写一篇博客来说明我后来的解决方案(多地图问题)
关于层叠,还有show()会把一个已经创建(存在)的webview提到最前面,栈顶。
hide()将会隐藏起来,倒也不是往下一个位置放(保留状态,消失在视野当中)
zindex属性(WebviewStyles),也是可以改变webview层叠效果的属性,类似于css的z-index,数值越大,层级越往上,个人建议不要乱用,会出现页面错乱的问题(如果你设计的UI跳转逻辑并不太好)
4、巧用子页,子页也是一个webViewObj,和父页面一样,每个webviewObj(使用plus.webview.create创建)对象,都存在append方法,为自己添加一个子页面,但要规定好子页面大小(style),防止层叠产生的遮罩问题,与直接show()出来的webview 不同,直接show()亦可创建一个“伪子页”这个子页面有自己独立的back监听等等,说他伪,是因为他完全独立于外边的父页面,这其实就是上面说的层叠造成的假象,他是独立的页面,在设计高度宽度合适的情况下,看似也像是子页,但按下返回会关闭当前这“伪子页”。建议使用append,这样父页面的销毁会带着子页面,但子页面又可以单独销毁,这可以解决上述的地图map插件共用问题!
5、销毁webview,webviewObj带有clear,close两个方法,官方说法:
clear
清空原生Webview窗口加载的内容
void wobj.clear();
说明:
清除原生窗口的内容,用于重置原生窗口加载的内容,清除其加载的历史记录等内容。
参数:
无
返回值:
void : 无
测试了一下,clear只是会重置整个页面内容,类似于web中刷新当前页面,并不会销毁页面,通过getWebViewById依然可以找到他
plus.webview.close则可以完全关闭一个页面
最后关于webview,乃至整个使用dcloud mui开发app,我想说,千万不要用原来web开发的思想去理解,需要转变,需要了解一些原生的特性,这样才能更好的使用html5+开发app,而不是用html5的方式去开发,记住html5+只是为了方便app开发,简单化,但绝不是替代原生或者不需要了解原生
mui开发app前言(一)的更多相关文章
- mui开发app之js将base64转图片文件
之前我已经做过一个利用cropper裁剪并且制作头像的功能.如何在mui app中实现相册或相机获取图片后裁剪做头像请看另一篇博客:mui开发app之cropper裁剪后上传头像的实现 但是当时裁剪后 ...
- mui开发app之cropper裁剪后上传头像的实现
在大多数app项目中,都需要对用户头像的上传,之前做web开发的时候,我主要是通过input type=file的标签实现的,上传后,使用php对图片进行裁剪,这种方式比较传统简单. 此次app开发中 ...
- 利用 MUI开发app, 如何实现侧滑菜单及其主体部分上下滑动
利用mui开发APP 之侧滑菜单主内容滚动问题 MUI作为开发者常用的框架之一,其号称最接近原生APP体验的高性能前端框架.因此利用mui开发移动APP,可以为开发者提供很大的便利和接近原生的体验. ...
- 1.Delphi Rest后台+MUI前台开发App前言
尽管不是专业的程序猿,但是对Delphi的喜爱已经10多年了.一直以来用Delphi开发一些小应用若干个,同时用Delphi给朋友开发一些中小型的业务平台也有几个.可以说Delphi对于数据库的操作, ...
- MUI开发APP,scroll组件,运用到区域滚动
最近在开发APP的过程中,遇到一个问题,就是内容有一个固定的头部和底部. 头部就是我们常用的header了,底部的话,就放置一个button,用来提交页面数据或者进入下一个页面等,效果 ...
- mui开发app之html5+,5+Runtime,5+sdk,native.js
说说几个名词 html5:目前最新的html规范,w3c联盟制定,手机端主要由webkit实现规范,对用户来说就是浏览器实现了它 html5+:所谓"+",扩充了html5原本没有 ...
- mui开发app之联网应用传输数据
手机的app分为,在线和单机,在线就是类似于C/S模式,能与服务器与他人共享数据的程序,单机就是在没有网络下可以玩转的app. 目前互联网盛行的时代,99%的程序都是联网环境下工作的.那么如何开发本地 ...
- mui开发app之webview是什么
WebView(网络视图)能加载显示网页,可以将其视为一个浏览器,webview被封装在html5+,plus对象中,底层由java,OC实现. 先来谈谈我对webview的理解: 使用mui开发的a ...
- mui开发app之自定义事件以更新其他页内容
我之前做过jquery mobile的开发,那还是前年的事情 在jquery mobile中,由于页面是存储在div[data-role=page]的dom中(jqmobile通过对data-role ...
随机推荐
- 简单svg动画实现
一.将svg嵌入到html中 svg是指可伸缩矢量图形,它使用XML格式定义图像.在html中可以使用<svg>标签直接嵌入svg代码,例如: <svg version=" ...
- nth-child 和nth-type的区别
一.深呼吸,直接内容:nth-child和:nth-of-type都是CSS3中的伪类选择器,其作用近似却又不完全一样,对于不熟悉的人对其可能不是很区分,本文就将介绍两者的不同,以便于大家正确灵活使用 ...
- 关于IO流代码BufferedReader
package JBJADV003;import java.io.*;public class BufferedReaderTest { /** * @param args */ public sta ...
- usaco training 4.1.2 Fence Rails 题解
Fence Rails题解 Burch, Kolstad, and Schrijvers Farmer John is trying to erect a fence around part of h ...
- Hibernate框架 初识 ORM概念 搭建Hibernate环境 Hibernate Api
ORM概念 在学习 Hibernate 之前,我们先来了解ORM 对象关系映射 O, Object 对象 R,Realtion 关系 (关系型数据库: MySQL, Oracle…) M,Ma ...
- STL系列
STL—对象的构造与析构 STL—内存的配置与释放 STL—vector STL—vector空间的动态增长
- mooc上学习acllib后写的包含背景音乐的小涂鸦板(初入江湖,大佬勿喷)
#include "acllib.h"ACL_Sound sound1;ACL_Image img;//开始图ACL_Image img1;//涂鸦图ACL_Color c=RED ...
- PHP闭包和高阶函数
<?php function func($a, $b) { $line = function ($x) use ($a, $b) { return $a*$x + $b; }; return $ ...
- Fiddler基础使用一之捕获https请求
fiddler抓包工具: http协议cookieFiddler是一个调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的"进出"Fiddle ...
- 基于.NET CORE微服务框架 -谈谈Cache中间件和缓存降级
1.前言 surging受到不少.net同学的青睐,也提了不少问题,提的最多的是什么时候集成API 网关,在这里回答大家最近已经开始着手研发,应该在1,2个月内会有个初版API网关,其它像Token身 ...