UNPKG

9.8 kBJavaScriptView Raw
1require( [ 'gitbook' ], function ( gitbook ) {
2
3 window.onload = function() {
4 var uGitpage = {
5 init: function(){
6 this.summaryInit();
7 },
8 /**
9 * DOM元素
10 */
11 DOM:{
12 "$summary": $('.book-summary'),
13 "$bookInner": $('.body-inner'),
14 "footer":document.getElementsByTagName('footer')[0],
15 },
16 /**
17 * 左侧menu初始化
18 */
19 summaryInit:function(){
20 var DOM = this.DOM;
21
22 // 获取浏览器高度
23 var browserH = document.documentElement.clientHeight;
24
25 // 左侧目录高度设置
26 var sumaryHeightFun = function() {
27 // DOM.$bookInner.css('min-height',browserH + 'px');
28 var bookInner = document.querySelectorAll('.body-inner')[0];
29 bookInner.style.minHeight = browserH + 'px';
30 var bookInnerHeight = parseInt(getComputedStyle(bookInner)['height']);
31
32 // 判断footer是否进入
33 var footerTop = DOM.footer.getBoundingClientRect().top;
34 var footerHeight = parseInt(getComputedStyle(DOM.footer)['height']);
35 var footerInner = browserH - footerTop;
36
37 if(footerInner >= 0){
38 DOM.$summary.css('height', browserH - footerInner + 'px');
39 DOM.$summary.children('nav').eq(0).css('height',browserH - footerInner - 30 + 'px');
40 } else {
41 DOM.$summary.css('height', browserH + 'px');
42 DOM.$summary.children('nav').eq(0).css('height',browserH - 30 + 'px');
43 }
44 };
45 sumaryHeightFun();
46
47 }
48
49 };
50
51 uGitpage.init();
52
53
54 };
55
56 gitbook.events.bind('start', function () {
57 });
58
59 gitbook.events.bind('page.change', function () {
60 /**
61 * [uDesign description]
62 * @type {Object}
63 */
64 var uDesign = {
65 /**
66 * 初始化
67 * @return {[type]} [description]
68 */
69 init: function() {
70 this.DOMHandler();
71 this.leftDirChange();
72 this.mobileNav();
73 window.onresize = this.mobileNav;
74
75 this.navControl();
76 this.buildTag();
77
78 this.addClass();
79 this.changeLink();
80
81 },
82
83 /**
84 * 获取DOM元素
85 * @type {Object}
86 */
87 DOM: {
88 "$body": $('body'),
89 "$book": $('.book'), // 文档左侧目录
90 "$summary": $('.book-summary'),
91 "$bookBody": $('.book-body'), // 文档右侧主体
92 "$bookInner": $('.body-inner')
93 },
94
95 DOMHandler: function() {
96 var DOM = this.DOM;
97
98 var $container = $('<div class="container"></div>');
99 var $containerDiv = $('<div class="container-div"></div>');
100
101 DOM.$book.append( $container );
102
103 $container.append( $containerDiv );
104 $containerDiv.append( DOM.$summary );
105 $containerDiv.append( DOM.$bookBody );
106
107
108 // 将超链接放到page-wrapper的最后
109 var $pageWrapper = $('.page-wrapper');
110 var $prevA = $('.navigation-prev', DOM.$bookBody );
111 var $nextA = $('.navigation-next', DOM.$bookBody );
112
113 $pageWrapper.append( $prevA );
114 $pageWrapper.append( $nextA );
115
116 var $html = $('html');
117 $html.css('font-size','62.5%');
118
119 $('body').css('display','block');
120 document.body.scrollTop = 0;
121
122 // 设置左侧目录最大高度 : browser height - footerheight - leftmenuMargintop
123 var browserH = document.documentElement.clientHeight;
124 DOM.$bookInner.css('min-height',browserH + 'px');
125
126 // Menu scroll
127 function menuScroll(){
128 // HEAD Height
129 var header = document.getElementsByTagName('header')[0];
130 var banner = document.querySelectorAll('.banner')[0];
131 var headerHt = parseFloat(getComputedStyle(header)['height']);
132 var bannerHt = parseFloat(getComputedStyle(banner)['height']);
133 var headAddHt = headerHt + bannerHt;
134
135 var browserH = document.documentElement.clientHeight;
136
137 var viewFunc = function() {
138 var bodyht = document.body.scrollTop || document.documentElement.scrollTop;
139 var contain = document.querySelectorAll('.book .container')[0];
140 var leftPadding = parseInt(getComputedStyle(contain)['padding-left']);
141 var leftBasic = contain.getBoundingClientRect().left;
142 var leftDis = leftBasic + leftPadding;
143
144 var anchorTop = headAddHt - bodyht + 30;
145
146 if(bodyht >= headAddHt) {
147 $('.book-summary').addClass('fix').css('left',leftDis + 'px');
148 $('#anchors-navbar').css('top', '30px');
149 } else {
150 $('.book-summary').removeClass('fix');
151 $('#anchors-navbar').css('top',anchorTop +'px');
152 }
153
154 // 判断底部进入
155 var bookInner = document.querySelectorAll('.body-inner')[0];
156 bookInner.style.minHeight = browserH + 'px';
157 var bookInnerHeight = parseInt(getComputedStyle(bookInner)['height']);
158
159 // 判断footer是否进入
160 var footer =document.getElementsByTagName('footer')[0];
161 var footerTop = footer.getBoundingClientRect().top;
162 var footerHeight = parseInt(getComputedStyle(footer)['height']);
163 var footerInner = browserH - footerTop;
164 console.log()
165 if(footerInner >= 0){
166 // console.log('scroll in browser');
167 DOM.$summary.css('height', browserH - footerInner + 'px');
168 DOM.$summary.children('nav').eq(0).css('height',browserH - footerInner - 30 + 'px');
169 } else {
170 // console.log('scroll out browser');
171 DOM.$summary.css('height', browserH + 'px');
172 DOM.$summary.children('nav').eq(0).css('height',browserH - 30 + 'px');
173 }
174 };
175
176 document.body.onscroll = viewFunc();
177 window.onresize = viewFunc();
178 }
179 // menuScroll();
180 setInterval(menuScroll, 1);
181
182 var oH = document.body.offsetHeight;
183 var h = parseInt(oH) - 80;
184
185
186 },
187
188 /**
189 * 左侧目录修改
190 * @return {[type]} [description]
191 */
192 leftDirChange: function() {
193 var DOM = this.DOM;
194
195 var $summaryUl = $('ul', DOM.$summary);
196 var $dividerLi = $('.divider', DOM.$summaryUl);
197 var $dividerLiNext = $('.divider + li', DOM.$summaryUl);
198
199 // 去掉介绍
200 $('.summary > li').first().remove();
201
202 // 删除下面横线及之后的li
203 $dividerLi.remove();
204 $dividerLiNext.remove();
205
206 var $summaryAB = $('a b',DOM.$summary);
207
208 // 去掉目录的编号
209 $summaryAB.remove();
210 },
211
212 /**
213 * gitbook 生成内容的移动端面包导航切换
214 * mobile side menu init
215 * @return {[type]} [description]
216 */
217 mobileNav: function() {
218 var bodyWidth = document.body.offsetWidth;
219 var eleBook = document.querySelectorAll('.book')[0];
220 if(bodyWidth<=600) {
221 eleBook.classList ? eleBook.classList.remove('with-summary') : eleBook.className.replace(new RegExp('(^|\\b)' + 'with-summary'.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
222 eleBook.classList ? eleBook.classList.remove('with-search') : eleBook.className.replace(new RegExp('(^|\\b)' + 'with-search'.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
223 }
224 },
225
226 /**
227 * 右侧导航控制
228 * @return {[type]} [description]
229 */
230 navControl: function(){
231 var openOffcanvas = $('[data-offcanvas="open"]');
232 var closeOffcanvas = $('[data-offcanvas="close"]');
233 var offcanvasNav = $('.offcanvas-nav');
234 openOffcanvas.click(function(){
235 openOffcanvas.addClass('nav-open');
236 offcanvasNav.addClass('open');
237 $('body').append('<div class="offcanvas-backdrop"></div>');
238 });
239 closeOffcanvas.click(function(){
240 openOffcanvas.removeClass('nav-open');
241 offcanvasNav.removeClass('open');
242 $('.offcanvas-backdrop').remove();
243 });
244 $(document).on('click', '.offcanvas-backdrop', function(){
245 openOffcanvas.removeClass('nav-open');
246 offcanvasNav.removeClass('open');
247 $('.offcanvas-backdrop').remove();
248 });
249 },
250
251 /**
252 * 创建<style>,<script>标签
253 * @return {[type]} [description]
254 */
255 buildTag: function() {
256 var jsCode = document.querySelectorAll('.jstag');
257 var cssCode = document.querySelectorAll('.csstag');
258 var jsTag = document.createElement('script');
259 var cssTag = document.createElement('style');
260
261 for(var i=0, jsLen = jsCode.length; i<jsLen; i++) {
262 jsTag.innerHTML += jsCode[i].textContent;
263 }
264 document.body.appendChild(jsTag);
265
266 for(var j=0, cssLen = cssCode.length; j<cssLen; j++ ) {
267 cssTag.innerHTML += cssCode[j].textContent;
268 }
269 document.head.appendChild(cssTag);
270 },
271 addClass: function() {
272 $('.book-summary > nav').addClass('nano');
273 $('.summary').addClass('nano-content');
274 },
275 /**
276 * 用于解决gitbook生成的目录没有跳转刷新功能,导致页面加载的插件无法执行
277 * @return {[type]} [description]
278 */
279 changeLink: function() {
280 $('.chapter a').on('click', function(){
281 var aLink = $(this).attr('href').replace(/^\./,'');
282 var linkPageIndex = window.location.href.lastIndexOf('/');
283 var lastHref = window.location.href.substr(0,linkPageIndex);
284 var newHref = window.location.href.substr(0,linkPageIndex) + aLink;
285 // var newHref = window.location.href.replace(/\/[\w-]+\.html[#]*[\w-]*[\u4e00-\u9fa5]*$/g, aLink); //firefox没识别
286 window.location.href = newHref;
287 return false;
288 });
289 }
290
291 }
292
293 uDesign.init();
294 });
295});