123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- <!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>
|