2018-06-08 10:48:48 +08:00

102 lines
2.6 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import addClass from 'dom101/add-class'
import removeClass from 'dom101/remove-class'
import after from 'dom101/after'
// 浏览器判断
import Browser from './browser'
// fix hexo 不支持的配置
import Fix from './fix'
import Util from './util'
function isPathMatch(path, href) {
let reg = /\/|index.html/g
return (path.replace(reg, '')) === (href.replace(reg, ''))
}
function tabActive() {
let $tabs = document.querySelectorAll('.js-header-menu li a')
let path = window.location.pathname
Array.prototype.forEach.call($tabs, function($tab, i){
if (isPathMatch(path, $tab.getAttribute('href'))) {
addClass($tab, 'active')
}
})
}
function getElementLeft(element) {    
var actualLeft = element.offsetLeft;    
var current = element.offsetParent;    
while (current !== null) {      
actualLeft += current.offsetLeft;    
current = current.offsetParent;  
}  
return actualLeft;
}  
function getElementTop(element) {    
var actualTop = element.offsetTop;    
var current = element.offsetParent;    
while (current !== null) {      
actualTop += current.offsetTop;      
current = current.offsetParent;    
}    
return actualTop;  
}
function scrollStop($dom, top, limit, zIndex, diff) {
let nowLeft = getElementLeft($dom)
let nowTop = getElementTop($dom) - top
if (nowTop - limit <= diff) {
let $newDom = $dom.$newDom
if (!$newDom) {
$newDom = $dom.cloneNode(true)
after($dom, $newDom)
$dom.$newDom = $newDom
$newDom.style.position = 'fixed'
$newDom.style.top = (limit || nowTop) + 'px'
$newDom.style.left = nowLeft + 'px'
$newDom.style.zIndex = zIndex || 2
$newDom.style.width = '100%'
$newDom.style.color = '#fff'
}
$newDom.style.visibility = 'visible'
$dom.style.visibility = 'hidden'
} else {
$dom.style.visibility = 'visible'
let $newDom = $dom.$newDom
if ($newDom) {
$newDom.style.visibility = 'hidden'
}
}
}
function handleScroll() {
let $overlay = document.querySelector('.js-overlay')
let $menu = document.querySelector('.js-header-menu')
scrollStop($overlay, document.body.scrollTop, -63, 2, 0)
scrollStop($menu, document.body.scrollTop, 1, 3, 0)
}
function bindScroll() {
document.querySelector('#container').addEventListener('scroll', (e) => {
handleScroll()
})
window.addEventListener('scroll', (e) => {
handleScroll()
})
handleScroll()
}
function init() {
if (Browser.versions.mobile && window.screen.width < 800) {
tabActive()
bindScroll()
}
}
init();
Util.addLoadEvent(function() {
Fix.init()
})