Skip to content

Commit 2e51529

Browse files
committed
fix: scroll fixed header #140
1 parent b29f9c4 commit 2e51529

File tree

2 files changed

+60
-15
lines changed

2 files changed

+60
-15
lines changed

src/components/page/GlobalHeader.vue

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,39 @@
11
<template>
22
<!-- , width: fixedHeader ? `calc(100% - ${sidebarOpened ? 256 : 80}px)` : '100%' -->
3-
<a-layout-header v-if="!headerBarFixed" :class="[fixedHeader && 'ant-header-fixedHeader', sidebarOpened ? 'ant-header-side-opened' : 'ant-header-side-closed', ]" :style="{ padding: '0' }">
4-
<div v-if="mode === 'sidemenu'" class="header">
3+
<a-layout-header
4+
v-if="!headerBarFixed"
5+
:class="[fixedHeader && 'ant-header-fixedHeader', sidebarOpened ? 'ant-header-side-opened' : 'ant-header-side-closed', ]"
6+
:style="{ padding: '0' }"
7+
>
8+
<div
9+
v-if="mode === 'sidemenu'"
10+
class="header"
11+
>
512
<a-icon
613
v-if="device==='mobile'"
714
class="trigger"
815
:type="collapsed ? 'menu-fold' : 'menu-unfold'"
9-
@click="toggle"></a-icon>
16+
@click="toggle"
17+
></a-icon>
1018
<a-icon
1119
v-else
1220
class="trigger"
1321
:type="collapsed ? 'menu-unfold' : 'menu-fold'"
14-
@click="toggle"/>
22+
@click="toggle"
23+
/>
1524

1625
<user-menu></user-menu>
1726
</div>
18-
<div v-else :class="['top-nav-header-index', theme]">
27+
<div
28+
v-else
29+
:class="['top-nav-header-index', theme]"
30+
>
1931
<div class="header-index-wide">
2032
<div class="header-index-left">
21-
<logo class="top-nav-header" :show-title="device !== 'mobile'" />
33+
<logo
34+
class="top-nav-header"
35+
:show-title="device !== 'mobile'"
36+
/>
2237
<s-menu
2338
v-if="device !== 'mobile'"
2439
mode="horizontal"
@@ -29,7 +44,8 @@
2944
v-else
3045
class="trigger"
3146
:type="collapsed ? 'menu-fold' : 'menu-unfold'"
32-
@click="toggle"></a-icon>
47+
@click="toggle"
48+
></a-icon>
3349
</div>
3450
<user-menu class="header-index-right"></user-menu>
3551
</div>
@@ -43,7 +59,8 @@ import UserMenu from '../tools/UserMenu'
4359
import SMenu from '../menu/'
4460
import Logo from '../tools/Logo'
4561
46-
import { mixin } from '@/utils/mixin.js'
62+
import { mixin } from '@/utils/mixin'
63+
import { handleScrollHeader } from '@/utils/util'
4764
4865
export default {
4966
name: 'GlobalHeader',
@@ -85,16 +102,19 @@ export default {
85102
}
86103
},
87104
mounted () {
88-
window.addEventListener('scroll', this.handleScroll)
105+
const _this = this
106+
handleScrollHeader(direction => {
107+
_this.handleScroll(direction)
108+
})
89109
},
90110
methods: {
91-
handleScroll () {
111+
handleScroll (direction) {
92112
if (this.autoHideHeader) {
93113
const scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
94-
if (scrollTop > 100) {
95-
this.headerBarFixed = true
96-
} else {
114+
if (direction === 'up') {
97115
this.headerBarFixed = false
116+
} else {
117+
scrollTop > 100 && (this.headerBarFixed = true)
98118
}
99119
} else {
100120
this.headerBarFixed = false

src/utils/util.js

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
export function timeFix () {
22
const time = new Date()
33
const hour = time.getHours()
4-
return hour < 9 ? '早上好' : (hour <= 11 ? '上午好' : (hour <= 13 ? '中午好' : (hour < 20 ? '下午好' : '晚上好')))
4+
return hour < 9 ? '早上好' : hour <= 11 ? '上午好' : hour <= 13 ? '中午好' : hour < 20 ? '下午好' : '晚上好'
55
}
66

77
export function welcome () {
88
const arr = ['休息一会儿吧', '准备吃什么呢?', '要不要打一把 DOTA', '我猜你可能累了']
9-
const index = Math.floor((Math.random() * arr.length))
9+
const index = Math.floor(Math.random() * arr.length)
1010
return arr[index]
1111
}
1212

@@ -20,6 +20,31 @@ export function triggerWindowResizeEvent () {
2020
window.dispatchEvent(event)
2121
}
2222

23+
export function handleScrollHeader (callback) {
24+
let timer = 0
25+
26+
let beforeScrollTop = window.pageYOffset
27+
callback = callback || function () {}
28+
window.addEventListener(
29+
'scroll',
30+
event => {
31+
clearTimeout(timer)
32+
timer = setTimeout(() => {
33+
let direction = 'up'
34+
const afterScrollTop = window.pageYOffset
35+
const delta = afterScrollTop - beforeScrollTop
36+
if (delta === 0) {
37+
return false
38+
}
39+
direction = delta > 0 ? 'down' : 'up'
40+
callback(direction)
41+
beforeScrollTop = afterScrollTop
42+
}, 50)
43+
},
44+
false
45+
)
46+
}
47+
2348
/**
2449
* Remove loading animate
2550
* @param id parent element id or class

0 commit comments

Comments
 (0)