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. 12.js如何将明文转为MD5

    1.先下载MD5.JS 2.引入,使用hex_md5(str)即可

  2. 遇到ANDROID “call to opengl es api with no current context”错误

    延迟线程执行 Timer timer=new Timer();//实例化Timer类 timer.schedule(new TimerTask(){ public void run(){ buyed( ...

  3. bash远程代码执行漏洞

    博客园新闻:http://news.cnblogs.com/n/504506/(如果以下有说错的地方请不吝指出,谢谢~) 详情可围观上面的链接.因为我们的服务器都是私有网环境,即使要修复也得等到下次安 ...

  4. Java 9 揭秘(9. 打破模块封装)

    Tips 做一个终身学习的人. 在此章节中,主要介绍以下内容: 什么是打破模块的封装 如何使用命令行选项将依赖项(添加需要)添加到模块 如何使用--add-exports命令行选项导出模块的未导出包, ...

  5. redis源码笔记(一) —— 从redis的启动到command的分发

    本作品采用知识共享署名 4.0 国际许可协议进行许可.转载联系作者并保留声明头部与原文链接https://luzeshu.com/blog/redis1 本博客同步在http://www.cnblog ...

  6. Socket异步通信及心跳包同时响应逻辑分析。

    有段时间没有更博了,刚好最近在做Socket通信的项目,原理大致内容:[二维码-(加logo)]-->提供主机地址和端口号信息(直接使用[ThoughtWorks.QRCode.dll]比较简单 ...

  7. angularjs-1.3代码学习 模块

    花了点时间,阅读了下angularjs的源码.本次先从模块化开始. angular可以通过module的api来实现前端代码的模块化管理.跟define类似.但不具备异步加载脚本的功能.先从最基本的m ...

  8. C#监控类属性的更改(大花猫动了哪些小玩具)

    C#监控类属性的更改(大花猫动了哪些小玩具) 实体类创建后在方法中对哪些属性赋值了,传递到底层方法时在底层如何得知哪些属性被赋值过.如何监控属性的更改,请看脑洞大开之<大花猫动了哪些小玩具> ...

  9. 动态语言的灵活性是把双刃剑 -- 以Python语言为例

    本文有些零碎,总题来说,包括两个问题:(1)可变对象(最常见的是list dict)被意外修改的问题,(2)对参数(parameter)的检查问题.这两个问题,本质都是因为动态语言(动态类型语言)的特 ...

  10. hbase集群导入csv文件

    小数据文件导入: 样例 hbase  org.apache.hadoop.hbase.mapreduce.ImportTsv  -Dimporttsv.separator="," ...