mui-知识总结

mui-知识总结

  1. MUI + SDK 使用笔记:  
  2.   
  3. MUI是什么:http://ask.dcloud.net.cn/article/91  
  4.   
  5. /*  MUI 使用说明: 
  6.  * 
  7.  *  1.每个用到mui的页面都调用下mui.init。 
  8.  *  2.如果需要使用大H5+对象,就写到plusReady中,如plus对象。 
  9.  */  
  10.   
  11. ”‘【MUI开发注意事项】———————————————————————————–  
  12.   
  13.    //1.【固定栏靠前】  
  14.          
  15.          所谓的固定栏:也就是带有.mui-bar属性的节点  
  16.             (.mui-bar-nav)  
  17.             (.mui-bar-footer)  
  18.             (.mui-bar-tab)  
  19.          这些元素使用时需遵循一个规则:放在.mui-content元素之前  
  20.           
  21.   
  22.    //2.【一切内容都要包裹在mui-content中】    
  23.           
  24.            除了固定栏之外,其它内容都要包裹在.mui-content中  
  25.            
  26.   
  27.    //3.【始终为button按钮添加type属性】  
  28.           
  29.           若button按钮没有type属性,浏览器默认按照type=submit逻辑处理,  
  30.           这样若将没有type的button放在form表单中,点击按钮就会执行form表单提交,页面就会刷新,用户体验极差  
  31.           
  32.   
  33.    //4.【窗口管理】  
  34.   
  35.           //4.1 页面初始化:必须执行mui.init方法  
  36.               
  37.                mui在页面初始化时,初始化了很多参数配置,比如:  
  38.                按键监听、手势监听等,因此mui页面都必须调用一次mui.init()方法;  
  39.              
  40.           //4.2 页面跳转:抛弃href跳转  
  41.               
  42.                mui.openWindow方法打开一个新的webview,mui会自动监听新页面的loaded事件,  
  43.                若加载完毕,再自动显示新页面;  
  44.               
  45.   
  46.            //4.3 页面关闭:勿重复监听backbutton  
  47.              
  48.                则需要重写mui.back方法,切勿简单通过addEventListener添加backbutton监听,  
  49.                因为addEventListener只会增加新的执行程序,mui默认封装的监听执行逻辑依然会继续执行,  
  50.                因此若仅addEventListener添加用户确认框,则用户即使选择了取消,也会继续关闭窗口。  
  51.               
  52.   
  53.    //5.【手势操作】  
  54.   
  55.             // 点击:忘记click  
  56.                 mui为了解决这个问题,封装了tap事件,因此在任何点击的时候,请忘记click及onclick操作,  
  57.                 统统使用如下代码:  
  58.                 element.addEventListener(’tap’,function(){  
  59.                         //点击响应逻辑  
  60.                     });  
  61.                 // 或者  
  62.                 mui.(#select).on(”tap”,“li”.funcation(){  
  63.                        //点击响应逻辑  
  64.                 });  
  65.   
  66.    //6.【常见错误 Uncaught ReferenceError: plus is not defined】  
  67.             
  68.                在app开发中,若要使用HTML5+扩展api,必须等plusready事件发生后才能正常使用,  
  69.                否则可能会报“plus is not defined”的错误;  
  70.                mui为简化开发,将plusReady事件封装成了mui.plusReady()方法,  
  71.                凡涉及到HTML5+的api,建议都写在mui.plusReady方法中;  
  72.             
  73.   
  74.   
  75. ”‘【mui适用场景说明】————————————————————————————-  
  76.   
  77.         为解决HTML5在低端Android机上的性能缺陷,mui引入了原生加速,其中最关键的就是webview控件,  
  78.         因此mui若要发挥其全部能力,需和5+ App配合适用,若脱离5+ App,mui功能会受限,主要涉及三个部分:  
  79.         详细参考:http://ask.dcloud.net.cn/docs/#http://ask.dcloud.net.cn/article/113  
  80.   
  81.   
  82. ”‘【如何自定义mui控件样式】——————————————————————————-  
  83.      
  84.         参考:http://ask.dcloud.net.cn/docs/#http://ask.dcloud.net.cn/article/87  
  85.   
  86. ”‘【如何自定义icon图标】——————————————————————————-  
  87.   
  88.         //1. 选择图库:(以淘宝素材库为例)  
  89.   
  90.              淘宝:          http://iconfont.cn/collections?spm=a313x.7781069.0.0.KmfS4h  
  91.              ICO Moon:      https://icomoon.io/app/#/select  
  92.              Font Awesome:   http://www.bootcss.com/p/font-awesome/  
  93.   
  94.         //2. 找到所需素材下载到本地(包含 css 和ttf文件)  
  95.   
  96.   
  97.         //3. 修改 iconfont.css 文件中的 【@font-face】  
  98.   
  99.               保留所需的 ttf字体即可,如下:修改url增加相对路径 src:url(’…/fonts/’);  
  100.   
  101.               @font-face {font-family: “iconfont”;  
  102.                   src:url(’…/fonts/iconfont.ttf’) format(‘truetype’); /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/  
  103.                }  
  104.   
  105.   
  106.         //4. 将 iconfont.css 拷贝到项目的fonts目录下,iconfont.ttf 拷贝到项目的css目录下。  
  107.         
  108.         //5. mui中使用:  
  109.   
  110.             //     class :  
  111.             //     mui-icon :写死  
  112.             //     iconfont :自定义图片字体的类名  
  113.             //     icon-nanzhuang : 自定义的icon名字  
  114.             <span class=“mui-icon iconfont icon-nanzhuang”></span>  
  115.   
  116.         
  117. ”‘【如何判断预加载是否生效】——————————————————————————-  
  118.           
  119.         1. 直观判断,预加载成功打开新页面很快不会有加载等待  
  120.         2. log分析  
  121.   
  122.   
  123.   
  124.   
  125. ”‘【MUI_JavaScript 函数 http://dev.dcloud.net.cn/mui/util/】——————————————————————————-  
  126.       
  127. 【窗口管理】  
  128.       
  129.      //1.初始化MUI 和 准备 mui.init(); / mui.plusReady();  
  130.              
  131.            目前支持在mui.init方法中配置的功能包括:  
  132.            创建子页面、关闭页面、手势事件配置、预加载、下拉刷新、上拉加载、设置系统状态栏背景颜色  
  133.            代码案列:  
  134.            mui.init({  
  135.                //子页面  
  136.                 subpages: [{  
  137.                       url:your-subpage-url,//子页面HTML地址,支持本地地址和网络地址  
  138.                       id:your-subpage-id,//子页面标志  
  139.                       styles:{  
  140.                         top:subpage-top-position,//子页面顶部位置  
  141.                         bottom:subpage-bottom-position,//子页面底部位置  
  142.                         width:subpage-width,//子页面宽度,默认为100%  
  143.                         height:subpage-height,//子页面高度,默认为100%  
  144.                         ……  
  145.                       },  
  146.                       extras:{}//额外扩展参数  
  147.                   }],  
  148.                //预加载  
  149.                  preloadPages:[  
  150.                  {  
  151.                       url:prelaod-page-url,  
  152.                       id:preload-page-id,  
  153.                       styles:{},//窗口参数  
  154.                       extras:{},//自定义扩展参数  
  155.                       subpages:[{},{}]//预加载页面的子页面  
  156.                     }  
  157.                 ],  
  158.                //下拉刷新  
  159.                 pullRefresh : {  
  160.                    //…  
  161.                     },  
  162.                //上拉加载  
  163.                 pullRefresh : {  
  164.                    //…  
  165.                 },  
  166.                 //手势配置  
  167.                  gestureConfig:{  
  168.                    //…  
  169.                 },  
  170.                 //侧滑关闭  
  171.                 swipeBack:true, //Boolean(默认false)启用右滑关闭功能  
  172.                //监听Android手机的back、menu按键  
  173.                 keyEventBind: {  
  174.                     backbutton: false,  //Boolean(默认truee)关闭back按键监听  
  175.                     menubutton: false   //Boolean(默认true)关闭back按键监听  
  176.                 },  
  177.                //处理窗口关闭前的业务  
  178.                 beforeback: function() {  
  179.                     //… //窗口关闭前处理其他业务详情点击 ↑ ”关闭页面”链接查看  
  180.                 },  
  181.                //设置状态栏颜色  
  182.                statusBarBackground: ’#9defbcg’, //设置状态栏颜色,仅iOS可用  
  183.              });  
  184.          //在app开发中,若要使用HTML5+扩展api,必须等plusready事件发生后才能正常使用mui.plusReady();  
  185.   
  186.   
  187.     // 2.打开新页面  
  188.   
  189.           mui.openWindow({  
  190.                 url:new-page-url,  
  191.                 id:new-page-id,  
  192.                 styles:{  
  193.                   top:newpage-top-position,//新页面顶部位置  
  194.                   bottom:newage-bottom-position,//新页面底部位置  
  195.                   width:newpage-width,//新页面宽度,默认为100%  
  196.                   height:newpage-height,//新页面高度,默认为100%  
  197.                   ……  
  198.                 },  
  199.                 extras:{  
  200.                   …..//自定义扩展参数,可以用来处理页面间传值  
  201.                 },  
  202.                 createNew:false,//是否重复创建同样id的webview,默认为false:不重复创建,直接显示  
  203.                 show:{  
  204.                   autoShow:true,//页面loaded事件发生后自动显示,默认为true  
  205.                   aniShow:animationType,//页面显示动画,默认为”slide-in-right“;  
  206.                   duration:animationTime//页面动画持续时间,Android平台默认100毫秒,iOS平台默认200毫秒;  
  207.                 },  
  208.                 waiting:{  
  209.                   autoShow:true,//自动显示等待框,默认为true  
  210.                   title:’正在加载…’,//等待对话框上显示的提示内容  
  211.                   options:{  
  212.                     width:waiting-dialog-widht,//等待框背景区域宽度,默认根据内容自动计算合适宽度  
  213.                     height:waiting-dialog-height,//等待框背景区域高度,默认根据内容自动计算合适高度  
  214.                     ……  
  215.                   }  
  216.                 }  
  217.              })  
  218.               
  219.   
  220.     // 3.关闭页面  
  221.   
  222.            mui框架将窗口关闭功能封装在mui.back方法中,具体执行逻辑是:  
  223.            若当前webview为预加载页面,则hide当前webview;  
  224.            否则,close当前webview;  
  225.   
  226.            在mui框架中,有三种操作会触发页面关闭(执行mui.back方法):  
  227.   
  228.            // 使用参考(http://dev.dcloud.net.cn/mui/window/#openwindow)  
  229.   
  230.            1. 点击包含.mui-action-back类的控件  
  231.            2. 在屏幕内,向右快速滑动  
  232.            3. Android手机按下back按键  
  233.   
  234.            ””‘ 除了如上三种操作外,也可以直接调用mui.back()方法,执行窗口关闭逻辑;  
  235.   
  236.     // 4.预加载页面  
  237.          方式一:通过mui.init方法中的preloadPages参数进行配置.  
  238.          /* 
  239.            优点:1.可预加载多个页面 
  240.            缺点:1. 不会返回预加载每个页面的引用, 
  241.                 2.获得对应webview引用,plus.webview.getWebviewById方式获得 
  242.                 3.是异步执行,执行完mui.init方法后立即获得对应webview引用可能会失败 
  243.           */  
  244.             mui.init({  
  245.               preloadPages:[  
  246.                 {  
  247.                   url:prelaod-page-url,  
  248.                   id:preload-page-id,  
  249.                   styles:{},//窗口参数  
  250.                   extras:{},//自定义扩展参数  
  251.                   subpages:[{},{}]//预加载页面的子页面  
  252.                 }  
  253.               ],  
  254.               preloadLimit:5//预加载窗口数量限制(一旦超出,先进先出)默认不限制  
  255.             });  
  256.   
  257.         方式二:通过mui.preload方法预加载.// 可立即返回对应webview的引用,但一次仅能预加载一个页面  
  258.             /* 
  259.               优点:1.可立即返回对应webview的引用 
  260.               缺点:1. 但一次仅能预加载一个页面 
  261.           */  
  262.              var page = mui.preload({  
  263.                 url:new-page-url,  
  264.                 id:new-page-id,//默认使用当前页面的url作为id  
  265.                 styles:{},//窗口参数  
  266.                 extras:{}//自定义扩展参数  
  267.             });  
  268.   
  269.   
  270. 【事件管理】  
  271.   
  272.       // 1.事件绑定:addEventListener() / .on()  
  273.   
  274.            除了可以使用[【addEventListener()】方法监听某个特定元素上的事件外, 也可以使用【.on()】方法实现批量元素的事件绑定。  
  275.   
  276.            ””‘ 【 .on( event , selector , handler ) 】  
  277.                 event  
  278.                 Type: String  
  279.                 需监听的事件名称,例如:’tap’  
  280.                 selector  
  281.                 Type: String  
  282.                 选择器  
  283.                 handler  
  284.                 Type: Function( Event event )  
  285.                 事件触发时的回调函数,通过回调中的event参数可以获得事件详情  
  286.   
  287.       //2.事件取消:off()  
  288.   
  289.           ””‘ 【 .off( event , selector , handler ) 】  
  290.                 event  
  291.                 Type: String  
  292.                 需取消绑定的事件名称,例如:’tap’  
  293.                 selector  
  294.                 Type: String  
  295.                 选择器  
  296.                 handler  
  297.                 Type: Function  
  298.                 之前绑定到该元素上的事件函数,不支持匿名函数  
  299.   
  300.           ””‘ 【 .off( event , selector) 】  
  301.                 event  
  302.                 Type: String  
  303.                 需取消绑定的事件名称,例如:’tap’  
  304.                 selector  
  305.                 Type: String  
  306.                 选择器  
  307.   
  308.           ””‘ 【 .off( event ) 】  
  309.                 event  
  310.                 Type: String  
  311.                 需取消绑定的事件名称,例如:’tap’  
  312.           ””‘ 【 .off( ) 】  
  313.                 空参数,删除该元素上所有事件  
  314.   
  315.       // 3. 事件触发  mui.trigger() 使用mui.trigger()方法可以动态触发特定DOM元素上的事件。  
  316.         
  317.           ””‘ 【.trigger( element , event , data )】  
  318.                element  
  319.                Type: Element  
  320.                触发事件的DOM元素  
  321.                event  
  322.                Type: String  
  323.                事件名字,例如:’tap’、‘swipeleft’  
  324.                data  
  325.                Type: Object  
  326.                需要传递给事件的业务参数  
  327.   
  328.                // 示例 自动触发按钮的点击事件:  
  329.                var btn = document.getElementById(”submit”);  
  330.                 //监听点击事件  
  331.                 btn.addEventListener(”tap”,function () {  
  332.                   console.log(”tap event trigger”);  
  333.                 });  
  334.                 //触发submit按钮的点击事件  
  335.                 mui.trigger(btn,’tap’);  
  336.   
  337.       //4. 手势事件  
  338.   
  339.                 分类      参数         描述  
  340.                —————————————-  
  341.                         |    tap      |  单击屏幕  
  342.                  点击   ——————————-  
  343.                         |  doubletap  |  双击屏幕  
  344.                —————————————-  
  345.                         |  longtap    |  长按屏幕  
  346.                         ——————————-  
  347.                  长按 |    hold     |  按住屏幕  
  348.                         ——————————-  
  349.                         |  release    |  离开屏幕  
  350.                —————————————-  
  351.                         |  swipeleft  |  向左滑动  
  352.                         ——————————-  
  353.                         |  swiperight |  向右滑动  
  354.                 滑动  ——————————-  
  355.                         |   swipeup   |  向上滑动  
  356.                         ——————————-  
  357.                         |  swipedown  |  向下滑动  
  358.               —————————————–  
  359.                         |   dragstart |  开始拖动  
  360.                         ——————————-  
  361.                         |   drag      |  拖动中  
  362.                 拖动  ——————————-  
  363.                         |   dragend   |  拖动结束  
  364.               —————————————–  
  365.   
  366.            使用:通过mui.init方法中的gestureConfig参数,配置具体需要监听的手势事  
  367.   
  368.            /** 
  369.               注意:dragstart、drag、dragend共用drag开关,swipeleft、swiperight、swipeup、swipedown共用swipe开关*/  
  370.              
  371.               // 配置:  
  372.               mui.init({  
  373.                    gestureConfig:{  
  374.                        tap: true,         //默认为true  
  375.                        doubletap: true,   //默认为false  
  376.                        longtap: true,     //默认为false  
  377.                        swipe: true,       //默认为true  
  378.                        drag: true,        //默认为true  
  379.                        hold:false,        //默认为false,不监听  
  380.                        release:false      //默认为false,不监听  
  381.                   }  
  382.                 });  
  383.   
  384.               // 使用:  
  385.   
  386.               单个元素上的事件监听,直接使用addEventListener(0即可,如下:  
  387.   
  388.               elem.addEventListener(”swipeleft”,function(){  
  389.                      console.log(”你正在向左滑动”);  
  390.                 });  
  391.   
  392.               若多个元素执行相同逻辑,则建议使用事件绑定(on())。  
  393.            */  
  394.   
  395.   
  396.   
  397.       //5. 自定义事件:(页面传值)  
  398.       
  399.           5.1 添加自定义事件监听操作和标准js事件监听类似,可直接通过window对象添加,如下:  
  400.   
  401.               window.addEventListener(’customEvent’,function(event){  
  402.                 //通过event.detail可获得传递过来的参数内容  
  403.                  ….  
  404.               });  
  405.      
  406.            5.2 触发自定义事件,通过mui.fire()方法可触发目标窗口的自定义事件:   
  407.                目标webview必须触发loaded事件后才能使用自定义事件  
  408.                
  409.              ””‘ 【 .fire( target , event , data ) 】  
  410.                         target  
  411.                         Type: WebviewObject  
  412.                         需传值的目标webview  
  413.                         event  
  414.                         Type: String  
  415.                         自定义事件名称  
  416.                         data  
  417.                         Type: JSON  
  418.                         json格式的数据  
  419.   
  420.   
  421.             /** 实列: 
  422.  
  423.               【A.html】 
  424.  
  425.                 1. 预加载B.html页面  preload() 
  426.  
  427.                 mui.plusReady(function() { 
  428.                     var page = mui.preload({ 
  429.                                 url:’examples/zidingyi.html’, 
  430.                                 id:’zcmain’ 
  431.                         }); 
  432.                 }); 
  433.  
  434.                 2. 触发自定义事件 
  435.  
  436.                 var webviews = plus.webview.getWebviewById(“zcmain”);         // 根据Id 获取B.html 的webview 
  437.                         alert(“webviews = ” + webviews); 
  438.                         mui.fire(webviews,’intents’,{zcmains:’zhangchao’});   // 像B.html页面传递参数 
  439.                         mui.openWindow({                                      // 打开B.html 
  440.                             url:’examples/zidingyi.html’, 
  441.                             id:’zcmain’ 
  442.                         }); 
  443.  
  444.                【B.html】 
  445.  
  446.                    1. 监听自定义事件 获取去A.html 页面传递过来的数据 
  447.                    window.addEventListener(‘intents’,function(event){ 
  448.                       //获得事件参数 
  449.                       var id = event.detail.zcmains; 
  450.                       alert(“id = ” + id); 
  451.                       //根据id向服务器请求新闻详情 
  452.                     }); 
  453.             * 
  454.             */  
  455.               
  456.   
  457. 【utils】  
  458.        
  459.       1. init();  // 初始化  
  460.              
  461.            创建子页面、关闭页面、手势事件配置、预加载、下拉刷新、上拉加载、设置系统状态栏背景颜色(仅支持ios)。  
  462.         
  463.       2. mui(); // mui使用css选择器获取HTML元素,返回mui对象数组。  
  464.   
  465.            mui(”p”):选取所有<p>元素  
  466.            mui(”p.title”):选取所有包含.title类的<p>元素  
  467.            mui(”#loginbt”); 选取id为loginbt的元素  
  468.            mui(”.registerbt”);选取class为registerbt的元素  
  469.            //若要将mui对象转化成dom对象,可使用如下方法(类似jquery对象转成dom对象):  
  470.            //obj1是mui对象  
  471.                var obj1 = mui(”#title”);  
  472.            //obj2是dom对象  
  473.                var obj2 = obj1[0];   
  474.            
  475.       3. each() // 既是一个类方法,同时也是一个对象方法  
  476.   
  477.          mui.each( obj , handler )  
  478.          obj  
  479.          Type: Array||JSONObj  
  480.          需遍历的对象或数组;若为对象,仅遍历对象根节点下的key  
  481.          handler  
  482.          Type: Function( Integer||String index,Anything element)  
  483.          为每个元素执行的回调函数;其中,index表示当前元素的下标或key,element表示当前匹配元素  
  484.          // each 遍历数组/json字符串  
  485.          var array = [1,2,3];          // 数组  
  486.          var str = {”name”:“zcmain”,“age”:“30”,“sex”:“男”};  // json字符串  
  487.          each_array.addEventListener(’tap’,function(){  
  488.          // 遍历json字符串  
  489.          mui.each(str,function(index,item){  
  490.               log(”index = ” + index + “\nitem = ” + item);  
  491.             });  
  492.          // 遍历数组  
  493.          mui.each(array,function(index,item){  
  494.               log(”index = ” + index + “\nitem = ” + item);  
  495.             });  
  496.          });  
  497.   
  498.       4. scrollTo();  // 滑动(仅支付纵向)  
  499.   
  500.          mui.scrollTo(500,1000,functioin(){});   // 500-华东距离;1000-执行动时间(毫秒);function-滑动结束回调函数  
  501.   
  502.       5. os  // 判断当前运行环境的需求, 使用: mui.os.XXX即可  
  503.            
  504.         // Android(可以访问的参数为:)  
  505.                 .wechat  
  506.                 返回是否为微信端  
  507.                 .android  
  508.                 返回是否为安卓手机  
  509.                 .version  
  510.                 安卓版本号  
  511.                 .isBadAndroid  
  512.                 android非Chrome环境  
  513.         // iOS(可以访问的参数为:)  
  514.                 .iOS  
  515.                 返回是否为苹果设备  
  516.                 .version  
  517.                 返回手机版本号  
  518.                 .iphone  
  519.                 返回是否为苹果手机  
  520.                 .ipad  
  521.                 返回是否为ipad  
  522.         // plus(可以访问的参数为:)  
  523.                 .plus  
  524.                 返回是否在基座中运行  
  525.                 .stream  
  526.                 返回是否为流应用  
  527.   
  528.   
  529. 【Ajax】     
  530.       // MUI封装Ajax函数 支持GET、POST请求方式,  
  531.       // 支持返回json、xml、html、text、script数据类型  
  532.   
  533.   
  534.       mui.ajax(’http://server-name/login.php’,{  
  535.         data:{                       // 发送到服务器的业务数据  
  536.             username:’username’,  
  537.             password:’password’  
  538.         },  
  539.         /* 
  540.           dataType,预期服务器返回的数据类型,可选值如下: 
  541.             “xml”: 返回XML文档 
  542.             “html”: 返回纯文本HTML信息; 
  543.             “script”: 返回纯文本JavaScript代码 
  544.             “json”: 返回JSON数据 
  545.             “text”: 返回纯文本字符串 
  546.         */  
  547.         dataType:’json’,             
  548.         type:’post’,     //HTTP请求类型,目前仅支持’GET’和’POST’,默认为’GET’方式  
  549.         timeout:10000,   //请求超时时间(毫秒),默认值为0,表示永不超时,如果超时会触发 error 回调。  
  550.         success:function(data){  
  551.             //服务器返回响应,根据响应结果,分析是否登录成功;  
  552.             …  
  553.         },  
  554.         error:function(xhr,type,errorThrown){  
  555.             //异常处理;  
  556.             console.log(type);  
  557.         }  
  558.     });  
  559.   
  560.   
  561.   
  562.   
  563.   
  564.   
  565.   
  566.   
  567.           
  568.   
  569.   
  570.   
  571.            
  572.       
MUI + SDK 使用笔记:

MUI是什么:http://ask.dcloud.net.cn/article/91

/*  MUI 使用说明:
 *
 *  1.每个用到mui的页面都调用下mui.init。
 *  2.如果需要使用大H5+对象,就写到plusReady中,如plus对象。
 */

'''【MUI开发注意事项】-----------------------------------------------------------------------------------

   //1.【固定栏靠前】

         所谓的固定栏:也就是带有.mui-bar属性的节点
            (.mui-bar-nav)
            (.mui-bar-footer)
            (.mui-bar-tab)
         这些元素使用时需遵循一个规则:放在.mui-content元素之前


   //2.【一切内容都要包裹在mui-content中】  

           除了固定栏之外,其它内容都要包裹在.mui-content中


   //3.【始终为button按钮添加type属性】

          若button按钮没有type属性,浏览器默认按照type=submit逻辑处理,
          这样若将没有type的button放在form表单中,点击按钮就会执行form表单提交,页面就会刷新,用户体验极差


   //4.【窗口管理】

          //4.1 页面初始化:必须执行mui.init方法

               mui在页面初始化时,初始化了很多参数配置,比如:
               按键监听、手势监听等,因此mui页面都必须调用一次mui.init()方法;

          //4.2 页面跳转:抛弃href跳转

               mui.openWindow方法打开一个新的webview,mui会自动监听新页面的loaded事件,
               若加载完毕,再自动显示新页面;


           //4.3 页面关闭:勿重复监听backbutton

               则需要重写mui.back方法,切勿简单通过addEventListener添加backbutton监听,
               因为addEventListener只会增加新的执行程序,mui默认封装的监听执行逻辑依然会继续执行,
               因此若仅addEventListener添加用户确认框,则用户即使选择了取消,也会继续关闭窗口。


   //5.【手势操作】

            // 点击:忘记click
                mui为了解决这个问题,封装了tap事件,因此在任何点击的时候,请忘记click及onclick操作,
                统统使用如下代码:
                element.addEventListener('tap',function(){
                        //点击响应逻辑
                    });
                // 或者
                mui.(#select).on("tap","li".funcation(){
                       //点击响应逻辑
                });

   //6.【常见错误 Uncaught ReferenceError: plus is not defined】

               在app开发中,若要使用HTML5+扩展api,必须等plusready事件发生后才能正常使用,
               否则可能会报“plus is not defined”的错误;
               mui为简化开发,将plusReady事件封装成了mui.plusReady()方法,
               凡涉及到HTML5+的api,建议都写在mui.plusReady方法中;



'''【mui适用场景说明】-------------------------------------------------------------------------------------

        为解决HTML5在低端Android机上的性能缺陷,mui引入了原生加速,其中最关键的就是webview控件,
        因此mui若要发挥其全部能力,需和5+ App配合适用,若脱离5+ App,mui功能会受限,主要涉及三个部分:
        详细参考:http://ask.dcloud.net.cn/docs/#http://ask.dcloud.net.cn/article/113


'''【如何自定义mui控件样式】-------------------------------------------------------------------------------

        参考:http://ask.dcloud.net.cn/docs/#http://ask.dcloud.net.cn/article/87

'''【如何自定义icon图标】-------------------------------------------------------------------------------

        //1. 选择图库:(以淘宝素材库为例)

             淘宝:          http://iconfont.cn/collections?spm=a313x.7781069.0.0.KmfS4h
             ICO Moon:      https://icomoon.io/app/#/select
             Font Awesome:   http://www.bootcss.com/p/font-awesome/

        //2. 找到所需素材下载到本地(包含 css 和ttf文件)


        //3. 修改 iconfont.css 文件中的 【@font-face】

              保留所需的 ttf字体即可,如下:修改url增加相对路径 src:url('.../fonts/');

              @font-face {font-family: "iconfont";
                  src:url('.../fonts/iconfont.ttf') format('truetype'); /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
               }


        //4. 将 iconfont.css 拷贝到项目的fonts目录下,iconfont.ttf 拷贝到项目的css目录下。

        //5. mui中使用:

            //     class :
            //     mui-icon :写死
            //     iconfont :自定义图片字体的类名
            //     icon-nanzhuang : 自定义的icon名字
            <span class="mui-icon iconfont icon-nanzhuang"></span>


'''【如何判断预加载是否生效】-------------------------------------------------------------------------------

        1. 直观判断,预加载成功打开新页面很快不会有加载等待
        2. log分析




'''【MUI_JavaScript 函数 http://dev.dcloud.net.cn/mui/util/】-------------------------------------------------------------------------------

【窗口管理】

     //1.初始化MUI 和 准备 mui.init(); / mui.plusReady();

           目前支持在mui.init方法中配置的功能包括:
           创建子页面、关闭页面、手势事件配置、预加载、下拉刷新、上拉加载、设置系统状态栏背景颜色
           代码案列:
           mui.init({
               //子页面
                subpages: [{
                      url:your-subpage-url,//子页面HTML地址,支持本地地址和网络地址
                      id:your-subpage-id,//子页面标志
                      styles:{
                        top:subpage-top-position,//子页面顶部位置
                        bottom:subpage-bottom-position,//子页面底部位置
                        width:subpage-width,//子页面宽度,默认为100%
                        height:subpage-height,//子页面高度,默认为100%
                        ......
                      },
                      extras:{}//额外扩展参数
                  }],
               //预加载
                 preloadPages:[
                 {
                      url:prelaod-page-url,
                      id:preload-page-id,
                      styles:{},//窗口参数
                      extras:{},//自定义扩展参数
                      subpages:[{},{}]//预加载页面的子页面
                    }
                ],
               //下拉刷新
                pullRefresh : {
                   //...
                    },
               //上拉加载
                pullRefresh : {
                   //...
                },
                //手势配置
                 gestureConfig:{
                   //...
                },
                //侧滑关闭
                swipeBack:true, //Boolean(默认false)启用右滑关闭功能
               //监听Android手机的back、menu按键
                keyEventBind: {
                    backbutton: false,  //Boolean(默认truee)关闭back按键监听
                    menubutton: false   //Boolean(默认true)关闭back按键监听
                },
               //处理窗口关闭前的业务
                beforeback: function() {
                    //... //窗口关闭前处理其他业务详情点击 ↑ "关闭页面"链接查看
                },
               //设置状态栏颜色
               statusBarBackground: '#9defbcg', //设置状态栏颜色,仅iOS可用
             });
         //在app开发中,若要使用HTML5+扩展api,必须等plusready事件发生后才能正常使用mui.plusReady();


    // 2.打开新页面

          mui.openWindow({
                url:new-page-url,
                id:new-page-id,
                styles:{
                  top:newpage-top-position,//新页面顶部位置
                  bottom:newage-bottom-position,//新页面底部位置
                  width:newpage-width,//新页面宽度,默认为100%
                  height:newpage-height,//新页面高度,默认为100%
                  ......
                },
                extras:{
                  .....//自定义扩展参数,可以用来处理页面间传值
                },
                createNew:false,//是否重复创建同样id的webview,默认为false:不重复创建,直接显示
                show:{
                  autoShow:true,//页面loaded事件发生后自动显示,默认为true
                  aniShow:animationType,//页面显示动画,默认为”slide-in-right“;
                  duration:animationTime//页面动画持续时间,Android平台默认100毫秒,iOS平台默认200毫秒;
                },
                waiting:{
                  autoShow:true,//自动显示等待框,默认为true
                  title:'正在加载...',//等待对话框上显示的提示内容
                  options:{
                    width:waiting-dialog-widht,//等待框背景区域宽度,默认根据内容自动计算合适宽度
                    height:waiting-dialog-height,//等待框背景区域高度,默认根据内容自动计算合适高度
                    ......
                  }
                }
             })


    // 3.关闭页面

           mui框架将窗口关闭功能封装在mui.back方法中,具体执行逻辑是:
           若当前webview为预加载页面,则hide当前webview;
           否则,close当前webview;

           在mui框架中,有三种操作会触发页面关闭(执行mui.back方法):

           // 使用参考(http://dev.dcloud.net.cn/mui/window/#openwindow)

           1. 点击包含.mui-action-back类的控件
           2. 在屏幕内,向右快速滑动
           3. Android手机按下back按键

           ''''' 除了如上三种操作外,也可以直接调用mui.back()方法,执行窗口关闭逻辑;

    // 4.预加载页面
         方式一:通过mui.init方法中的preloadPages参数进行配置.
         /*
           优点:1.可预加载多个页面
           缺点:1. 不会返回预加载每个页面的引用,
                2.获得对应webview引用,plus.webview.getWebviewById方式获得
                3.是异步执行,执行完mui.init方法后立即获得对应webview引用可能会失败
          */
            mui.init({
              preloadPages:[
                {
                  url:prelaod-page-url,
                  id:preload-page-id,
                  styles:{},//窗口参数
                  extras:{},//自定义扩展参数
                  subpages:[{},{}]//预加载页面的子页面
                }
              ],
              preloadLimit:5//预加载窗口数量限制(一旦超出,先进先出)默认不限制
            });

        方式二:通过mui.preload方法预加载.// 可立即返回对应webview的引用,但一次仅能预加载一个页面
            /*
              优点:1.可立即返回对应webview的引用
              缺点:1. 但一次仅能预加载一个页面
          */
             var page = mui.preload({
                url:new-page-url,
                id:new-page-id,//默认使用当前页面的url作为id
                styles:{},//窗口参数
                extras:{}//自定义扩展参数
            });


【事件管理】

      // 1.事件绑定:addEventListener() / .on()

           除了可以使用[【addEventListener()】方法监听某个特定元素上的事件外, 也可以使用【.on()】方法实现批量元素的事件绑定。

           ''''' 【 .on( event , selector , handler ) 】
                event
                Type: String
                需监听的事件名称,例如:'tap'
                selector
                Type: String
                选择器
                handler
                Type: Function( Event event )
                事件触发时的回调函数,通过回调中的event参数可以获得事件详情

      //2.事件取消:off()

          ''''' 【 .off( event , selector , handler ) 】
                event
                Type: String
                需取消绑定的事件名称,例如:'tap'
                selector
                Type: String
                选择器
                handler
                Type: Function
                之前绑定到该元素上的事件函数,不支持匿名函数

          ''''' 【 .off( event , selector) 】
                event
                Type: String
                需取消绑定的事件名称,例如:'tap'
                selector
                Type: String
                选择器

          ''''' 【 .off( event ) 】
                event
                Type: String
                需取消绑定的事件名称,例如:'tap'
          ''''' 【 .off( ) 】
                空参数,删除该元素上所有事件

      // 3. 事件触发  mui.trigger() 使用mui.trigger()方法可以动态触发特定DOM元素上的事件。

          ''''' 【.trigger( element , event , data )】
               element
               Type: Element
               触发事件的DOM元素
               event
               Type: String
               事件名字,例如:'tap'、'swipeleft'
               data
               Type: Object
               需要传递给事件的业务参数

               // 示例 自动触发按钮的点击事件:
               var btn = document.getElementById("submit");
                //监听点击事件
                btn.addEventListener("tap",function () {
                  console.log("tap event trigger");
                });
                //触发submit按钮的点击事件
                mui.trigger(btn,'tap');

      //4. 手势事件

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

           使用:通过mui.init方法中的gestureConfig参数,配置具体需要监听的手势事

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

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

              // 使用:

              单个元素上的事件监听,直接使用addEventListener(0即可,如下:

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

              若多个元素执行相同逻辑,则建议使用事件绑定(on())。
           */



      //5. 自定义事件:(页面传值)

          5.1 添加自定义事件监听操作和标准js事件监听类似,可直接通过window对象添加,如下:

              window.addEventListener('customEvent',function(event){
                //通过event.detail可获得传递过来的参数内容
                 ....
              });

           5.2 触发自定义事件,通过mui.fire()方法可触发目标窗口的自定义事件: 
               目标webview必须触发loaded事件后才能使用自定义事件

             ''''' 【 .fire( target , event , data ) 】
                        target
                        Type: WebviewObject
                        需传值的目标webview
                        event
                        Type: String
                        自定义事件名称
                        data
                        Type: JSON
                        json格式的数据


            /** 实列:

              【A.html】

                1. 预加载B.html页面  preload()

                mui.plusReady(function() {
                    var page = mui.preload({
                                url:'examples/zidingyi.html',
                                id:'zcmain'
                        });
                });

                2. 触发自定义事件

                var webviews = plus.webview.getWebviewById("zcmain");         // 根据Id 获取B.html 的webview
                        alert("webviews = " + webviews);
                        mui.fire(webviews,'intents',{zcmains:'zhangchao'});   // 像B.html页面传递参数
                        mui.openWindow({                                      // 打开B.html
                            url:'examples/zidingyi.html',
                            id:'zcmain'
                        });

               【B.html】

                   1. 监听自定义事件 获取去A.html 页面传递过来的数据
                   window.addEventListener('intents',function(event){
                      //获得事件参数
                      var id = event.detail.zcmains;
                      alert("id = " + id);
                      //根据id向服务器请求新闻详情
                    });
            *
            */


【utils】

      1. init();  // 初始化

           创建子页面、关闭页面、手势事件配置、预加载、下拉刷新、上拉加载、设置系统状态栏背景颜色(仅支持ios)。

      2. mui(); // mui使用css选择器获取HTML元素,返回mui对象数组。

           mui("p"):选取所有<p>元素
           mui("p.title"):选取所有包含.title类的<p>元素
           mui("#loginbt"); 选取id为loginbt的元素
           mui(".registerbt");选取class为registerbt的元素
           //若要将mui对象转化成dom对象,可使用如下方法(类似jquery对象转成dom对象):
           //obj1是mui对象
               var obj1 = mui("#title");
           //obj2是dom对象
               var obj2 = obj1[0]; 

      3. each() // 既是一个类方法,同时也是一个对象方法

         mui.each( obj , handler )
         obj
         Type: Array||JSONObj
         需遍历的对象或数组;若为对象,仅遍历对象根节点下的key
         handler
         Type: Function( Integer||String index,Anything element)
         为每个元素执行的回调函数;其中,index表示当前元素的下标或key,element表示当前匹配元素
         // each 遍历数组/json字符串
         var array = [1,2,3];          // 数组
         var str = {"name":"zcmain","age":"30","sex":"男"};  // json字符串
         each_array.addEventListener('tap',function(){
         // 遍历json字符串
         mui.each(str,function(index,item){
              log("index = " + index + "\nitem = " + item);
            });
         // 遍历数组
         mui.each(array,function(index,item){
              log("index = " + index + "\nitem = " + item);
            });
         });

      4. scrollTo();  // 滑动(仅支付纵向)

         mui.scrollTo(500,1000,functioin(){});   // 500-华东距离;1000-执行动时间(毫秒);function-滑动结束回调函数

      5. os  // 判断当前运行环境的需求, 使用: mui.os.XXX即可

        // Android(可以访问的参数为:)
                .wechat
                返回是否为微信端
                .android
                返回是否为安卓手机
                .version
                安卓版本号
                .isBadAndroid
                android非Chrome环境
        // iOS(可以访问的参数为:)
                .iOS
                返回是否为苹果设备
                .version
                返回手机版本号
                .iphone
                返回是否为苹果手机
                .ipad
                返回是否为ipad
        // plus(可以访问的参数为:)
                .plus
                返回是否在基座中运行
                .stream
                返回是否为流应用


【Ajax】   
      // MUI封装Ajax函数 支持GET、POST请求方式,
      // 支持返回json、xml、html、text、script数据类型


      mui.ajax('http://server-name/login.php',{
        data:{                       // 发送到服务器的业务数据
            username:'username',
            password:'password'
        },
        /*
          dataType,预期服务器返回的数据类型,可选值如下:
            "xml": 返回XML文档
            "html": 返回纯文本HTML信息;
            "script": 返回纯文本JavaScript代码
            "json": 返回JSON数据
            "text": 返回纯文本字符串
        */
        dataType:'json',           
        type:'post',     //HTTP请求类型,目前仅支持'GET'和'POST',默认为'GET'方式
        timeout:10000,   //请求超时时间(毫秒),默认值为0,表示永不超时,如果超时会触发 error 回调。
        success:function(data){
            //服务器返回响应,根据响应结果,分析是否登录成功;
            ...
        },
        error:function(xhr,type,errorThrown){
            //异常处理;
            console.log(type);
        }
    });

猜你喜欢

转载自blog.csdn.net/weixin_42400955/article/details/84206687