地球人
地球人
  • 发布:2016-01-06 16:15
  • 更新:2016-01-06 16:46
  • 阅读:2638

侧滑菜单闪动.

分类:MUI

webview 模式右滑侧滑菜单,在弹出滑动菜单时的瞬间有闪动现象,该怎么解决?
顶部左侧按钮 有时点击几遍才显示是怎么回事!
---------------------------底部有代码附件---------------------------------

---------------------------------login.html---------------------------------

<!DOCTYPE html>
<html class="ui-page-login">

<head>  
    <meta charset="utf-8">  
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />  
    <title></title>  
    <link href="css/mui.min.css" rel="stylesheet" />  
    <link href="css/style.css" rel="stylesheet" />  
    <style>  
        .area {  
            margin: 20px auto 0px auto;  
        }  
        .mui-input-group {  
            margin-top: 10px;  
        }  
        .mui-input-group:first-child {  
            margin-top: 20px;  
        }  
        .mui-input-group label {  
            width: 22%;  
        }  
        .mui-input-row label~input,  
        .mui-input-row label~select,  
        .mui-input-row label~textarea {  
            width: 78%;  
        }  
        .mui-checkbox input[type=checkbox],  
        .mui-radio input[type=radio] {  
            top: 6px;  
        }  
        .mui-content-padded {  
            margin-top: 25px;  
        }  
        .mui-btn {  
            padding: 10px;  
        }  
        .link-area {  
            display: block;  
            margin-top: 25px;  
            text-align: center;  
        }  
        .spliter {  
            color: #bbb;  
            padding: 0px 8px;  
        }  
        .oauth-area {  
            position: absolute;  
            bottom: 20px;  
            left: 0px;  
            text-align: center;  
            width: 100%;  
            padding: 0px;  
            margin: 0px;  
        }  
        .oauth-area .oauth-btn {  
            display: inline-block;  
            width: 50px;  
            height: 50px;  
            background-size: 30px 30px;  
            background-position: center center;  
            background-repeat: no-repeat;  
            margin: 0px 20px;  
            /*-webkit-filter: grayscale(100%); */  

            border: solid 1px #ddd;  
            border-radius: 25px;  
        }  
        .oauth-area .oauth-btn:active {  
            border: solid 1px #aaa;  
        }  
    </style>  

</head>  

<body>  
    <header class="mui-bar mui-bar-nav">  
        <h1 class="mui-title">登录</h1>  
    </header>  
    <div class="mui-content">  
        <form id='login-form' class="mui-input-group">  
            <div class="mui-input-row">  
                <label>账号</label>  
                <input id='account' type="text" class="mui-input-clear mui-input" placeholder="请输入账号" value="111111">  
            </div>  
            <div class="mui-input-row">  
                <label>密码</label>  
                <input id='password' type="password" class="mui-input-clear mui-input" placeholder="请输入密码" value="111111">  
            </div>  
        </form>  
        <form class="mui-input-group">  
            <ul class="mui-table-view mui-table-view-chevron">  
                <li class="mui-table-view-cell">  
                    自动登录  
                    <div id="autoLogin" class="mui-switch">  
                        <div class="mui-switch-handle"></div>  
                    </div>  
                </li>  
            </ul>  
        </form>  
        <div class="mui-content-padded">  
            <button id='login' class="mui-btn mui-btn-block mui-btn-primary">登录</button>  
            <div class="link-area"><a id='reg'>注册账号</a> <span class="spliter">|</span> <a id='forgetPassword'>忘记密码</a>  
            </div>  
        </div>  
        <div class="mui-content-padded oauth-area">  

        </div>  
    </div>  
    <script src="js/mui.min.js"></script>  
    <script src="js/mui.enterfocus.js"></script>  
    <script src="js/app.js"></script>  
    <script>  
        (function($, doc) {  
            $.init({  
                statusBarBackground: '#f7f7f7'  
            });  
            $.plusReady(function() {  
                plus.screen.lockOrientation("portrait-primary");  
                var settings = app.getSettings();  
                var state = app.getState();  
                var mainPage = $.preload({  
                    "id": 'main',  
                    "url": 'main.html'  
                });  
                var toMain = function() {  
                    $.fire(mainPage, 'show', null);  
                    setTimeout(function() {  
                        $.openWindow({  
                            id: 'main',  
                            show: {  
                                aniShow: 'pop-in'  
                            },  
                            waiting: {  
                                autoShow: false  
                            }  
                        });  
                    }, 0);  
                    //mui.back()//关闭当前页面   
                };  
                //检查 "登录状态/锁屏状态" 开始  
                if (settings.autoLogin && state.token && settings.gestures) {  
                    $.openWindow({  
                        url: 'unlock.html',  
                        id: 'unlock',  
                        show: {  
                            aniShow: 'pop-in'  
                        },  
                        waiting: {  
                            autoShow: false  
                        }  
                    });  
                } else if (settings.autoLogin && state.token) {  
                    toMain();  
                } else {  
                    //第三方登录  
                    var auths = {};  
                    var oauthArea = doc.querySelector('.oauth-area');  
                    plus.oauth.getServices(function(services) {  
                        for (var i in services) {  
                            var service = services[i];  
                            auths[service.id] = service;  
                            var btn = document.createElement('div');  
                            btn.setAttribute('class', 'oauth-btn');  
                            btn.authId = service.id;  
                            btn.style.backgroundImage = 'url("images/' + service.id + '.png")'  
                                //alert(service.id);  
                                //btn.innerText = service.description + "登录";  
                            oauthArea.appendChild(btn);  
                        }  
                        $(oauthArea).on('tap', '.oauth-btn', function() {  
                            var auth = auths[this.authId];  
                            var waiting = plus.nativeUI.showWaiting();  
                            auth.login(function() {  
                                waiting.close();  
                                plus.nativeUI.toast("登录认证成功");  
                                //alert(JSON.stringify(auth.authResult));  
                                auth.getUserInfo(function() {  
                                    plus.nativeUI.toast("获取用户信息成功");  
                                    //alert(JSON.stringify(auth.userInfo));  
                                    var name = auth.userInfo.nickname || auth.userInfo.name;  
                                    app.createState(name, function() {  
                                        toMain();  
                                    });  
                                }, function(e) {  
                                    plus.nativeUI.toast("获取用户信息失败:" + e.message);  
                                });  
                            }, function(e) {  
                                waiting.close();  
                                plus.nativeUI.toast("登录认证失败:" + e.message);  
                            });  
                        });  
                    }, function(e) {  
                        oauthArea.style.display = 'none';  
                        plus.nativeUI.toast("获取登录认证失败:" + e.message);  
                    });  
                }  
                // close splash  
                setTimeout(function() {  
                    //关闭 splash  
                    plus.navigator.closeSplashscreen();  
                }, 600);  
                //检查 "登录状态/锁屏状态" 结束  
                var loginButton = doc.getElementById('login');  
                var accountBox = doc.getElementById('account');  
                var passwordBox = doc.getElementById('password');  
                var autoLoginButton = doc.getElementById("autoLogin");  
                var regButton = doc.getElementById('reg');  
                var forgetButton = doc.getElementById('forgetPassword');  
                loginButton.addEventListener('tap', function(event) {  
                    var loginInfo = {  
                        account: accountBox.value,  
                        password: passwordBox.value  
                    };  
                    app.login(loginInfo, function(err) {  
                        if (err) {  
                            plus.nativeUI.toast(err);  
                            return;  
                        }  
                        toMain();  
                    });  
                });  
                $.enterfocus('#login-form input', function() {  
                    $.trigger(loginButton, 'tap');  
                });  
                autoLoginButton.classList[settings.autoLogin ? 'add' : 'remove']('mui-active')  
                autoLoginButton.addEventListener('toggle', function(event) {  
                    setTimeout(function() {  
                        var isActive = event.detail.isActive;  
                        settings.autoLogin = isActive;  
                        app.setSettings(settings);  
                    }, 50);  
                }, false);  
                regButton.addEventListener('tap', function(event) {  
                    $.openWindow({  
                        url: 'reg.html',  
                        id: 'reg',  
                        show: {  
                            aniShow: 'pop-in'  
                        },  
                        styles: {  
                            popGesture: 'hide'  
                        },  
                        waiting: {  
                            autoShow: false  
                        }  
                    });  
                }, false);  
                forgetButton.addEventListener('tap', function(event) {  
                    $.openWindow({  
                        url: 'forget_password.html',  
                        id: 'forget_password',  
                        show: {  
                            aniShow: 'pop-in'  
                        },  
                        styles: {  
                            popGesture: 'hide'  
                        },  
                        waiting: {  
                            autoShow: false  
                        }  
                    });  
                }, false);  
                //  
                window.addEventListener('resize', function() {  
                    oauthArea.style.display = document.body.clientHeight > 400 ? 'block' : 'none';  
                }, false);  
                //  
                var backButtonPress = 0;  
                $.back = function(event) {  
                    backButtonPress++;  
                    if (backButtonPress > 1) {  
                        plus.runtime.quit();  
                    } else {  
                        plus.nativeUI.toast('再按一次退出应用');  
                    }  
                    setTimeout(function() {  
                        backButtonPress = 0;  
                    }, 1000);  
                    return false;  
                };  
            });  
        }(mui, document));  
    </script>  
</body>  

</html>

---------------------------------main.html---------------------------------

<!DOCTYPE html>
<html>

<head>  
    <meta charset="utf-8">  
    <title>Hello MUI</title>  
    <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">  
    <meta name="apple-mobile-web-app-capable" content="yes">  
    <meta name="apple-mobile-web-app-status-bar-style" content="black">  

    <link rel="stylesheet" href="css/mui.min.css">  
    <style>  
        html,  
        body {  
            background-color: #efeff4;  
        }  
    </style>  
</head>  

<body>  
    <header class="mui-bar mui-bar-nav">  
        <a class="mui-icon mui-icon-bars mui-pull-left mui-plus-visible"></a>  
        <a id="info" class="mui-icon mui-icon-info-filled mui-pull-right" style="color: #999;"></a>  
        <h1 id="title" class="mui-title">首页</h1>  
    </header>  
    <nav class="mui-bar mui-bar-tab">  
        <a id="defaultTab" class="mui-tab-item mui-active" href="tab-webview-subpage-about.html">  
            <span class="mui-icon mui-icon-home"></span>  
            <span class="mui-tab-label">首页</span>  
        </a>  
        <a class="mui-tab-item" href="tab-webview-subpage-chat.html">  
            <span class="mui-icon mui-icon-email"><span class="mui-badge">9</span></span>  
            <span class="mui-tab-label">消息</span>  
        </a>  
        <a class="mui-tab-item" href="tab-webview-subpage-contact.html">  
            <span class="mui-icon mui-icon-contact"></span>  
            <span class="mui-tab-label">通讯录</span>  
        </a>  
        <a class="mui-tab-item" href="tab-webview-subpage-setting.html">  
            <span class="mui-icon mui-icon-gear"></span>  
            <span class="mui-tab-label">设置</span>  
        </a>  
    </nav>  
    <script src="js/mui.min.js"></script>  
    <script type="text/javascript" charset="utf-8">  
         //mui初始化  
        mui.init();  
        var showMenu = false;  
        var subpages = ['tab-webview-subpage-about.html', 'tab-webview-subpage-chat.html', 'tab-webview-subpage-contact.html', 'tab-webview-subpage-setting.html'];  
        var subpage_style = {  
            top: '45px',  
            bottom: '51px'  
        };  

        var aniShow = {};  

         //创建子页面,首个选项卡页面显示,其它均隐藏;  
        mui.plusReady(function() {  
            var self = plus.webview.currentWebview();  
            for (var i = 0; i < 4; i++) {  
                var temp = {};  
                var sub = plus.webview.create(subpages[i], subpages[i], subpage_style);  
                if (i > 0) {  
                    sub.hide();  
                }else{  
                    temp[subpages[i]] = "true";  
                    mui.extend(aniShow,temp);  
                }  
                self.append(sub);  
            }  
        });  
         //当前激活选项  
        var activeTab = subpages[0];  
        var title = document.getElementById("title");  
         //选项卡点击事件  
        mui('.mui-bar-tab').on('tap', 'a', function(e) {  
            var targetTab = this.getAttribute('href');  
            if (targetTab == activeTab) {  
                return;  
            }  
            //更换标题  
            title.innerHTML = this.querySelector('.mui-tab-label').innerHTML;  
            //显示目标选项卡  
            //若为iOS平台或非首次显示,则直接显示  
            if(mui.os.ios||aniShow[targetTab]){  
                plus.webview.show(targetTab);  
            }else{  
                //否则,使用fade-in动画,且保存变量  
                var temp = {};   
                temp[targetTab] = "true";  
                mui.extend(aniShow,temp);  
                plus.webview.show(targetTab,"fade-in",300);  
            }  
            //隐藏当前;  
            plus.webview.hide(activeTab);  
            //更改当前活跃的选项卡  
            activeTab = targetTab;  
        });  
         //自定义事件,模拟点击“首页选项卡”  
        document.addEventListener('gohome', function() {  
            var defaultTab = document.getElementById("defaultTab");  
            //模拟首页点击  
            mui.trigger(defaultTab, 'tap');  
            //切换选项卡高亮  
            var current = document.querySelector(".mui-bar-tab>.mui-tab-item.mui-active");  
            if (defaultTab !== current) {  
                current.classList.remove('mui-active');  
                defaultTab.classList.add('mui-active');  
            }  
        });  

        mui.plusReady(function() {  
            //仅支持竖屏显示  
            plus.screen.lockOrientation("portrait-primary");  
            main = plus.webview.currentWebview();  
            main.addEventListener('maskClick', closeMenu);  
            //处理侧滑导航,为了避免和子页面初始化等竞争资源,延迟加载侧滑页面;  
            setTimeout(function() {  
                menu = mui.preload({  
                    id: 'aside-menu',  
                    url: 'aside-menu.html',  
                    styles: {  
                        left: 0,  
                        width: '70%',  
                        zindex: 12  
                    },  
                    show: {  
                        aniShow: 'none'  
                    }  
                });  
            }, 200);  
        });  
        var isInTransition = false;  
        /**  
         * 显示侧滑菜单  
         */  
        function openMenu() {  
            if (isInTransition) {  
                return;  
            }  
            if (!showMenu) {  
                //侧滑菜单处于隐藏状态,则立即显示出来;  
                isInTransition = true;  
                menu.setStyle({  
                    mask: 'rgba(0,0,0,0)'  
                }); //menu设置透明遮罩防止点击  
                menu.show('none', 0, function() {  
                    //主窗体开始侧滑并显示遮罩  
                    main.setStyle({  
                        mask: 'rgba(0,0,0,0.4)',  
                        left: '70%',  
                        transition: {  
                            duration: 150  
                        }  
                    });  
                    mui.later(function() {  
                        isInTransition = false;  
                        menu.setStyle({  
                            mask: "none"  
                        }); //移除menu的mask  
                    }, 160);  
                    showMenu = true;  
                });  
            }  
        };  
        /**  
         * 关闭菜单  
         */  
        function closeMenu() {  
            if (isInTransition) {  
                return;  
            }  
            if (showMenu) {  
                //关闭遮罩;  
                //主窗体开始侧滑;  
                isInTransition = true;  
                main.setStyle({  
                    mask: 'none',  
                    left: '0',  
                    transition: {  
                        duration: 200  
                    }  
                });  
                showMenu = false;  
                //等动画结束后,隐藏菜单webview,节省资源;  
                mui.later(function() {  
                    isInTransition = false;  
                    menu.hide();  
                }, 300);  
            }  
        };  
        //点击左上角侧滑图标,打开侧滑菜单;  
        document.querySelector('.mui-icon-bars').addEventListener('tap', function(e) {  

            if (showMenu) {  
                closeMenu();  
            } else {  
                openMenu();  
            }  
        });  
    </script>  
</body>  

</html>

2016-01-06 16:15 负责人:无 分享
已邀请:
DCloud_UNI_FXY

DCloud_UNI_FXY

1、aside-menu.html的z-index调整为-1
2、入口页不要用login。用main。在main里根据业务逻辑来控制是否先显示login

  • 地球人 (作者)

    好的 感谢~

    2016-01-07 08:24

该问题目前已经被锁定, 无法添加新回复