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前言(一)的更多相关文章

  1. mui开发app之js将base64转图片文件

    之前我已经做过一个利用cropper裁剪并且制作头像的功能.如何在mui app中实现相册或相机获取图片后裁剪做头像请看另一篇博客:mui开发app之cropper裁剪后上传头像的实现 但是当时裁剪后 ...

  2. mui开发app之cropper裁剪后上传头像的实现

    在大多数app项目中,都需要对用户头像的上传,之前做web开发的时候,我主要是通过input type=file的标签实现的,上传后,使用php对图片进行裁剪,这种方式比较传统简单. 此次app开发中 ...

  3. 利用 MUI开发app, 如何实现侧滑菜单及其主体部分上下滑动

     利用mui开发APP 之侧滑菜单主内容滚动问题 MUI作为开发者常用的框架之一,其号称最接近原生APP体验的高性能前端框架.因此利用mui开发移动APP,可以为开发者提供很大的便利和接近原生的体验. ...

  4. 1.Delphi Rest后台+MUI前台开发App前言

    尽管不是专业的程序猿,但是对Delphi的喜爱已经10多年了.一直以来用Delphi开发一些小应用若干个,同时用Delphi给朋友开发一些中小型的业务平台也有几个.可以说Delphi对于数据库的操作, ...

  5. MUI开发APP,scroll组件,运用到区域滚动

    最近在开发APP的过程中,遇到一个问题,就是内容有一个固定的头部和底部.         头部就是我们常用的header了,底部的话,就放置一个button,用来提交页面数据或者进入下一个页面等,效果 ...

  6. mui开发app之html5+,5+Runtime,5+sdk,native.js

    说说几个名词 html5:目前最新的html规范,w3c联盟制定,手机端主要由webkit实现规范,对用户来说就是浏览器实现了它 html5+:所谓"+",扩充了html5原本没有 ...

  7. mui开发app之联网应用传输数据

    手机的app分为,在线和单机,在线就是类似于C/S模式,能与服务器与他人共享数据的程序,单机就是在没有网络下可以玩转的app. 目前互联网盛行的时代,99%的程序都是联网环境下工作的.那么如何开发本地 ...

  8. mui开发app之webview是什么

    WebView(网络视图)能加载显示网页,可以将其视为一个浏览器,webview被封装在html5+,plus对象中,底层由java,OC实现. 先来谈谈我对webview的理解: 使用mui开发的a ...

  9. mui开发app之自定义事件以更新其他页内容

    我之前做过jquery mobile的开发,那还是前年的事情 在jquery mobile中,由于页面是存储在div[data-role=page]的dom中(jqmobile通过对data-role ...

随机推荐

  1. 13.localStorage和sessionStorage的区别

    HTMl5的sessionStorage和localStorage html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage. sessionSt ...

  2. JavaScript学习笔记(散)——继承、构造函数super

    构造函数中的super 今天看<JavaScript设计模式与开发实践>时,在书中看到一段代码出现super语句,第一次看到这个关键字,所以上网查了下它的作用,发现这个关键字是来自java ...

  3. 【转】SQL多条件模糊查询解决方案-存储过程

    前言:   算法的基本特性在前几篇博客中已经做了详细的说明,经过不断的改进优化,到归仓的时候了,也就是说,该算法告一段落,不再更新. 作为最终的解决方案,简要的总结一下算法特性,以方便读者参阅. l ...

  4. Hibernate错误:Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update

    报错:Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execu ...

  5. Watson Explorer Analytical Components 1

    Introduction: IBM Watson Explorer Analytical Components(AC) which is part of the IBM Watson Explorer ...

  6. 数据结构3——浅谈zkw线段树

    线段树是所有数据结构中,最常用的之一.线段树的功能多样,既可以代替树状数组完成"区间和"查询,也可以完成一些所谓"动态RMQ"(可修改的区间最值问题)的操作.其 ...

  7. input file 上传图片问题

    html代码如下: <input id="fileup" type="file" accept="image/*" capture=& ...

  8. 谈谈tableView的重要属性内边距

    全屏穿透效果需要做到两点 tableView的可视范围占据整个父控件(或者屏幕)--设置contentsize滚动范围. 所有的cell都可以被看到,也就是说tableView中的cell不会被导航栏 ...

  9. Javassist进行方法插桩

    javassist官网 http://jboss-javassist.github.io/javassist/ javassist API网 http://jboss-javassist.github ...

  10. select2 4.0.3 空记录时的处理

    使用select2插件,如果后台查找没有记录,不能返回null,要返回一个空数组,不然会报错:data is null 空数组形式为(firefox调试输出):{"items":[ ...