美文网首页
frame切换

frame切换

作者: 璐璐熙可 | 来源:发表于2017-06-02 08:04 被阅读42次

实现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
        });
    }

相关文章

网友评论

      本文标题:frame切换

      本文链接:https://www.haomeiwen.com/subject/tgmyfxtx.html