妞见妞爱
妞见妞爱
  • 发布:2016-03-25 11:17
  • 更新:2016-03-25 16:07
  • 阅读:2305

关于在有侧滑界面,子界面弹出界面的问题

分类:MUI

1、现象描述:
我有一个界面,左边是侧滑,底部是 Tab 选项卡, 当我点击 内容区域的按钮弹出窗口时候, 界面的效果还是用侧滑的效果了。

侧滑是正常的,在侧滑点击列表调整正,但是点击 9 grid 里面的就不行。

2、效果图:

错误效果图:

3、代码:

main.js

var menu = null,  
    main = null;  
var showMenu = false;  

mui.init({  
    swipeBack: false,  
    statusBarBackground: '#f7f7f7',  
});  

mui.plusReady(function() {  
    //仅支持竖屏显示  
    plus.screen.lockOrientation("portrait-primary");  
    main = plus.webview.currentWebview();  
    main.addEventListener('maskClick', closeMenu);  
    //处理侧滑导航,为了避免和子页面初始化等竞争资源,延迟加载侧滑页面;  
    setTimeout(function() {  
        menu = mui.preload({  
            id: 'main-menu',  
            url: 'main-menu.html',  
            styles: {  
                left: 0,  
                width: '70%',  
                zindex: 0  
            },  
            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();  
    }  
});  

//主界面向右滑动,若菜单未显示,则显示菜单;否则不做任何操作  
window.addEventListener("swiperight", openMenu);  
//主界面向左滑动,若菜单已显示,则关闭菜单;否则,不做任何操作;  
window.addEventListener("swipeleft", closeMenu);  
//侧滑菜单触发关闭菜单命令  
window.addEventListener("menu:close", closeMenu);  
window.addEventListener("menu:open", openMenu);  
//重写mui.menu方法,Android版本menu按键按下可自动打开、关闭侧滑菜单;  
mui.menu = function() {  
    if (showMenu) {  
        closeMenu();  
    } else {  
        openMenu();  
    }  
}  

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

//========================Tab============================  

//mui初始化  
mui.init();  
var subpages = ['tab-webview-subpage-index.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');  
    }  
});

第一个 tab 的 js:

mui.init({  
            swipeBack: true //启用右滑关闭功能  
        });  
        var aniShow = "pop-in";  
        //只有ios支持的功能需要在Android平台隐藏;  
        if (mui.os.android) {  
            var list = document.querySelectorAll('.ios-only');  
            if (list) {  
                for (var i = 0; i < list.length; i++) {  
                    list[i].style.display = 'none';  
                }  
            }  
            //Android平台暂时使用slide-in-right动画  
            if (parseFloat(mui.os.version) < 4.4) {  
                aniShow = "slide-in-right";  
            }  
        }  
        /**  
         * 所有的方法都要在这里面调用  
         */  
        mui.plusReady(function() {  
            console.log("当前页面URL:" + plus.webview.currentWebview().getURL());  
        });  

        //grid-9 item 点击事件  
        mui('.mui-table-view').on('tap', 'a', function(e) {  
            var targetPage = this.getAttribute('href');  
            console.log("url:" + targetPage);  

            //打开关于页面  
            mui.openWindow({  
                url: 'list_pullrefresh_main.html',  
                id: 'list_pullrefresh_main',  
                styles: {  
                    left: 0,  
                    width: '70%',  
                    zindex: 2 //因为侧滑菜单,所以控制显示层级  
                },  
                show: {  
                    aniShow: aniShow  
                },  
                waiting: {  
                    autoShow: false  
                }  
            });   
        });

主界面代码:

2016-03-25 11:17 负责人:无 分享
已邀请:
妞见妞爱

妞见妞爱 (作者)

问题解决了。。谢谢 果汁! 原来是我多写了个 参数。。都是复制粘贴坑的啊。。。

//打开关于页面
mui.openWindow({
url: 'list_pullrefresh_main.html',
id: 'list_pullrefresh_main',
styles: {
left: 0,
// width: '70%', //就是这个东西害的
zindex: 2 //因为侧滑菜单,所以控制显示层级
},
show: {
aniShow: aniShow
},
waiting: {
autoShow: false
}
});

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