frame切换

实现frame间的切换

frame


第一步:首先准备好移动端的静态页面

如下所示:(前提是所有涉及到的样式和js部分都要引入到你的页面中)

静态页部分如下

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0"/>
    <title>首页</title>
    <link rel="stylesheet" type="text/css" href="../css/api.css"/>
    <link rel="stylesheet" type="text/css" href="../css/aui.css"/>
    <link rel="stylesheet" type="text/css" href="../css/base_css.css">
    <link rel="stylesheet" type="text/css" href="../css/iconfont.css">
    <style>
        .aui-bar-nav{
            border-bottom:0.02rem solid gray;
        }
        .close{
            border:1px solid #dddddd;
            width:1.5rem;
            text-align: center;
            border-radius: 1rem;
        }
        .close i{
            font-size: 0.5rem;
        }
        .aui-label.aui-label-info{
            padding:0.35rem 0.5rem; 
            border-radius: 0.25rem;
        }
        .review_area{
            width:100%;
            background: #f8f8f8;
            padding:0.5rem 0.75rem;
            margin-top: 1rem;
        }
        .hot{
            color: gray;
            float: right;
        }
        .number{
            margin:0 0.25rem;
        }
    </style>
</head>
<body>
     <header id="header" class="aui-bar aui-bar-nav aui-bar-light">
        <div class="aui-tab" id="tab">
            <div class="aui-tab-item aui-active">Item1</div>
            <div class="aui-tab-item"><div></div>Item2</div>
            <div class="aui-tab-item">Item3</div>
            <div class="aui-tab-item">Item4</div>
        </div>
    </header>
    <div class="head"></div>
    <div class="aui-card-list">
        <div class="aui-card-list-header aui-card-list-user">
            <div class="aui-card-list-user-avatar">
                ![](../image/demo4.png)
            </div>
            <div class="aui-card-list-user-name aui-margin-t-10">
                <div>小东Mamba</div>
                <small style="float: right;">
                    <div class="close">
                        <i class="aui-iconfont aui-icon-close"></i>
                    </div>
                </small>
            </div>
        </div>
        <div class="title aui-padded-l-15 aui-padded-r-15 aui-padded-t-10">
            谁吃过,举个手,偶然公司发现的
        </div>
        <div class="aui-card-list-content-padded">
            ![](../image/l2.png)
        </div>
        <div class="aui-label aui-label-info aui-margin-l-15">小时候办过的奇葩事</div>
        <div class="aui-padded-r-15 aui-padded-l-15">
            <div class="review_area">
                <p>
                    这在我们仙界叫静心草,生服可以添加800年功力,突破境界的时候用一根可以增加2成几率
                    ,还可以炼制洗髓丹和凝神液,是可遇不可求的圣品仙草,道友你开个价吧,老夫灵石不缺!
                </p>
            </div>
        </div>
        <div class="aui-card-list-footer">
            <div><i class="iconfont"></i> 39</div>
            <div><i class="iconfont"></i> 1884</div>
            <div class="hot">
                <i class="iconfont up"></i>
                <span class="number"">2994</span>
                <i class="iconfont down"></i>
            </div>
        </div>
    </div>
    <div class="separate"></div>
    <div class="aui-card-list">
        <div class="aui-card-list-header aui-card-list-user">
            <div class="aui-card-list-user-avatar">
                ![](../image/demo4.png)
            </div>
            <div class="aui-card-list-user-name aui-margin-t-10">
                <div>小东Mamba</div>
                <small style="float: right;">
                    <div class="close">
                        <i class="aui-iconfont aui-icon-close"></i>
                    </div>
                </small>
            </div>
        </div>
        <div class="title aui-padded-l-15 aui-padded-r-15 aui-padded-t-10">
            谁吃过,举个手,偶然公司发现的
        </div>
        <div class="aui-card-list-content-padded">
            ![](../image/l2.png)
        </div>
        <div class="aui-label aui-label-info aui-margin-l-15">小时候办过的奇葩事</div>
        <div class="aui-padded-r-15 aui-padded-l-15">
            <div class="review_area">
                <p>
                    这在我们仙界叫静心草,生服可以添加800年功力,突破境界的时候用一根可以增加2成几率
                    ,还可以炼制洗髓丹和凝神液,是可遇不可求的圣品仙草,道友你开个价吧,老夫灵石不缺!
                </p>
            </div>
        </div>
        <div class="aui-card-list-footer">
            <div><i class="iconfont"></i> 39</div>
            <div><i class="iconfont"></i> 1884</div>
            <div class="hot">
                <i class="iconfont up"></i>
                <span class="number"">2994</span>
                <i class="iconfont down"></i>
            </div>
        </div>
    </div>
    <footer class="aui-bar aui-bar-tab" id="footer">
        <div class="aui-bar-tab-item aui-active" tapmode>
            <i class="iconfont"></i>
            <div class="aui-bar-tab-label">最右</div>
        </div>
        <div class="aui-bar-tab-item" tapmode>
            <i class="iconfont"></i>
            <div class="aui-bar-tab-label">关注</div>
        </div>
        <div class="aui-bar-tab-item" tapmode>
            <i class="iconfont"></i>
            <div class="aui-bar-tab-label">消息</div>
        </div>
        <div class="aui-bar-tab-item" tapmode>
            <i class="iconfont"></i>
            <div class="aui-bar-tab-label">我的</div>
        </div>
    </footer>
</body>
<script type="text/javascript" src="../script/api.js"></script>
<script type="text/javascript">
   
</script>
</html>

第二步:开始写js部分的代码

apiready = function(){ }
这个是必须有的

接下来所有的js代码都要写在这个函数中

apiready = function(){
    var header=$api.byId('header');
    var headerH=$api.offset(header).h;
    var menus=$api.domAll(header, '.aui-tab-item');
    var frames=[];
    for(var i=0; i<menus.length; i++){
        frames.push({
               name: 'main_frame_'+i, 
               url: 'main_frame.html',
            })
    }
       api.openFrameGroup ({
           name: 'mainFrameGroup',
           scrollEnabled: true,
           rect: {
                x: 0, 
                y: headerH, 
                w: 'auto', 
                h: 'auto'
           },
           index: 0,
           frames: frames
       }, function(ret, err){
           if( ret ){
                alert( JSON.stringify( ret ) );
           }else{
                alert( JSON.stringify( err ) );
           }
       });
   }

到此为止可以实现页面间的手势滑动切换效果

第三步:开始实现状态切换

首先把if---else去掉然后开始操作

 apiready = function(){
    var header=$api.byId('header');
    var headerH=$api.offset(header).h;
    menus=$api.domAll(header, '.aui-tab-item');
    var frames=[];
    for(var i=0; i<menus.length; i++){
        frames.push({
               name: 'main_frame_'+i, 
               url: 'main_frame.html',
            })
    }
       api.openFrameGroup ({
           name: 'mainFrameGroup',
           scrollEnabled: true,
           rect: {
                x: 0, 
                y: headerH, 
                w: 'auto', 
                h: 'auto'
           },
           index: 0,
           frames: frames
       }, function(ret, err){
           fnSetNavHeaderSelected(ret.index);
       });
   }
   var menus;
   function fnSetNavHeaderSelected(index_){
        for(i=0; i<menus.length; i++){
            if(index_==i){
                $api.addCls(menus[i], 'aui-active');
            }else{
                $api.removeCls(menus[i], 'aui-active');
            }
        }
   }

此时手势滑动页面,导航部分也会跟着切换

第四步:开始实现点击菜单切换

首先要在tab静态页的部分监听一个onclick事件,调用的函数为setNavMenuIndex() 如果是第一个就是0,以此类推如下所示
事件加在静态部分

<header id="header" class="aui-bar aui-bar-nav aui-bar-light">
        <div class="aui-tab" id="tab">
            <div class="aui-tab-item aui-active">Item1</div>
            <div class="aui-tab-item"><div></div>Item2</div>
            <div class="aui-tab-item">Item3</div>
            <div class="aui-tab-item">Item4</div>
        </div>
</header>

事件加完后如下所示

<header id="header" class="aui-bar aui-bar-nav aui-bar-light">
    <div class="aui-tab" id="tab">
        <div class="aui-tab-item aui-active" onclick="setNavMenuIndex(0);">Item1</div>
        <div class="aui-tab-item" onclick="setNavMenuIndex(1);"><div></div>Item2</div>
        <div class="aui-tab-item" onclick="setNavMenuIndex(2);">Item3</div>
        <div class="aui-tab-item" onclick="setNavMenuIndex(3);">Item4</div>
    </div>
</header>

第五步:在var menus;的后面定义一下setNavMenuIndex这个函数

然后调用

var menus;
    function fnSetNavMenuIndex(index_) {
        api.setFrameGroupIndex({
            name: 'maingroup',
            index: index_,
            scroll: true
        });
    }

此时已经能够实现点击菜单切换的效果

第六步:优化点击交互响应

默认的webkit浏览器内部对于这个onclick事件都有300ms的延迟,为什么呢,原因是浏览器内部有一个反射符,它要判断你的这次点击是短按还是长按,
得先通过排除法,排除你当前的事件不是一个长按,它采取触发短按.
最好的处理延迟的办法是增加一个tapmode这样一个属性

var menus;
    function fnSetNavMenuIndex(index_) {
        fnSetNavMenuSelected(index_);//先执行此函数
        api.setFrameGroupIndex({
            name: 'maingroup',
            index: index_,
            scroll: true
        });
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,013评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,205评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,370评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,168评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,153评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,954评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,271评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,916评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,382评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,877评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,989评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,624评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,209评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,199评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,418评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,401评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,700评论 2 345

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,498评论 25 707
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,728评论 1 92
  • 结构:故事+干货+升华 观点:唯有努力与付出,生活方能靠双手改变。(心灵鸡汤类) 论据: 1、时刻准备方有横空出世...
    NANA0阅读 395评论 2 2
  • 你不逼一下自己,根本不知自己有多优秀
    新兴市场的小逻辑阅读 206评论 0 0
  • 今天是10月16日,农历是九月十六。晚上和妻子在护城河边散步时,明月朗朗在天。忽然想起“山月”“江月”这样的词语,...
    疏食遨游客阅读 373评论 2 3