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