• mui初探笔记


    /*  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名字
    			
    
          
    '''【如何判断预加载是否生效】-------------------------------------------------------------------------------
    		
    		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,//子页面底部位置
    						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,//新页面底部位置
    				  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:{
    					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"):选取所有元素
    mui("p.title"):选取所有包含.title类的元素
    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 + " item = " + item); });
    // 遍历数组 mui.each(array,function(index,item){ log("index = " + index + " item = " + 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); } });
  • 相关阅读:
    使用RazorGenerator对视图View进行单元测试
    C#常用获取本周、本月、本季度、本年的时间起止段代码
    Redis使用记录
    Git和ConEmu
    mongodb单索引的升序和降序
    AES 加密解密 php c#
    redis 外网连接错误
    .net mvc 分页
    检查Windows上安装的.net版本
    sqlserver跨服务器查询
  • 原文地址:https://www.cnblogs.com/xzzzys/p/7919450.html
Copyright © 2020-2023  润新知