<!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">
<!--标准mui.css-->
<link rel="stylesheet" href="../css/mui.min.css">
<!--App自定义的css-->
<link rel="stylesheet" type="text/css" href="../css/app.css" />
<style>
.mui-row.mui-fullscreen>[class*="mui-col-"] {
height: 100%;
}
.mui-col-xs-3,
.mui-col-xs-9 {
overflow-y: auto;
height: 100%;
}
.mui-segmented-control .mui-control-item {
line-height: 50px;
width: 100%;
}
.mui-control-content {
display: block;
}
.mui-segmented-control.mui-segmented-control-inverted .mui-control-item.mui-active {
background-color: #fff;
}
</style>
</head>
<body>
<header class="mui-bar mui-bar-nav">
<a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
<h1 class="mui-title">侧面选项卡-div模式</h1>
</header>
<div class="mui-content mui-row mui-fullscreen">
<div class="mui-col-xs-3">
<div id="segmentedControls" class="mui-segmented-control mui-segmented-control-inverted mui-segmented-control-vertical">
</div>
</div>
<div id="segmentedControlContents" class="mui-col-xs-9" style="border-left: 1px solid #c8c7cc;">
</div>
</div>
<script src="../js/mui.min.js"></script>
<script>
mui.init({
swipeBack: true //启用右滑关闭功能
});
var controls = document.getElementById("segmentedControls");
var contents = document.getElementById("segmentedControlContents");
var html = [];
var i = 1,
j = 1,
m = 16, //左侧选项卡数量+1
n = 21; //每个选项卡列表数量+1
for (; i < m; i++) {
html.push('<a class="mui-control-item" data-index="' + (i - 1) + '" href="#content' + i + '">选项' + i + '</a>');
}
controls.innerHTML = html.join('');
html = [];
for (i = 1; i < m; i++) {
html.push('<div id="content' + i + '" class="mui-control-content"><ul class="mui-table-view">');
for (j = 1; j < n; j++) {
html.push('<li class="mui-table-view-cell">第' + i + '个选项卡子项-' + j + '</li>');
}
html.push('</ul></div>');
}
contents.innerHTML = html.join('');
//默认选中第一个
controls.querySelector('.mui-control-item').classList.add('mui-active');
// contents.querySelector('.mui-control-content').classList.add('mui-active');
(function() {
var controlsElem = document.getElementById("segmentedControls");
var contentsElem = document.getElementById("segmentedControlContents");
var controlListElem = controlsElem.querySelectorAll('.mui-control-item');
var contentListElem = contentsElem.querySelectorAll('.mui-control-content');
var controlWrapperElem = controlsElem.parentNode;
var controlWrapperHeight = controlWrapperElem.offsetHeight;
var controlMaxScroll = controlWrapperElem.scrollHeight - controlWrapperHeight;//左侧类别最大可滚动高度
var maxScroll = contentsElem.scrollHeight - contentsElem.offsetHeight;//右侧内容最大可滚动高度
var controlHeight = controlListElem[0].offsetHeight;//左侧类别每一项的高度
var controlTops = []; //存储control的scrollTop值
var contentTops = [0]; //存储content的scrollTop值
var length = contentListElem.length;
for (var i = 0; i < length; i++) {
controlTops.push(controlListElem[i].offsetTop + controlHeight);
}
for (var i = 1; i < length; i++) {
var offsetTop = contentListElem[i].offsetTop;
if (offsetTop + 100 >= maxScroll) {
var height = Math.max(offsetTop + 100 - maxScroll, 100);
var totalHeight = 0;
var heights = [];
for (var j = i; j < length; j++) {
var offsetHeight = contentListElem[j].offsetHeight;
totalHeight += offsetHeight;
heights.push(totalHeight);
}
for (var m = 0, len = heights.length; m < len; m++) {
contentTops.push(parseInt(maxScroll - (height - heights[m] / totalHeight * height)));
}
break;
} else {
contentTops.push(parseInt(offsetTop));
}
}
contentsElem.addEventListener('scroll', function() {
var scrollTop = contentsElem.scrollTop;
for (var i = 0; i < length; i++) {
var offsetTop = contentTops[i];
var offset = Math.abs(offsetTop - scrollTop);
// console.log("i:"+i+",scrollTop:"+scrollTop+",offsetTop:"+offsetTop+",offset:"+offset);
if (scrollTop < offsetTop) {
if (scrollTop >= maxScroll) {
onScroll(length - 1);
} else {
onScroll(i - 1);
}
break;
} else if (offset < 20) {
onScroll(i);
break;
}else if(scrollTop >= maxScroll){
onScroll(length - 1);
break;
}
}
});
var lastIndex = 0;
//监听content滚动
var onScroll = function(index) {
if (lastIndex !== index) {
lastIndex = index;
var lastActiveElem = controlsElem.querySelector('.mui-active');
lastActiveElem && (lastActiveElem.classList.remove('mui-active'));
var currentElem = controlsElem.querySelector('.mui-control-item:nth-child(' + (index + 1) + ')');
currentElem.classList.add('mui-active');
//简单处理左侧分类滚动,要么滚动到底,要么滚动到顶
var controlScrollTop = controlWrapperElem.scrollTop;
if (controlScrollTop + controlWrapperHeight < controlTops[index]) {
controlWrapperElem.scrollTop = controlMaxScroll;
} else if (controlScrollTop > controlTops[index] - controlHeight) {
controlWrapperElem.scrollTop = 0;
}
}
};
//滚动到指定content
var scrollTo = function(index) {
contentsElem.scrollTop = contentTops[index];
};
mui(controlsElem).on('tap', '.mui-control-item', function(e) {
scrollTo(this.getAttribute('data-index'));
return false;
});
})();
</script>
</body>
</html>
网友评论