• mui


    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逻辑处理,
    这样若将没有typebutton放在form表单中,点击按钮就会执行form表单提交,页面就会刷新,用户体验极差
     
     
    //4.【窗口管理】
     
    //4.1 页面初始化:必须执行mui.init方法
     
    mui在页面初始化时,初始化了很多参数配置,比如:
    按键监听、手势监听等,因此mui页面都必须调用一次mui.init()方法;
     
    //4.2 页面跳转:抛弃href跳转
     
    mui.openWindow方法打开一个新的webviewmui会自动监听新页面的loaded事件,
    若加载完毕,再自动显示新页面;
     
     
    //4.3 页面关闭:勿重复监听backbutton
     
    则需要重写mui.back方法,切勿简单通过addEventListener添加backbutton监听,
    因为addEventListener只会增加新的执行程序,mui默认封装的监听执行逻辑依然会继续执行,
    因此若仅addEventListener添加用户确认框,则用户即使选择了取消,也会继续关闭窗口。
     
     
    //5.【手势操作】
     
    // 点击:忘记click
    mui为了解决这个问题,封装了tap事件,因此在任何点击的时候,请忘记clickonclick操作,
    统统使用如下代码:
    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+ Appmui功能会受限,主要涉及三个部分:
    详细参考: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 Moonhttps://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,//子页面底部位置
    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"):选取所有<p>元素
    mui("p.title"):选取所有包含.title类的<p>元素
    mui("#loginbt"); 选取idloginbt的元素
    mui(".registerbt");选取classregisterbt的元素
    //若要将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表示当前元素的下标或keyelement表示当前匹配元素
    // 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
    androidChrome环境
    // 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);
    }
    });
     
  • 相关阅读:
    魅族手机不能通过设置Style和Background展示透明Activity的解决方法
    [翻译]The dark side of AsyncTask
    Eclipse卡死在Building workspace和android library update解决方法
    影响Java代码性能的一些细节
    WebView通过loadDataWithBaseURL加载本地页面卡死
    [04] Android逐帧动画(一)
    [03] Android系统亮度调节
    iOS UIViewContentMode详解
    setObject:forKey:与setValue:forKey:的区别
    选择排序
  • 原文地址:https://www.cnblogs.com/theWayToAce/p/5708139.html
Copyright © 2020-2023  润新知