Unverified Commit 2e515295 by Sendya

fix: scroll fixed header #140

parent b29f9c4e
<template> <template>
<!-- , width: fixedHeader ? `calc(100% - ${sidebarOpened ? 256 : 80}px)` : '100%' --> <!-- , width: fixedHeader ? `calc(100% - ${sidebarOpened ? 256 : 80}px)` : '100%' -->
<a-layout-header v-if="!headerBarFixed" :class="[fixedHeader && 'ant-header-fixedHeader', sidebarOpened ? 'ant-header-side-opened' : 'ant-header-side-closed', ]" :style="{ padding: '0' }"> <a-layout-header
<div v-if="mode === 'sidemenu'" class="header"> v-if="!headerBarFixed"
:class="[fixedHeader && 'ant-header-fixedHeader', sidebarOpened ? 'ant-header-side-opened' : 'ant-header-side-closed', ]"
:style="{ padding: '0' }"
>
<div
v-if="mode === 'sidemenu'"
class="header"
>
<a-icon <a-icon
v-if="device==='mobile'" v-if="device==='mobile'"
class="trigger" class="trigger"
:type="collapsed ? 'menu-fold' : 'menu-unfold'" :type="collapsed ? 'menu-fold' : 'menu-unfold'"
@click="toggle"></a-icon> @click="toggle"
></a-icon>
<a-icon <a-icon
v-else v-else
class="trigger" class="trigger"
:type="collapsed ? 'menu-unfold' : 'menu-fold'" :type="collapsed ? 'menu-unfold' : 'menu-fold'"
@click="toggle"/> @click="toggle"
/>
<user-menu></user-menu> <user-menu></user-menu>
</div> </div>
<div v-else :class="['top-nav-header-index', theme]"> <div
v-else
:class="['top-nav-header-index', theme]"
>
<div class="header-index-wide"> <div class="header-index-wide">
<div class="header-index-left"> <div class="header-index-left">
<logo class="top-nav-header" :show-title="device !== 'mobile'" /> <logo
class="top-nav-header"
:show-title="device !== 'mobile'"
/>
<s-menu <s-menu
v-if="device !== 'mobile'" v-if="device !== 'mobile'"
mode="horizontal" mode="horizontal"
...@@ -29,7 +44,8 @@ ...@@ -29,7 +44,8 @@
v-else v-else
class="trigger" class="trigger"
:type="collapsed ? 'menu-fold' : 'menu-unfold'" :type="collapsed ? 'menu-fold' : 'menu-unfold'"
@click="toggle"></a-icon> @click="toggle"
></a-icon>
</div> </div>
<user-menu class="header-index-right"></user-menu> <user-menu class="header-index-right"></user-menu>
</div> </div>
...@@ -43,7 +59,8 @@ import UserMenu from '../tools/UserMenu' ...@@ -43,7 +59,8 @@ import UserMenu from '../tools/UserMenu'
import SMenu from '../menu/' import SMenu from '../menu/'
import Logo from '../tools/Logo' import Logo from '../tools/Logo'
import { mixin } from '@/utils/mixin.js' import { mixin } from '@/utils/mixin'
import { handleScrollHeader } from '@/utils/util'
export default { export default {
name: 'GlobalHeader', name: 'GlobalHeader',
...@@ -85,16 +102,19 @@ export default { ...@@ -85,16 +102,19 @@ export default {
} }
}, },
mounted () { mounted () {
window.addEventListener('scroll', this.handleScroll) const _this = this
handleScrollHeader(direction => {
_this.handleScroll(direction)
})
}, },
methods: { methods: {
handleScroll () { handleScroll (direction) {
if (this.autoHideHeader) { if (this.autoHideHeader) {
const scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop const scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
if (scrollTop > 100) { if (direction === 'up') {
this.headerBarFixed = true
} else {
this.headerBarFixed = false this.headerBarFixed = false
} else {
scrollTop > 100 && (this.headerBarFixed = true)
} }
} else { } else {
this.headerBarFixed = false this.headerBarFixed = false
......
export function timeFix () { export function timeFix () {
const time = new Date() const time = new Date()
const hour = time.getHours() const hour = time.getHours()
return hour < 9 ? '早上好' : (hour <= 11 ? '上午好' : (hour <= 13 ? '中午好' : (hour < 20 ? '下午好' : '晚上好'))) return hour < 9 ? '早上好' : hour <= 11 ? '上午好' : hour <= 13 ? '中午好' : hour < 20 ? '下午好' : '晚上好'
} }
export function welcome () { export function welcome () {
const arr = ['休息一会儿吧', '准备吃什么呢?', '要不要打一把 DOTA', '我猜你可能累了'] const arr = ['休息一会儿吧', '准备吃什么呢?', '要不要打一把 DOTA', '我猜你可能累了']
const index = Math.floor((Math.random() * arr.length)) const index = Math.floor(Math.random() * arr.length)
return arr[index] return arr[index]
} }
...@@ -20,6 +20,31 @@ export function triggerWindowResizeEvent () { ...@@ -20,6 +20,31 @@ export function triggerWindowResizeEvent () {
window.dispatchEvent(event) window.dispatchEvent(event)
} }
export function handleScrollHeader (callback) {
let timer = 0
let beforeScrollTop = window.pageYOffset
callback = callback || function () {}
window.addEventListener(
'scroll',
event => {
clearTimeout(timer)
timer = setTimeout(() => {
let direction = 'up'
const afterScrollTop = window.pageYOffset
const delta = afterScrollTop - beforeScrollTop
if (delta === 0) {
return false
}
direction = delta > 0 ? 'down' : 'up'
callback(direction)
beforeScrollTop = afterScrollTop
}, 50)
},
false
)
}
/** /**
* Remove loading animate * Remove loading animate
* @param id parent element id or class * @param id parent element id or class
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment