Hbuilder app 整理资料

Posted 亮亮1990

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hbuilder app 整理资料相关的知识,希望对你有一定的参考价值。

mui.ajax('http://server-name/login.php',
data:
username:'username',
password:'password'
,
dataType:'json',//服务器返回json格式数据
type:'post',//HTTP请求类型
timeout:10000,//超时时间设置为10秒;
success:function(data)
//服务器返回响应,根据响应结果,分析是否登录成功;
...
,
error:function(xhr,type,errorThrown)
//异常处理;
console.log(type);

);




mui.post('http://server-name/login.php',
username:'username',
password:'password'
,function(data)
//服务器返回响应,根据响应结果,分析是否登录成功;
...
,'json'
);


mui.get('http://server-name/list.php',category:'news',function(data)
//获得服务器响应
...
,'json'
);




mui.post,mui.get不处理timeout和异常(若需处理异常及超时,请使用mui.ajax()方法)




mui.getJSON('http://server-name/list.php',category:'news',function(data)
//获得服务器响应
...

);




-------------------------------------------------




-------------------------------------------------
手势事件
-------------------------------------------------


分类 参数 描述
点击 tap 单击屏幕
doubletap 双击屏幕
长按 longtap 长按屏幕
hold 按住屏幕
release 离开屏幕
滑动 swipeleft 向左滑动
swiperight 向右滑动
swipeup 向上滑动
swipedown 向下滑动
拖动 dragstart 开始拖动
drag 拖动中
dragend 拖动结束






mui.init(
  gestureConfig:
   tap: true, //默认为true
   doubletap: true, //默认为false
   longtap: true, //默认为false
   swipe: true, //默认为true
   drag: true, //默认为true
   hold:false,//默认为false,不监听
   release:false//默认为false,不监听
 
);


注意:dragstart、drag、dragend共用drag开关,swipeleft、swiperight、swipeup、swipedown共用swipe开关




-------------------------------------------------
事件监听
-------------------------------------------------
同标准click事件一样,上述手势事件支持添加到任意DOM对象上,如下为一个示例:


elem.addEventListener("swipeleft",function()
     console.log("你正在向左滑动");
);










-------------------------------------------------
预加载
-------------------------------------------------
所谓的预加载技术就是在用户尚未触发页面跳转时,提前创建目标页面,这样当用户跳转时,就可以立即进行页面切换,节省创建新页面的时间,提升app使用体验。mui提供两种方式实现页面预加载。


方式一:通过mui.init方法中的preloadPages参数进行配置


mui.init(
  preloadPages:[
   
      url:prelaod-page-url,
      id:preload-page-id,
      styles:,//窗口参数
      extras:,//自定义扩展参数
      subpages:[,]//预加载页面的子页面
   
  ]
);


该种方案使用简单、可预加载多个页面,但不会返回预加载每个页面的引用,若要获得对应webview引用,还需要通过plus.webview.getWebviewById方式获得;另外,因为mui.init是异步执行,执行完mui.init方法后立即获得对应webview引用,可能会失败,例如如下代码:


mui.init(
  preloadPages:[
   
      url:'list.html',
      id:'list'
   
  ]
);
var list = plus.webview.getWebviewByid('list');//这里可能返回空;






方式二:通过mui.preload方法预加载.


var page = mui.preload(
    url:new-page-url,
    id:new-page-id,//默认使用当前页面的url作为id
    styles:,//窗口参数
    extras://自定义扩展参数
);


通过mui.preload()方法预加载,可立即返回对应webview的引用,但一次仅能预加载一个页面;若需加载多个webview,则需多次调用mui.preload()方法;










-------------------------------------------------
下拉刷新
-------------------------------------------------


主页面内容比较简单,只需要创建子页面即可:


mui.init(
    subpages:[
      url:pullrefresh-subpage-url,//下拉刷新内容页面地址
      id:pullrefresh-subpage-id,//内容页面标志
      styles:
        top:subpage-top-position,//内容页面顶部位置,需根据实际页面布局计算,若使用标准mui导航,顶部默认为48px;
        .....//其它参数定义
     
    ]
  );




内容页面需按照如下DOM结构构建:


<!--下拉刷新容器-->
<div id="refreshContainer" class="mui-content mui-scroll-wrapper">
  <div class="mui-scroll">
    <!--数据列表-->
    <ul class="mui-table-view mui-table-view-chevron">
      
    </ul>
  </div>
</div>




其次,通过mui.init方法中pullRefresh参数配置下拉刷新各项参数,如下:


mui.init(
  pullRefresh :
    container:"#refreshContainer",//下拉刷新容器标识,querySelector能定位的css选择器均可,比如:id、.class等
    down :
      contentdown : "下拉可以刷新",//可选,在下拉可刷新状态时,下拉刷新控件上显示的标题内容
      contentover : "释放立即刷新",//可选,在释放可刷新状态时,下拉刷新控件上显示的标题内容
      contentrefresh : "正在刷新...",//可选,正在刷新状态时,下拉刷新控件上显示的标题内容
      callback :pullfresh-function //必选,刷新函数,根据具体业务来编写,比如通过ajax从服务器获取新数据;
   
 
);


最后,根据具体业务编写刷新函数,需要注意的是,加载完新数据后,需要执行endPulldownToRefresh()方法;
function pullfresh-function()
     //业务逻辑代码,比如通过ajax从服务器获取新数据;
     ......
     //注意,加载完新数据后,必须执行如下代码,注意:若为ajax请求,则需将如下代码放置在处理完ajax响应数据之后
     mui('#refreshContainer').pullRefresh().endPulldownToRefresh();



















-------------------------------------------------
输入增强
-------------------------------------------------


mui目前提供的输入增强包括:快速删除和语音输入两项功能。要删除输入框中的内容,使用输入法键盘上的删除按键,只能逐个删除字符,mui提供了快速删除能力,只需要在对应input控件上添加.mui-input-clear类,当input控件中有内容时,右侧会有一个删除图标,点击会清空当前input的内容;另外,为了方便快速输入,mui集成了HTML5+的语音输入,只需要在对应input控件上添加.mui-input-speech类,就会在该控件右侧显示一个语音输入的图标,点击会启用科大讯飞语音输入界面。




-------------------------------------------------
开关事件
-------------------------------------------------
mui提供了开关控件样式,点击滑动两种手势都可以对开关控件进行操作,在开关控件进行切换时,会触发toggle事件,通过事件的detail.isActive属性可以判断当前开关状态。可通过监听toggle事件,在开关切换时执行特定业务逻辑。如下为使用示例:


document.getElementById("mySwitch").addEventListener("toggle",function(event)
  if(event.detail.isActive)
    console.log("你启动了开关");
  else
    console.log("你关闭了开关");  
 
)




若要获得当前开关状态,可通过判断当前开关控件是否包含.mui-active类来实现,若包含,则为打开状态,否则即为关闭状态;如下为代码示例:


var isActive = document.getElementById("mySwitch").classList.contains("mui-active");
if(isActive)
  console.log("打开状态");
else
  console.log("关闭状态");  



若使用js打开、关闭开关控件,可使用switch插件的toggle()方法,如下为示例代码:


mui("#mySwitch").switch().toggle();






-------------------------------------------------
监听自定义事件
-------------------------------------------------
window.addEventListener('customEvent',function(event)
  //通过event.detail可获得传递过来的参数内容
  ....
);


-------------------------------------------------
触发自定义事件
-------------------------------------------------


通过mui.fire方法可触发目标窗口的自定义事件:


mui.fire(targetPage,'customEvent',
  //自定义事件参数
);




示例:假设如下场景:从新闻列表页面进入新闻详情页面,新闻详情页面为共用页面,通过传递新闻ID通知详情页面需要显示具体哪个新闻,详情页面再动态向服务器请求数据,mui要实现类似需求可通过如下步骤实现:


在列表页面中预加载详情页面(假设为detail.html)
列表页面在点击新闻标题时,首先,获得该新闻id,触发详情页面的newsId事件,并将新闻id作为事件参数传递过去;然后再打开详情页面;
详情页面监听newsId自定义事件




列表页面代码如下:


//初始化预加载详情页面
mui.init(
  preloadPages:[
    id:'detail.html',
    url:'detail.html'           
 
  ]
);


var detailPage = null;
//添加列表项的点击事件
mui('.mui-content').on('tap', 'a', function(e)
  var id = this.getAttribute('id');
  //获得详情页面
  if(!detailPage)
    detailPage = plus.webview.getWebviewById('detail.html');
 
  //触发详情页面的newsId事件
  mui.fire(detailPage,'newsId',
    id:id
  );
//打开详情页面          
  mui.openWindow(
    id:'detail.html'
  );
);




详情页面代码如下:


//添加newId自定义事件监听
window.addEventListener('newsId',function(event)
  //获得事件参数
  var id = event.detail.id;
  //根据id向服务器请求新闻详情
  .....
);






-------------------------------------------------
图片轮播
-------------------------------------------------


mui框架内置了图片轮播插件,通过该插件封装的JS API,用户可以设定是否自动轮播及轮播周期,如下为代码示例:


//获得slider插件对象
var gallery = mui('.mui-slider');
gallery.slider(
  interval:5000//自动轮播周期,若为0则不自动播放,默认为0;
);














-----------------


(function(mui)
var detailPage = null;
            detailPage = mui.preload(
                    id: 'zgManage.html',
                    url: 'zgManage.html'
                )
                //添加列表项的点击事件
            mui('.mui-content').on('tap', '.item-id', function(e)
                var id = this.getAttribute('id');
                //获得详情页面
                console.log('====' + id)
                    /*if (!detailPage)
                        detailPage = plus.webview.getWebviewById('zgManage.html');
                    */
                    //触发详情页面的newsId事件
                mui.fire(detailPage, 'xxx',
                    id: id
                );
                //打开详情页面          
                mui.openWindow(
                    id: 'zgManage.html',
                    // url: 'zgManage.html'
                );
            );
        )(mui);


================================


mui.back = function()
    //首次按键,提示‘再按一次退出应用’
    if(!first)
        first = new Date().getTime();
        mui.toast('再按一次退出应用');
        setTimeout(function()
            first = null;
        ,1000);
    else
        if(new Date().getTime()-first<1000)
           plus.runtime.quit();
       

    alert(e.keyType+"\\n"+e.keyCode);
    return false;











===================================================


plus.device.dial( number, confirm )启动的是拨打电话的界面,并不会直接拨出电话。
直接拨出电话的nativeJs代码:


var Uri = plus.android.importClass("android.net.Uri");
var Intent = plus.android.importClass("android.content.Intent");
var number = new Uri.parse("tel:4001109999");
var callIntent = new Intent(Intent.ACTION_CALL, number);//这步是关键,ACTION_CALL而不是ACTION_DIAL
plus.android.runtimeMainActivity().startActivity(callIntent);








========================================================


mui.plusReady(function()
                //首页返回键处理
                //处理逻辑:1秒内,连续两次按返回键,则退出应用;
                var first = null;
                plus.key.addEventListener('backbutton', function()
                    //首次按键,提示‘再按一次退出应用’
                    if (!first)
                        first = new Date().getTime();
                        mui.toast('再按一次退出应用');
                        setTimeout(function()
                            first = null;
                        , 1000);
                    else
                        if (new Date().getTime() - first < 1000)
                            plus.runtime.quit();
                       
                   
                , false);
            );


========================================================




plusReady仅说明plus准备好了。


mui.ready是指dom准备好了。


两种方案:


1.把你的代码放到你的html代码后边执行。


2.把dom相关代码放到ready里边。






上拉刷新,加载出第二页后。再执行 下拉刷新,我此时获取的的是 第一页的数据。可是在上拉时 就不能执行上拉


========================================================


http://dcloudio.github.io/mui/javascript/




http://ask.dcloud.net.cn/question/8866




http://www.html5plus.org/doc/zh_cn/device.html#plus.device.uuid    --获取设备唯一编号
plus.device.uuid;


http://ask.dcloud.net.cn/article/122   -------布局规则


http://www.html5plus.org/doc/zh_cn/webview.html


 http://ask.dcloud.net.cn/article/182 ----------App资源在线升级更新


http://www.html5plus.org/doc/zh_cn/maps.html ----地图定位功能


http://ask.dcloud.net.cn/article/29  ----地图定位功能




http://ask.dcloud.net.cn/article/38  ------离线打包


http://ask.dcloud.net.cn/question/2673   ----------


http://www.dcloud.io/docs/api/zh_cn/navigator.shtml -----API




RQCsC8ebKBmIQIiXBmX1v7lf ios
OsWGjhLVqiGjwiK6r8lB3urS Android端    WSlgzefYAXM1GzG05t7rNWIZ









以上是关于Hbuilder app 整理资料的主要内容,如果未能解决你的问题,请参考以下文章

echarts怎么把代码移动在hbuilder里面

基于HBuilder将H5站点打包成app

如何在Hbuilder中制作app底部导航栏

uni-app开发android应用流程

关于在Hbuilder中制作app底部导航栏的问题

MUI+Hbuilder之列表页到详情页面(四)