这个效果是一个项目中抽出来的一个demo效果。
前期准备:
1. 引入jQ
<script src&#61;"https://cdn.bootcss.com/jquery/3.2.1/jquery.js">script>
- 引入lodash.js
npm install lodash -D
fixTop.vue组件的
<template><div class&#61;"fixtop2"><header class&#61;"header" ref&#61;"header">header><div class&#61;"nav" ref&#61;"nav" :class&#61;"{isFixed:isFixed}"><div class&#61;"box" v-for&#61;"(item,index) in list" :key&#61;"index">{{item.title}}div>div><ul class&#61;"content"><li v-for&#61;"(item,index) in new Array(20)" :key&#61;"index">{{index&#43;1}}li>ul>div>
template>
<script>
var throttle &#61; require(&#39;lodash/throttle&#39;);
export default {name: &#39;navScroll2&#39;,data() {return {list: [{ title: &#39;AAAA&#39;, id: 1 },{ title: &#39;BBBB&#39;, id: 2 },{ title: &#39;CCCC&#39;, id: 3 },{ title: &#39;DDDD&#39;, id: 4 },],isFixed: false, throttleScroll: null, };},methods: {handleScroll() {let h &#61; $(this.$refs.header).outerHeight(); let wh &#61; $(window).scrollTop(); let navH &#61; $(this.$refs.nav).outerHeight(); if (wh > h) {this.isFixed &#61; true;} else {this.isFixed &#61; false;}},},mounted() {this.$nextTick(() &#61;> {window.addEventListener(&#39;scroll&#39;, this.throttleScroll, false);});this.throttleScroll &#61; throttle(this.handleScroll, 100);},deactivated() {window.removeEventListener(&#39;scroll&#39;, this.throttleScroll);},
};
script>
<style lang&#61;"scss" scoped>
.fixtop2 {min-height: 100vh;
}.header {height: 5rem;width: 100%;background-color: red;
}.nav {display: flex;width: 100%;background-color: pink;&.isFixed { position: fixed;left: 0;top: 0;z-index: 9999;}.box {font-size: 0.3rem;padding: 0 0.3rem;height: 0.9rem;line-height: 0.9rem;color: #333333;flex: 1;}
}.content {height: 20rem;li { width: 100%;height: 1rem;border-bottom: 1px solid #000;}
}
style>